# aval0on/loke architecture

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

- Interactive diagram: https://gitdiagram.com/aval0on/loke
- Repository: https://github.com/aval0on/loke

## Overview

Loke is a modular C++ scene and rendering engine. Its user-to-result workflow loads engine settings, selects dynamically loaded window and render systems, builds and processes a scene, and repeatedly polls input, renders, and presents frames. The tree and excerpts support the runtime, scene, UI, and LKGL shader/storage branches; ray-tracing algorithms and several README-listed rendering features are documented but their implementation and wiring are not sampled, so they are represented only as renderer capability scope.

Main entry points: [`src/Engine/Engine.cpp`](https://github.com/aval0on/loke/blob/main/src/Engine/Engine.cpp) (Engine loop), [`Modules/RenderSystems/LKGL/src/LKGL3D.cpp`](https://github.com/aval0on/loke/blob/main/Modules/RenderSystems/LKGL/src/LKGL3D.cpp) (LKGL renderer), [`src/main.cpp`](https://github.com/aval0on/loke/blob/main/src/main.cpp) (Application entry), [`src/Utils/Modules/ModuleManager.cpp`](https://github.com/aval0on/loke/blob/main/src/Utils/Modules/ModuleManager.cpp) (Module manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_configuration["Configuration"]
  node_config["Config loader<br/>[Config.cpp]"]
  node_configparser["Config parsers"]
end

subgraph group_runtime["Engine runtime"]
  node_entry["Application entry<br/>[main.cpp]"]
  node_modulemanager["Module manager<br/>[ModuleManager.cpp]"]
  node_engine["Engine loop<br/>[Engine.cpp]"]
end

subgraph group_scene["Scene authoring"]
  node_scene["Scene tree<br/>[SceneTree.cpp]"]
  node_nodes["Scene nodes"]
  node_resources["Scene resources"]
end

subgraph group_rendering["Rendering"]
  node_rendererver["Rendering server"]
  node_renderinterface["3D render interface"]
  node_lkgl["LKGL renderer<br/>[LKGL3D.cpp]"]
  node_storage[("Scene render storage<br/>[Storage.hpp]")]
  node_shaders["Shader pipeline<br/>[ShaderManager.hpp]"]
  node_renderfeatures["Renderer capabilities"]
end

subgraph group_platform["Platform and UI"]
  node_input["Input server<br/>[InputServer.hpp]"]
  node_windowserver["Window server<br/>[WindowServer.cpp]"]
  node_x11["X11 backend<br/>[X11Display.cpp]"]
  node_uiserver["UI server<br/>[UIServer.cpp]"]
end

node_user(("User"))
node_filesystem["Slide image files"]
node_opengl{{"OpenGL"}}

node_user -->|"starts"| node_entry
node_entry -->|"loads settings"| node_config
node_config -->|"parses lines"| node_configparser
node_entry -->|"starts runtime"| node_engine
node_engine -->|"loads plugins"| node_modulemanager
node_modulemanager -->|"selects renderer"| node_renderinterface
node_engine -->|"opens and polls"| node_windowserver
node_engine -->|"initializes and renders"| node_rendererver
node_engine -->|"processes scene"| node_scene
node_engine -->|"checks input"| node_input
node_engine -->|"updates and draws UI"| node_uiserver
node_engine -->|"presents frame"| node_windowserver
node_scene -->|"manages nodes"| node_nodes
node_nodes -->|"uses resources"| node_resources
node_rendererver -->|"dispatches rendering"| node_renderinterface
node_modulemanager -->|"loads selected plugin"| node_lkgl
node_lkgl -->|"updates render data"| node_storage
node_lkgl -->|"manages shaders"| node_shaders
node_storage -->|"loads slide images"| node_filesystem
node_lkgl -->|"renders with"| node_opengl
node_renderfeatures -.->|"documents capabilities"| node_lkgl

click node_entry "https://github.com/aval0on/loke/blob/main/src/main.cpp"
click node_config "https://github.com/aval0on/loke/blob/main/src/Config/Config.cpp"
click node_configparser "https://github.com/aval0on/loke/blob/main/src/Config/EngineConfigParser.cpp"
click node_modulemanager "https://github.com/aval0on/loke/blob/main/src/Utils/Modules/ModuleManager.cpp"
click node_engine "https://github.com/aval0on/loke/blob/main/src/Engine/Engine.cpp"
click node_scene "https://github.com/aval0on/loke/blob/main/src/Scene/SceneTree/SceneTree.cpp"
click node_nodes "https://github.com/aval0on/loke/tree/main/include/Scene/SceneTree/Nodes/3D"
click node_resources "https://github.com/aval0on/loke/tree/main/include/Scene/Resources/3D"
click node_input "https://github.com/aval0on/loke/blob/main/include/Drivers/Input/InputServer.hpp"
click node_windowserver "https://github.com/aval0on/loke/blob/main/src/Drivers/Window/WindowServer.cpp"
click node_x11 "https://github.com/aval0on/loke/blob/main/Modules/WindowSystems/LKX11/src/X11Display.cpp"
click node_uiserver "https://github.com/aval0on/loke/blob/main/src/Server/UIServer.cpp"
click node_rendererver "https://github.com/aval0on/loke/blob/main/include/Server/RenderingServer.hpp"
click node_renderinterface "https://github.com/aval0on/loke/blob/main/include/Server/Rendering/3D/IRenderSystem3D.hpp"
click node_lkgl "https://github.com/aval0on/loke/blob/main/Modules/RenderSystems/LKGL/src/LKGL3D.cpp"
click node_storage "https://github.com/aval0on/loke/blob/main/Modules/RenderSystems/LKGL/src/Storage/Storage.hpp"
click node_shaders "https://github.com/aval0on/loke/blob/main/Modules/RenderSystems/LKGL/src/Shaders/ShaderManager.hpp"
click node_renderfeatures "https://github.com/aval0on/loke/tree/main/Modules/RenderSystems/LKGL/src"

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_config,node_configparser,node_user toneBlue
class node_entry,node_modulemanager,node_engine toneAmber
class node_scene,node_nodes,node_resources toneMint
class node_rendererver,node_renderinterface,node_lkgl,node_storage,node_shaders,node_renderfeatures toneRose
class node_input,node_windowserver,node_x11,node_uiserver,node_filesystem,node_opengl toneIndigo
```

## Components

### Configuration

- [Config loader](https://github.com/aval0on/loke/blob/main/src/Config/Config.cpp): `src/Config/Config.cpp`
- [Config parsers](https://github.com/aval0on/loke/blob/main/src/Config/EngineConfigParser.cpp): `src/Config/EngineConfigParser.cpp`

### Engine runtime

- [Application entry](https://github.com/aval0on/loke/blob/main/src/main.cpp): `src/main.cpp`
- [Module manager](https://github.com/aval0on/loke/blob/main/src/Utils/Modules/ModuleManager.cpp): `src/Utils/Modules/ModuleManager.cpp`
- [Engine loop](https://github.com/aval0on/loke/blob/main/src/Engine/Engine.cpp): `src/Engine/Engine.cpp`

### Scene authoring

- [Scene tree](https://github.com/aval0on/loke/blob/main/src/Scene/SceneTree/SceneTree.cpp): `src/Scene/SceneTree/SceneTree.cpp`
- [Scene nodes](https://github.com/aval0on/loke/tree/main/include/Scene/SceneTree/Nodes/3D): `include/Scene/SceneTree/Nodes/3D`
- [Scene resources](https://github.com/aval0on/loke/tree/main/include/Scene/Resources/3D): `include/Scene/Resources/3D`

### Rendering

- [Rendering server](https://github.com/aval0on/loke/blob/main/include/Server/RenderingServer.hpp): `include/Server/RenderingServer.hpp`
- [3D render interface](https://github.com/aval0on/loke/blob/main/include/Server/Rendering/3D/IRenderSystem3D.hpp): `include/Server/Rendering/3D/IRenderSystem3D.hpp`
- [LKGL renderer](https://github.com/aval0on/loke/blob/main/Modules/RenderSystems/LKGL/src/LKGL3D.cpp): `Modules/RenderSystems/LKGL/src/LKGL3D.cpp`
- [Scene render storage](https://github.com/aval0on/loke/blob/main/Modules/RenderSystems/LKGL/src/Storage/Storage.hpp): `Modules/RenderSystems/LKGL/src/Storage/Storage.hpp`
- [Shader pipeline](https://github.com/aval0on/loke/blob/main/Modules/RenderSystems/LKGL/src/Shaders/ShaderManager.hpp): `Modules/RenderSystems/LKGL/src/Shaders/ShaderManager.hpp`
- [Renderer capabilities](https://github.com/aval0on/loke/tree/main/Modules/RenderSystems/LKGL/src): `Modules/RenderSystems/LKGL/src`

### Platform and UI

- [Input server](https://github.com/aval0on/loke/blob/main/include/Drivers/Input/InputServer.hpp): `include/Drivers/Input/InputServer.hpp`
- [Window server](https://github.com/aval0on/loke/blob/main/src/Drivers/Window/WindowServer.cpp): `src/Drivers/Window/WindowServer.cpp`
- [X11 backend](https://github.com/aval0on/loke/blob/main/Modules/WindowSystems/LKX11/src/X11Display.cpp): `Modules/WindowSystems/LKX11/src/X11Display.cpp`
- [UI server](https://github.com/aval0on/loke/blob/main/src/Server/UIServer.cpp): `src/Server/UIServer.cpp`

### Other components

- **User**
- **Slide image files**
- **OpenGL**

## Connections

- User → Application entry: starts
- Application entry → Config loader: loads settings
- Config loader → Config parsers: parses lines
- Application entry → Engine loop: starts runtime
- Engine loop → Module manager: loads plugins
- Module manager → 3D render interface: selects renderer
- Engine loop → Window server: opens and polls
- Engine loop → Rendering server: initializes and renders
- Engine loop → Scene tree: processes scene
- Engine loop → Input server: checks input
- Engine loop → UI server: updates and draws UI
- Engine loop → Window server: presents frame
- Scene tree → Scene nodes: manages nodes
- Scene nodes → Scene resources: uses resources
- Rendering server → 3D render interface: dispatches rendering
- Module manager → LKGL renderer: loads selected plugin
- LKGL renderer → Scene render storage: updates render data
- LKGL renderer → Shader pipeline: manages shaders
- Scene render storage → Slide image files: loads slide images
- LKGL renderer → OpenGL: renders with
- Renderer capabilities → LKGL renderer: documents capabilities
