# the1lama/lumiengine architecture

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

- Interactive diagram: https://gitdiagram.com/the1lama/lumiengine
- Repository: https://github.com/the1lama/lumiengine

## Overview

Lumi Engine is a small OpenGL rendering demo. The user-facing workflow is to launch the program, interact with its window controls, and see a 2D house or animated 3D primitives rendered with selectable perspective or orthographic projection. The implementation separates primitive geometry from shared mesh-buffer handling, shader-program management, and logging. The README documents the demo capabilities; source excerpts show the render loop and core rendering calls, but omit some input and initialization details.

Main entry points: [`src/main.cpp`](https://github.com/the1lama/lumiengine/blob/main/src/main.cpp) (Render loop), [`src/LumiCore/Mesh.cpp`](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/Mesh.cpp) (Mesh buffers), [`src/LumiCore/Shader.cpp`](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/Shader.cpp) (Shader program), [`src/LumiCore/logger/Logger.cpp`](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/logger/Logger.cpp) (Logger)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_demo["Demo and controls"]
  node_app["Render loop<br/>[main.cpp]"]
  node_projection["Projection controls<br/>[main.cpp]"]
end

subgraph group_geometry["Primitive geometry"]
  node_shapes2d["2D primitives"]
  node_triangle["Triangle mesh<br/>[Triangle.h]"]
  node_quad["Quad mesh<br/>[Quad.h]"]
  node_cube["Cube mesh<br/>[Cube.h]"]
  node_pyramid["Pyramid mesh<br/>[Pyramid.h]"]
  node_sphere["Sphere mesh<br/>[Sphere.h]"]
end

subgraph group_rendering["Rendering core"]
  node_mesh["Mesh buffers<br/>[Mesh.cpp]"]
  node_shader["Shader program<br/>[Shader.cpp]"]
end

subgraph group_diagnostics["Diagnostics"]
  node_logger["Logger<br/>[Logger.cpp]"]
end

node_user(("User"))

node_user -->|"starts and interacts"| node_app
node_app -->|"switches projection"| node_projection
node_app -->|"renders"| node_cube
node_app -->|"renders"| node_pyramid
node_app -->|"renders"| node_sphere
node_app -.->|"uses for 2D scene"| node_triangle
node_app -.->|"renders"| node_quad
node_app -->|"sets projection uniform"| node_shader
node_app -->|"draws mesh objects"| node_mesh
node_triangle -->|"inherits from"| node_mesh
node_quad -->|"inherits from"| node_mesh
node_cube -->|"inherits from"| node_mesh
node_pyramid -->|"inherits from"| node_mesh
node_sphere -->|"inherits from"| node_mesh
node_mesh -->|"accepts for rendering"| node_shader
node_mesh -->|"logs mesh errors"| node_logger
node_shader -->|"logs shader errors"| node_logger
node_app -->|"logs runtime events"| node_logger

click node_app "https://github.com/the1lama/lumiengine/blob/main/src/main.cpp"
click node_projection "https://github.com/the1lama/lumiengine/blob/main/src/main.cpp"
click node_shapes2d "https://github.com/the1lama/lumiengine/tree/main/src/LumiCore/2D"
click node_triangle "https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/2D/Triangle.h"
click node_quad "https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/2D/Quad.h"
click node_cube "https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/3D/Cube.h"
click node_pyramid "https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/3D/Pyramid.h"
click node_sphere "https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/3D/Sphere.h"
click node_mesh "https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/Mesh.cpp"
click node_shader "https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/Shader.cpp"
click node_logger "https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/logger/Logger.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_app,node_projection,node_user toneBlue
class node_shapes2d,node_triangle,node_quad,node_cube,node_pyramid,node_sphere toneAmber
class node_mesh,node_shader toneMint
class node_logger toneRose
```

## Components

### Demo and controls

- [Render loop](https://github.com/the1lama/lumiengine/blob/main/src/main.cpp): `src/main.cpp`
- [Projection controls](https://github.com/the1lama/lumiengine/blob/main/src/main.cpp): `src/main.cpp`

### Primitive geometry

- [2D primitives](https://github.com/the1lama/lumiengine/tree/main/src/LumiCore/2D): `src/LumiCore/2D`
- [Triangle mesh](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/2D/Triangle.h): `src/LumiCore/2D/Triangle.h`
- [Quad mesh](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/2D/Quad.h): `src/LumiCore/2D/Quad.h`
- [Cube mesh](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/3D/Cube.h): `src/LumiCore/3D/Cube.h`
- [Pyramid mesh](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/3D/Pyramid.h): `src/LumiCore/3D/Pyramid.h`
- [Sphere mesh](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/3D/Sphere.h): `src/LumiCore/3D/Sphere.h`

### Rendering core

- [Mesh buffers](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/Mesh.cpp): `src/LumiCore/Mesh.cpp`
- [Shader program](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/Shader.cpp): `src/LumiCore/Shader.cpp`

### Diagnostics

- [Logger](https://github.com/the1lama/lumiengine/blob/main/src/LumiCore/logger/Logger.cpp): `src/LumiCore/logger/Logger.cpp`

### Other components

- **User**

## Connections

- User → Render loop: starts and interacts (evidence: `README.md`)
- Render loop → Projection controls: switches projection (evidence: `src/main.cpp`)
- Render loop → Cube mesh: renders (evidence: `src/main.cpp`)
- Render loop → Pyramid mesh: renders (evidence: `src/main.cpp`)
- Render loop → Sphere mesh: renders (evidence: `src/main.cpp`)
- Render loop → Triangle mesh: uses for 2D scene (evidence: `README.md`)
- Render loop → Quad mesh: renders (evidence: `README.md`)
- Render loop → Shader program: sets projection uniform (evidence: `src/main.cpp`)
- Render loop → Mesh buffers: draws mesh objects (evidence: `src/main.cpp`)
- Triangle mesh → Mesh buffers: inherits from (evidence: `src/LumiCore/2D/Triangle.h`)
- Quad mesh → Mesh buffers: inherits from (evidence: `src/LumiCore/2D/Quad.h`)
- Cube mesh → Mesh buffers: inherits from (evidence: `src/LumiCore/3D/Cube.h`)
- Pyramid mesh → Mesh buffers: inherits from (evidence: `src/LumiCore/3D/Pyramid.h`)
- Sphere mesh → Mesh buffers: inherits from (evidence: `src/LumiCore/3D/Sphere.h`)
- Mesh buffers → Shader program: accepts for rendering (evidence: `src/LumiCore/Mesh.cpp`)
- Mesh buffers → Logger: logs mesh errors (evidence: `src/LumiCore/Mesh.cpp`)
- Shader program → Logger: logs shader errors (evidence: `src/LumiCore/Shader.cpp`)
- Render loop → Logger: logs runtime events (evidence: `src/main.cpp`)
