# mite085/miteengine architecture

> Architecture diagram of the GitHub repository mite085/miteengine, 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/mite085/miteengine
- Repository: https://github.com/mite085/miteengine

## Overview

MiteEngine is a modular C++ 3D engine with an integrated ImGui editor. The main workflow is application startup, scene and asset preparation, building a render queue, then rendering frames through an OpenGL pipeline; editor panels provide scene inspection and interaction. The README documents ECS, scene-graph/BVH queries, GLTF/PBR assets, lighting and the hybrid render stages. Some subsystem links are based on the README or import references in the supplied SOURCE INDEX; unsampled implementation details are not assumed.

Main entry points: [`src/application/application.cpp`](https://github.com/mite085/miteengine/blob/main/src/application/application.cpp) (Application), [`src/asset/asset_manager.cpp`](https://github.com/mite085/miteengine/blob/main/src/asset/asset_manager.cpp) (Asset Manager), [`src/engine/renderer/render_opengl/opengl_pipeline.cpp`](https://github.com/mite085/miteengine/blob/main/src/engine/renderer/render_opengl/opengl_pipeline.cpp) (OpenGL Pipeline), [`src/engine/renderer/render_core/render_context.h`](https://github.com/mite085/miteengine/blob/main/src/engine/renderer/render_core/render_context.h) (Render Context)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application"]
  node_application["Application<br/>[application.cpp]"]
  node_window["Window<br/>[glfw_window.cpp]"]
  node_events["Event Bus<br/>[event_bus.cpp]"]
end

subgraph group_scene["Scene and Input"]
  node_input["Input System<br/>[input_manager.cpp]"]
  node_ecs["ECS Scene<br/>[scene_core.cpp]"]
  node_scenegraph["Scene Graph"]
  node_spatial["Spatial Queries<br/>[simple_bvh.cpp]"]
  node_sceneview["Scene View<br/>[scene_view.cpp]"]
  node_renderqueue["Render Queue<br/>[render_queue.cpp]"]
  node_serializer["Scene Serialization"]
end

subgraph group_assets["Asset Pipeline"]
  node_assetmanager["Asset Manager<br/>[asset_manager.cpp]"]
  node_modelload["Model Loading<br/>[model_loader.cpp]"]
  node_textureload["Texture Loading<br/>[texture_loader.cpp]"]
  node_materialload["Material Loading"]
  node_assetcache[("Asset Cache<br/>[asset_cache.h]")]
end

subgraph group_render["Rendering and Lighting"]
  node_material["Material System"]
  node_light["Light Manager<br/>[light_manager.cpp]"]
  node_pipeline["Render Pipeline<br/>[render_pipeline.h]"]
  node_opengl["OpenGL Pipeline"]
  node_stages["Render Stages"]
  node_context["Render Context<br/>[render_context.h]"]
end

subgraph group_editor["Editor UI"]
  node_editor["Editor UI<br/>[editor.cpp]"]
  node_panels["Editor Panels"]
  node_ui["UI System<br/>[ui_system.cpp]"]
end

node_user(("User"))

node_user -->|"starts"| node_application
node_application -->|"initializes"| node_window
node_application -->|"initializes"| node_input
node_application -->|"manages"| node_ecs
node_application -->|"manages"| node_scenegraph
node_application -->|"manages"| node_sceneview
node_application -->|"uses"| node_assetmanager
node_application -->|"initializes"| node_pipeline
node_application -->|"initializes"| node_ui
node_application -->|"creates"| node_panels
node_application -->|"initializes"| node_light
node_application -->|"initializes"| node_material
node_application -->|"subscribes"| node_events
node_ecs -.->|"provides entities"| node_scenegraph
node_scenegraph -->|"uses"| node_spatial
node_sceneview -.->|"builds"| node_renderqueue
node_application -->|"loads and saves"| node_serializer
node_assetmanager -->|"delegates"| node_modelload
node_assetmanager -->|"delegates"| node_textureload
node_assetmanager -->|"delegates"| node_materialload
node_assetmanager -->|"uses"| node_assetcache
node_pipeline -->|"implemented by"| node_opengl
node_opengl -->|"registers"| node_stages
node_opengl -->|"creates"| node_context
node_context -->|"reads"| node_renderqueue
node_context -->|"uses"| node_light
node_light -->|"publishes events"| node_application
node_user -->|"edits scene"| node_editor
node_editor -->|"provides"| node_panels
node_panels -.->|"renders through"| node_ui
node_input -->|"controls navigation"| node_sceneview
node_stages -->|"ShadowMap → G-Buffer → Deferred → Forward → Blend"| node_stages

click node_application "https://github.com/mite085/miteengine/blob/main/src/application/application.cpp"
click node_window "https://github.com/mite085/miteengine/blob/main/src/engine/window/glfw_window/glfw_window.cpp"
click node_input "https://github.com/mite085/miteengine/blob/main/src/engine/input/input/input_manager.cpp"
click node_ecs "https://github.com/mite085/miteengine/blob/main/src/engine/scene_core/scene_core/scene_core.cpp"
click node_scenegraph "https://github.com/mite085/miteengine/blob/main/src/engine/scene_graph/scene_node_manager.cpp"
click node_spatial "https://github.com/mite085/miteengine/blob/main/src/engine/scene_graph/simple_bvh.cpp"
click node_sceneview "https://github.com/mite085/miteengine/blob/main/src/engine/scene_view/scene_view.cpp"
click node_renderqueue "https://github.com/mite085/miteengine/blob/main/src/engine/scene_view/render_queue.cpp"
click node_serializer "https://github.com/mite085/miteengine/blob/main/src/engine/scene_serializer/scene_serializer.cpp"
click node_assetmanager "https://github.com/mite085/miteengine/blob/main/src/asset/asset_manager.cpp"
click node_modelload "https://github.com/mite085/miteengine/blob/main/src/asset/model_loader.cpp"
click node_textureload "https://github.com/mite085/miteengine/blob/main/src/asset/texture_loader.cpp"
click node_materialload "https://github.com/mite085/miteengine/blob/main/src/asset/material_loader.cpp"
click node_assetcache "https://github.com/mite085/miteengine/blob/main/src/asset/asset_cache.h"
click node_material "https://github.com/mite085/miteengine/blob/main/src/engine/material/material_factory.cpp"
click node_light "https://github.com/mite085/miteengine/blob/main/src/engine/light/light_core/light_manager.cpp"
click node_pipeline "https://github.com/mite085/miteengine/blob/main/src/engine/renderer/render_core/render_pipeline.h"
click node_opengl "https://github.com/mite085/miteengine/blob/main/src/engine/renderer/render_opengl/opengl_pipeline.cpp"
click node_stages "https://github.com/mite085/miteengine/tree/main/src/engine/renderer/render_stages"
click node_context "https://github.com/mite085/miteengine/blob/main/src/engine/renderer/render_core/render_context.h"
click node_editor "https://github.com/mite085/miteengine/blob/main/src/editor/editor.cpp"
click node_panels "https://github.com/mite085/miteengine/tree/main/src/engine/ui/ui_panel"
click node_ui "https://github.com/mite085/miteengine/blob/main/src/engine/ui/ui_core/ui_system.cpp"
click node_events "https://github.com/mite085/miteengine/blob/main/src/engine/event/event_bus.cpp"

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_application,node_window,node_events,node_user toneBlue
class node_input,node_ecs,node_scenegraph,node_spatial,node_sceneview,node_renderqueue,node_serializer toneAmber
class node_assetmanager,node_modelload,node_textureload,node_materialload,node_assetcache toneMint
class node_material,node_light,node_pipeline,node_opengl,node_stages,node_context toneRose
class node_editor,node_panels,node_ui toneIndigo
```

## Components

### Application

- [Application](https://github.com/mite085/miteengine/blob/main/src/application/application.cpp): `src/application/application.cpp`
- [Window](https://github.com/mite085/miteengine/blob/main/src/engine/window/glfw_window/glfw_window.cpp): `src/engine/window/glfw_window/glfw_window.cpp`
- [Event Bus](https://github.com/mite085/miteengine/blob/main/src/engine/event/event_bus.cpp): `src/engine/event/event_bus.cpp`

### Scene and Input

- [Input System](https://github.com/mite085/miteengine/blob/main/src/engine/input/input/input_manager.cpp): `src/engine/input/input/input_manager.cpp`
- [ECS Scene](https://github.com/mite085/miteengine/blob/main/src/engine/scene_core/scene_core/scene_core.cpp): `src/engine/scene_core/scene_core/scene_core.cpp`
- [Scene Graph](https://github.com/mite085/miteengine/blob/main/src/engine/scene_graph/scene_node_manager.cpp): `src/engine/scene_graph/scene_node_manager.cpp`
- [Spatial Queries](https://github.com/mite085/miteengine/blob/main/src/engine/scene_graph/simple_bvh.cpp): `src/engine/scene_graph/simple_bvh.cpp`
- [Scene View](https://github.com/mite085/miteengine/blob/main/src/engine/scene_view/scene_view.cpp): `src/engine/scene_view/scene_view.cpp`
- [Render Queue](https://github.com/mite085/miteengine/blob/main/src/engine/scene_view/render_queue.cpp): `src/engine/scene_view/render_queue.cpp`
- [Scene Serialization](https://github.com/mite085/miteengine/blob/main/src/engine/scene_serializer/scene_serializer.cpp): `src/engine/scene_serializer/scene_serializer.cpp`

### Asset Pipeline

- [Asset Manager](https://github.com/mite085/miteengine/blob/main/src/asset/asset_manager.cpp): `src/asset/asset_manager.cpp`
- [Model Loading](https://github.com/mite085/miteengine/blob/main/src/asset/model_loader.cpp): `src/asset/model_loader.cpp`
- [Texture Loading](https://github.com/mite085/miteengine/blob/main/src/asset/texture_loader.cpp): `src/asset/texture_loader.cpp`
- [Material Loading](https://github.com/mite085/miteengine/blob/main/src/asset/material_loader.cpp): `src/asset/material_loader.cpp`
- [Asset Cache](https://github.com/mite085/miteengine/blob/main/src/asset/asset_cache.h): `src/asset/asset_cache.h`

### Rendering and Lighting

- [Material System](https://github.com/mite085/miteengine/blob/main/src/engine/material/material_factory.cpp): `src/engine/material/material_factory.cpp`
- [Light Manager](https://github.com/mite085/miteengine/blob/main/src/engine/light/light_core/light_manager.cpp): `src/engine/light/light_core/light_manager.cpp`
- [Render Pipeline](https://github.com/mite085/miteengine/blob/main/src/engine/renderer/render_core/render_pipeline.h): `src/engine/renderer/render_core/render_pipeline.h`
- [OpenGL Pipeline](https://github.com/mite085/miteengine/blob/main/src/engine/renderer/render_opengl/opengl_pipeline.cpp): `src/engine/renderer/render_opengl/opengl_pipeline.cpp`
- [Render Stages](https://github.com/mite085/miteengine/tree/main/src/engine/renderer/render_stages): `src/engine/renderer/render_stages`
- [Render Context](https://github.com/mite085/miteengine/blob/main/src/engine/renderer/render_core/render_context.h): `src/engine/renderer/render_core/render_context.h`

### Editor UI

- [Editor UI](https://github.com/mite085/miteengine/blob/main/src/editor/editor.cpp): `src/editor/editor.cpp`
- [Editor Panels](https://github.com/mite085/miteengine/tree/main/src/engine/ui/ui_panel): `src/engine/ui/ui_panel`
- [UI System](https://github.com/mite085/miteengine/blob/main/src/engine/ui/ui_core/ui_system.cpp): `src/engine/ui/ui_core/ui_system.cpp`

### Other components

- **User**

## Connections

- User → Application: starts (evidence: `README.md`)
- Application → Window: initializes
- Application → Input System: initializes
- Application → ECS Scene: manages
- Application → Scene Graph: manages
- Application → Scene View: manages
- Application → Asset Manager: uses
- Application → Render Pipeline: initializes
- Application → UI System: initializes
- Application → Editor Panels: creates (evidence: `src/application/application.cpp`)
- Application → Light Manager: initializes (evidence: `src/application/application.cpp`)
- Application → Material System: initializes (evidence: `src/application/application.cpp`)
- Application → Event Bus: subscribes (evidence: `src/application/application.cpp`)
- ECS Scene → Scene Graph: provides entities
- Scene Graph → Spatial Queries: uses
- Scene View → Render Queue: builds
- Application → Scene Serialization: loads and saves
- Asset Manager → Model Loading: delegates (evidence: `src/asset/asset_manager.cpp`)
- Asset Manager → Texture Loading: delegates (evidence: `src/asset/asset_manager.cpp`)
- Asset Manager → Material Loading: delegates (evidence: `src/asset/asset_manager.cpp`)
- Asset Manager → Asset Cache: uses
- Render Pipeline → OpenGL Pipeline: implemented by
- OpenGL Pipeline → Render Stages: registers (evidence: `src/engine/renderer/render_opengl/opengl_pipeline.cpp`)
- OpenGL Pipeline → Render Context: creates (evidence: `src/engine/renderer/render_opengl/opengl_pipeline.cpp`)
- Render Context → Render Queue: reads (evidence: `src/engine/renderer/render_core/render_context.h`)
- Render Context → Light Manager: uses (evidence: `src/engine/renderer/render_core/render_context.h`)
- Light Manager → Application: publishes events (evidence: `src/engine/light/light_core/light_manager.cpp`)
- User → Editor UI: edits scene (evidence: `README.md`)
- Editor UI → Editor Panels: provides (evidence: `README.md`)
- Editor Panels → UI System: renders through
- Input System → Scene View: controls navigation (evidence: `README.md`)
- Render Stages → Render Stages: ShadowMap → G-Buffer → Deferred → Forward → Blend (evidence: `README.md`)
