# md12c/opengl-cmake-template architecture

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

- Interactive diagram: https://gitdiagram.com/md12c/opengl-cmake-template
- Repository: https://github.com/md12c/opengl-cmake-template

## Overview

This is an OpenGL rendering-engine template. The principal workflow is application input and frame control, scene rendering, model/material and lighting work, then framebuffer post-processing and display. The graph also preserves the README’s cameras, model formats, skybox, shading, shadows, culling, anti-aliasing, HDR/gamma, and ImGui capabilities. Several domain components are represented from the README and file tree because their implementations were not excerpted; those links are omitted where invocation ownership is not evidenced.

Main entry points: [`Template/src/Graphics/Renderer.cpp`](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Renderer.cpp) (Forward Renderer), [`Template/src/Graphics/Scene.cpp`](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Scene.cpp) (Scene State), [`Template/src/App.cpp`](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/App.cpp) (Frame Loop), [`Template/src/Graphics/Models`](https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/Models) (Models and Meshes)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_app_loop["Frame Loop<br/>[App.cpp]"]
  node_window["Window Input<br/>[Window.cpp]"]
  node_ui["ImGui Interface<br/>[ImguiSetup.cpp]"]
end

subgraph group_scene["Scene Domain"]
  node_scene_state["Scene State<br/>[Scene.cpp]"]
  node_cameras["Camera Modes"]
  node_models["Models and Meshes"]
  node_skybox["Skybox and IBL<br/>[Skybox.cpp]"]
  node_lights["Lights and Shadows<br/>[LightResources.cpp]"]
  node_materials[("Material Catalog")]
end

subgraph group_render["Rendering"]
  node_textures["Texture Loading<br/>[Texture.cpp]"]
  node_renderer["Forward Renderer<br/>[Renderer.cpp]"]
  node_shaders["Shader Programs<br/>[Shader.cpp]"]
  node_frustum["Frustum Culling"]
  node_framebuffers["Frame Buffers"]
  node_postprocess["Post-Processing"]
  node_gl_objects["GPU Resources"]
end

subgraph group_deps["Runtime Libraries"]
  node_glfw["GLFW<br/>[glfw3.h]"]
  node_imgui_lib["Dear ImGui<br/>[imgui.cpp]"]
  node_glm["GLM Math"]
  node_assimp["Assimp Import"]
  node_stb["stb Image<br/>[stb_image.h]"]
end

node_user(("Operator"))

node_user -->|"drives"| node_app_loop
node_app_loop -->|"opens frames"| node_window
node_app_loop -->|"updates"| node_scene_state
node_app_loop -->|"renders scene"| node_renderer
node_app_loop -->|"draws interface"| node_ui
node_window -.->|"uses input"| node_glfw
node_ui -.->|"uses UI library"| node_imgui_lib
node_scene_state -.->|"provides cameras"| node_cameras
node_scene_state -.->|"provides models"| node_models
node_scene_state -.->|"provides skybox"| node_skybox
node_scene_state -.->|"provides lights"| node_lights
node_models -.->|"imports assets"| node_assimp
node_models -.->|"uses materials"| node_materials
node_materials -->|"creates textures"| node_textures
node_renderer -->|"reads scene"| node_scene_state
node_renderer -->|"runs shadow pass"| node_lights
node_renderer -->|"updates uniforms"| node_cameras
node_renderer -->|"draws models"| node_models
node_renderer -->|"draws skybox"| node_skybox
node_renderer -->|"sets planes"| node_frustum
node_renderer -->|"selects programs"| node_shaders
node_renderer -->|"renders multisample"| node_framebuffers
node_renderer -->|"runs bloom pass"| node_postprocess
node_renderer -->|"binds resources"| node_gl_objects
node_textures -.->|"decodes images"| node_stb
node_renderer -.->|"uses math"| node_glm

