# datwave999/opengl-gameengine architecture

> Architecture diagram of the GitHub repository datwave999/opengl-gameengine, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/datwave999/opengl-gameengine
- Repository: https://github.com/datwave999/opengl-gameengine

## Overview

OpenGL-GameEngine is a work-in-progress C++ 3D engine. Its principal runtime starts in Application: it initializes the window and assets, pushes the initial PlayState, then repeatedly updates and renders active states before swapping buffers. The README also identifies an ECS and custom OpenGL rendering as product capabilities, represented here by their component/system and graphics layers. AssetManager supports cached shader, texture, mesh, material, and model assets, including Assimp model import. Application wiring is sampled; links among unsampled gameplay, ECS, and rendering code are intentionally not asserted.

Main entry points: [`OpenGL-GameEngine/src/Core/Application.cpp`](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Application.cpp) (Application), [`OpenGL-GameEngine/src/Resources/AssetManager.cpp`](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Resources/AssetManager.cpp) (Asset Manager), [`OpenGL-GameEngine/src/Core/Window.cpp`](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Window.cpp) (Window), [`OpenGL-GameEngine/src/main.cpp`](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/main.cpp) (Engine Entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Runtime and States"]
  node_main["Engine Entry<br/>[main.cpp]"]
  node_application["Application<br/>[Application.cpp]"]
  node_window["Window<br/>[Window.cpp]"]
  node_input["Input<br/>[Input.cpp]"]
  node_state["State Interface<br/>[State.h]"]
  node_play["Play State<br/>[PlayState.cpp]"]
  node_pause["Pause State<br/>[PauseState.cpp]"]
  node_camera["Camera<br/>[Camera.cpp]"]
end

subgraph group_ecs["Entity Component System"]
  node_entity["Entity<br/>[Entity.h]"]
  node_transform["Transform Component"]
  node_rendercomponent["Render Component<br/>[RenderComponent.h]"]
  node_lightcomponent["Light Components<br/>[LightComponents.h]"]
  node_transformsystem["Transform System"]
  node_rendersystem["Render System<br/>[RenderSystem.cpp]"]
  node_lightsystem["Light System<br/>[LightSystem.cpp]"]
end

subgraph group_render["OpenGL Rendering"]
  node_shader["Shader<br/>[Shader.cpp]"]
  node_buffer["GPU Buffer<br/>[Buffer.cpp]"]
  node_vertexarray["Vertex Array<br/>[VertexArray.cpp]"]
end

subgraph group_assets["Asset Management"]
  node_assetmanager["Asset Manager<br/>[AssetManager.cpp]"]
  node_assetdata["Asset Data<br/>[AssetData.h]"]
end

node_user(("Game User"))
node_assimp["Assimp Importer"]
node_stb["STB Image"]
node_glfw["GLFW"]
node_opengl["OpenGL"]

node_user -->|"starts"| node_main
node_main -->|"creates"| node_application
node_application -->|"creates"| node_window
node_application -->|"initializes"| node_assetmanager
node_application -->|"pushes state"| node_play
node_application -->|"updates and renders"| node_state
node_application -->|"polls and swaps"| node_window
node_application -->|"registers callbacks"| node_input
node_window -->|"uses"| node_glfw
node_assetmanager -->|"creates"| node_shader
node_assetmanager -->|"creates"| node_buffer
node_assetmanager -->|"creates"| node_vertexarray
node_assetmanager -->|"stores assets"| node_assetdata
node_assetmanager -->|"imports models"| node_assimp
node_assetmanager -->|"loads images"| node_stb
node_shader -->|"uses"| node_opengl
node_buffer -->|"uploads data"| node_opengl
node_vertexarray -->|"configures arrays"| node_opengl

click node_main "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/main.cpp"
click node_application "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Application.cpp"
click node_window "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Window.cpp"
click node_input "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Input.cpp"
click node_state "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/Core/State.h"
click node_play "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/PlayState.cpp"
click node_pause "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/PauseState.cpp"
click node_camera "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Camera.cpp"
click node_entity "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/ECS/Entity.h"
click node_transform "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/ECS/Components/TransformComponent.h"
click node_rendercomponent "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/ECS/Components/RenderComponent.h"
click node_lightcomponent "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/ECS/Components/LightComponents.h"
click node_transformsystem "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/ECS/Systems/TransformSystem.cpp"
click node_rendersystem "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/ECS/Systems/RenderSystem.cpp"
click node_lightsystem "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/ECS/Systems/LightSystem.cpp"
click node_shader "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Graphics/Shader.cpp"
click node_buffer "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Graphics/Buffer.cpp"
click node_vertexarray "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Graphics/VertexArray.cpp"
click node_assetmanager "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Resources/AssetManager.cpp"
click node_assetdata "https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/Resources/AssetData.h"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_application,node_window,node_input,node_state,node_play,node_pause,node_camera,node_user toneBlue
class node_entity,node_transform,node_rendercomponent,node_lightcomponent,node_transformsystem,node_rendersystem,node_lightsystem toneAmber
class node_shader,node_buffer,node_vertexarray toneMint
class node_assetmanager,node_assetdata toneRose
class node_assimp,node_stb,node_glfw,node_opengl toneIndigo
```

## Components

### Runtime and States

- [Engine Entry](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/main.cpp): `OpenGL-GameEngine/src/main.cpp`
- [Application](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Application.cpp): `OpenGL-GameEngine/src/Core/Application.cpp`
- [Window](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Window.cpp): `OpenGL-GameEngine/src/Core/Window.cpp`
- [Input](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Input.cpp): `OpenGL-GameEngine/src/Core/Input.cpp`
- [State Interface](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/Core/State.h): `OpenGL-GameEngine/include/Core/State.h`
- [Play State](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/PlayState.cpp): `OpenGL-GameEngine/src/Core/PlayState.cpp`
- [Pause State](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/PauseState.cpp): `OpenGL-GameEngine/src/Core/PauseState.cpp`
- [Camera](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Core/Camera.cpp): `OpenGL-GameEngine/src/Core/Camera.cpp`

### Entity Component System

- [Entity](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/ECS/Entity.h): `OpenGL-GameEngine/include/ECS/Entity.h`
- [Transform Component](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/ECS/Components/TransformComponent.h): `OpenGL-GameEngine/include/ECS/Components/TransformComponent.h`
- [Render Component](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/ECS/Components/RenderComponent.h): `OpenGL-GameEngine/include/ECS/Components/RenderComponent.h`
- [Light Components](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/ECS/Components/LightComponents.h): `OpenGL-GameEngine/include/ECS/Components/LightComponents.h`
- [Transform System](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/ECS/Systems/TransformSystem.cpp): `OpenGL-GameEngine/src/ECS/Systems/TransformSystem.cpp`
- [Render System](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/ECS/Systems/RenderSystem.cpp): `OpenGL-GameEngine/src/ECS/Systems/RenderSystem.cpp`
- [Light System](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/ECS/Systems/LightSystem.cpp): `OpenGL-GameEngine/src/ECS/Systems/LightSystem.cpp`

### OpenGL Rendering

- [Shader](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Graphics/Shader.cpp): `OpenGL-GameEngine/src/Graphics/Shader.cpp`
- [GPU Buffer](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Graphics/Buffer.cpp): `OpenGL-GameEngine/src/Graphics/Buffer.cpp`
- [Vertex Array](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Graphics/VertexArray.cpp): `OpenGL-GameEngine/src/Graphics/VertexArray.cpp`

### Asset Management

- [Asset Manager](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/src/Resources/AssetManager.cpp): `OpenGL-GameEngine/src/Resources/AssetManager.cpp`
- [Asset Data](https://github.com/datwave999/opengl-gameengine/blob/master/OpenGL-GameEngine/include/Resources/AssetData.h): `OpenGL-GameEngine/include/Resources/AssetData.h`

### Other components

- **Game User**
- **Assimp Importer**
- **STB Image**
- **GLFW**
- **OpenGL**

## Connections

- Game User → Engine Entry: starts
- Engine Entry → Application: creates
- Application → Window: creates
- Application → Asset Manager: initializes
- Application → Play State: pushes state
- Application → State Interface: updates and renders
- Application → Window: polls and swaps
- Application → Input: registers callbacks
- Window → GLFW: uses
- Asset Manager → Shader: creates
- Asset Manager → GPU Buffer: creates
- Asset Manager → Vertex Array: creates
- Asset Manager → Asset Data: stores assets
- Asset Manager → Assimp Importer: imports models
- Asset Manager → STB Image: loads images
- Shader → OpenGL: uses
- GPU Buffer → OpenGL: uploads data
- Vertex Array → OpenGL: configures arrays