click node_app_loop "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/App.cpp"
click node_window "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Window.cpp"
click node_ui "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/ImguiSetup.cpp"
click node_scene_state "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Scene.cpp"
click node_cameras "https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/Cameras"
click node_models "https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/Models"
click node_skybox "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Models/Skybox.cpp"
click node_lights "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Lighting/LightResources.cpp"
click node_materials "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Materials/MaterialManager.cpp"
click node_textures "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/GLObjects/Texture.cpp"
click node_renderer "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Renderer.cpp"
click node_shaders "https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Shaders/Shader.cpp"
click node_frustum "https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/Frustum"
click node_framebuffers "https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/FrameBuffers"
click node_postprocess "https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/FrameBuffers"
click node_gl_objects "https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/GLObjects"
click node_glfw "https://github.com/md12c/opengl-cmake-template/blob/master/Template/include/libraries/GLFW/glfw3.h"
click node_imgui_lib "https://github.com/md12c/opengl-cmake-template/blob/master/Template/include/libraries/imgui/imgui.cpp"
click node_glm "https://github.com/md12c/opengl-cmake-template/tree/master/Template/include/libraries/glm"
click node_assimp "https://github.com/md12c/opengl-cmake-template/tree/master/Template/include/libraries/assimp"
click node_stb "https://github.com/md12c/opengl-cmake-template/blob/master/Template/include/libraries/stb/stb_image.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_app_loop,node_window,node_ui toneBlue
class node_scene_state,node_cameras,node_models,node_skybox,node_lights,node_materials toneAmber
class node_textures,node_renderer,node_shaders,node_frustum,node_framebuffers,node_postprocess,node_gl_objects toneMint
class node_glfw,node_imgui_lib,node_glm,node_assimp,node_stb toneRose
class node_user toneIndigo
```

## Components

### Application

- [Frame Loop](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/App.cpp): `Template/src/App.cpp`
- [Window Input](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Window.cpp): `Template/src/Graphics/Window.cpp`
- [ImGui Interface](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/ImguiSetup.cpp): `Template/src/Graphics/ImguiSetup.cpp`

### Scene Domain

- [Scene State](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Scene.cpp): `Template/src/Graphics/Scene.cpp`
- [Camera Modes](https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/Cameras): `Template/src/Graphics/Cameras`
- [Models and Meshes](https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/Models): `Template/src/Graphics/Models`
- [Skybox and IBL](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Models/Skybox.cpp): `Template/src/Graphics/Models/Skybox.cpp`
- [Lights and Shadows](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Lighting/LightResources.cpp): `Template/src/Graphics/Lighting/LightResources.cpp`
- [Material Catalog](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Materials/MaterialManager.cpp): `Template/src/Graphics/Materials/MaterialManager.cpp`

### Rendering

- [Texture Loading](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/GLObjects/Texture.cpp): `Template/src/Graphics/GLObjects/Texture.cpp`
- [Forward Renderer](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Renderer.cpp): `Template/src/Graphics/Renderer.cpp`
- [Shader Programs](https://github.com/md12c/opengl-cmake-template/blob/master/Template/src/Graphics/Shaders/Shader.cpp): `Template/src/Graphics/Shaders/Shader.cpp`
- [Frustum Culling](https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/Frustum): `Template/src/Graphics/Frustum`
- [Frame Buffers](https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/FrameBuffers): `Template/src/Graphics/FrameBuffers`
- [Post-Processing](https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/FrameBuffers): `Template/src/Graphics/FrameBuffers`
- [GPU Resources](https://github.com/md12c/opengl-cmake-template/tree/master/Template/src/Graphics/GLObjects): `Template/src/Graphics/GLObjects`

### Runtime Libraries

- [GLFW](https://github.com/md12c/opengl-cmake-template/blob/master/Template/include/libraries/GLFW/glfw3.h): `Template/include/libraries/GLFW/glfw3.h`
- [Dear ImGui](https://github.com/md12c/opengl-cmake-template/blob/master/Template/include/libraries/imgui/imgui.cpp): `Template/include/libraries/imgui/imgui.cpp`
- [GLM Math](https://github.com/md12c/opengl-cmake-template/tree/master/Template/include/libraries/glm): `Template/include/libraries/glm`
- [Assimp Import](https://github.com/md12c/opengl-cmake-template/tree/master/Template/include/libraries/assimp): `Template/include/libraries/assimp`
- [stb Image](https://github.com/md12c/opengl-cmake-template/blob/master/Template/include/libraries/stb/stb_image.h): `Template/include/libraries/stb/stb_image.h`

### Other components

- **Operator**

## Connections

- Operator → Frame Loop: drives (evidence: `Template/src/App.cpp`)
- Frame Loop → Window Input: opens frames (evidence: `Template/src/App.cpp`)
- Frame Loop → Scene State: updates (evidence: `Template/src/App.cpp`)
- Frame Loop → Forward Renderer: renders scene (evidence: `Template/src/App.cpp`)
- Frame Loop → ImGui Interface: draws interface (evidence: `Template/src/App.cpp`)
- Window Input → GLFW: uses input
- ImGui Interface → Dear ImGui: uses UI library
- Scene State → Camera Modes: provides cameras
- Scene State → Models and Meshes: provides models
- Scene State → Skybox and IBL: provides skybox
- Scene State → Lights and Shadows: provides lights
- Models and Meshes → Assimp Import: imports assets
- Models and Meshes → Material Catalog: uses materials
- Material Catalog → Texture Loading: creates textures (evidence: `Template/src/Graphics/Materials/MaterialManager.cpp`)
- Forward Renderer → Scene State: reads scene (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → Lights and Shadows: runs shadow pass (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → Camera Modes: updates uniforms (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → Models and Meshes: draws models (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → Skybox and IBL: draws skybox (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → Frustum Culling: sets planes (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → Shader Programs: selects programs (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → Frame Buffers: renders multisample (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → Post-Processing: runs bloom pass (evidence: `Template/src/Graphics/Renderer.cpp`)
- Forward Renderer → GPU Resources: binds resources (evidence: `Template/src/Graphics/Renderer.cpp`)
- Texture Loading → stb Image: decodes images
- Forward Renderer → GLM Math: uses math
