# carcodee/coderaytracer architecture

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

- Interactive diagram: https://gitdiagram.com/carcodee/coderaytracer
- Repository: https://github.com/carcodee/coderaytracer

## Overview

CodeRT Engine is a Vulkan ray-tracing path tracer with an editor for loading scenes, inspecting resources, and viewing rendered output. Its documented user workflow starts with dragging a GLTF or OBJ model into the app; the engine loads the asset, makes it available to the model/rendering systems, and displays the result. The graph preserves documented rendering, input, and editor capabilities. Some subsystems are represented by their enclosing source directories because their implementation files were not included in the supplied tree or excerpts.

Main entry points: [`Core/Source/VulkanAPI/Model/ModelHandler.cpp`](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/Model/ModelHandler.cpp) (Model management), [`Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp`](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp) (Resource inspector), [`Editor/Source/Editor.cpp`](https://github.com/carcodee/coderaytracer/blob/master/Editor/Source/Editor.cpp) (Editor app), [`Core/Source/VulkanAPI/RenderSystems`](https://github.com/carcodee/coderaytracer/tree/master/Core/Source/VulkanAPI/RenderSystems) (Ray tracing)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and input"]
  node_editor_app["Editor app<br/>[Editor.cpp]"]
  node_engine_app["Engine app<br/>[VulkanApp.cpp]"]
  node_input["Input handling<br/>[InputHandler.cpp]"]
end

subgraph group_assets["Scene assets"]
  node_filesystem["File handling<br/>[FileHandler.cpp]"]
  node_asset_loading["Async asset loading"]
  node_model_data["Model management<br/>[ModelHandler.cpp]"]
  node_asset_system["Asset handling"]
  node_material_system["Material system"]
end

subgraph group_render["Vulkan rendering"]
  node_vulkan_pipeline["Pipeline setup<br/>[PipelineReader.cpp]"]
  node_buffers["GPU buffers"]
  node_ray_tracing["Ray tracing"]
  node_postprocessing["Postprocessing"]
  node_renderer_ui["ImGui rendering"]
end

subgraph group_editor["Editor UI"]
  node_resource_ui["Resource inspector"]
  node_imgui_setup["ImGui setup<br/>[ImguiSetup.cpp]"]
end

node_user(("User"))

node_user -->|"uses"| node_editor_app
node_user -->|"drops model"| node_asset_loading
node_editor_app -.->|"starts"| node_engine_app
node_editor_app -.->|"configures"| node_imgui_setup
node_editor_app -.->|"receives input"| node_input
node_asset_loading -->|"loads models"| node_model_data
node_model_data -->|"uses paths"| node_filesystem
node_model_data -->|"uses assets"| node_asset_system
node_model_data -->|"uses"| node_renderer_ui
node_model_data -.->|"supports rendering"| node_ray_tracing
node_vulkan_pipeline -->|"uses buffers"| node_buffers
node_resource_ui -->|"inspects models"| node_model_data
node_resource_ui -->|"creates textures"| node_renderer_ui
node_resource_ui -->|"uses files"| node_filesystem
node_resource_ui -->|"uses assets"| node_asset_system
node_resource_ui -.->|"edits materials"| node_material_system
node_ray_tracing -.->|"renders with"| node_postprocessing
node_engine_app -.->|"runs"| node_ray_tracing

click node_editor_app "https://github.com/carcodee/coderaytracer/blob/master/Editor/Source/Editor.cpp"
click node_engine_app "https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanApp.cpp"
click node_input "https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/Utility/InputSystem/InputHandler.cpp"
click node_filesystem "https://github.com/carcodee/coderaytracer/blob/master/Core/Source/FileSystem/FileHandler.cpp"
click node_asset_loading "https://github.com/carcodee/coderaytracer/tree/master/Core/Source/VulkanAPI/ObjectLoader"
click node_model_data "https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/Model/ModelHandler.cpp"
click node_vulkan_pipeline "https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/VulkanPipeline/PipelineReader.cpp"
click node_buffers "https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/VulkanObjects/Buffers/VKBufferHandler.cpp"
click node_ray_tracing "https://github.com/carcodee/coderaytracer/tree/master/Core/Source/VulkanAPI/RenderSystems"
click node_postprocessing "https://github.com/carcodee/coderaytracer/tree/master/Core/Source/VulkanAPI/RenderSystems"
click node_renderer_ui "https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/RenderSystems/ImguiRenderSystem.h"
click node_resource_ui "https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp"
click node_imgui_setup "https://github.com/carcodee/coderaytracer/blob/master/Editor/Source/Imgui/ImguiSetup.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_editor_app,node_engine_app,node_input,node_user toneBlue
class node_filesystem,node_asset_loading,node_model_data,node_asset_system,node_material_system toneAmber
class node_vulkan_pipeline,node_buffers,node_ray_tracing,node_postprocessing,node_renderer_ui toneMint
class node_resource_ui,node_imgui_setup toneRose
```

## Components

### App and input

- [Editor app](https://github.com/carcodee/coderaytracer/blob/master/Editor/Source/Editor.cpp): `Editor/Source/Editor.cpp`
- [Engine app](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanApp.cpp): `Core/Source/VulkanApp.cpp`
- [Input handling](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/Utility/InputSystem/InputHandler.cpp): `Core/Source/VulkanAPI/Utility/InputSystem/InputHandler.cpp`

### Scene assets

- [File handling](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/FileSystem/FileHandler.cpp): `Core/Source/FileSystem/FileHandler.cpp`
- [Async asset loading](https://github.com/carcodee/coderaytracer/tree/master/Core/Source/VulkanAPI/ObjectLoader): `Core/Source/VulkanAPI/ObjectLoader`
- [Model management](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/Model/ModelHandler.cpp): `Core/Source/VulkanAPI/Model/ModelHandler.cpp`
- **Asset handling**
- **Material system**

### Vulkan rendering

- [Pipeline setup](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/VulkanPipeline/PipelineReader.cpp): `Core/Source/VulkanAPI/VulkanPipeline/PipelineReader.cpp`
- [GPU buffers](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/VulkanObjects/Buffers/VKBufferHandler.cpp): `Core/Source/VulkanAPI/VulkanObjects/Buffers/VKBufferHandler.cpp`
- [Ray tracing](https://github.com/carcodee/coderaytracer/tree/master/Core/Source/VulkanAPI/RenderSystems): `Core/Source/VulkanAPI/RenderSystems`
- [Postprocessing](https://github.com/carcodee/coderaytracer/tree/master/Core/Source/VulkanAPI/RenderSystems): `Core/Source/VulkanAPI/RenderSystems`
- [ImGui rendering](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/RenderSystems/ImguiRenderSystem.h): `Core/Source/VulkanAPI/RenderSystems/ImguiRenderSystem.h`

### Editor UI

- [Resource inspector](https://github.com/carcodee/coderaytracer/blob/master/Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp): `Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp`
- [ImGui setup](https://github.com/carcodee/coderaytracer/blob/master/Editor/Source/Imgui/ImguiSetup.cpp): `Editor/Source/Imgui/ImguiSetup.cpp`

### Other components

- **User**

## Connections

- User → Editor app: uses
- User → Async asset loading: drops model
- Editor app → Engine app: starts
- Editor app → ImGui setup: configures
- Editor app → Input handling: receives input
- Async asset loading → Model management: loads models (evidence: `Core/Source/VulkanAPI/ObjectLoader/ModelLoaderHandler.cpp`)
- Model management → File handling: uses paths (evidence: `Core/Source/VulkanAPI/Model/ModelHandler.cpp`)
- Model management → Asset handling: uses assets (evidence: `Core/Source/VulkanAPI/Model/ModelHandler.cpp`)
- Model management → ImGui rendering: uses (evidence: `Core/Source/VulkanAPI/Model/ModelHandler.cpp`)
- Model management → Ray tracing: supports rendering (evidence: `Core/Source/VulkanAPI/Model/ModelHandler.cpp`)
- Pipeline setup → GPU buffers: uses buffers (evidence: `Core/Source/VulkanAPI/VulkanPipeline/PipelineReader.cpp`)
- Resource inspector → Model management: inspects models (evidence: `Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp`)
- Resource inspector → ImGui rendering: creates textures (evidence: `Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp`)
- Resource inspector → File handling: uses files (evidence: `Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp`)
- Resource inspector → Asset handling: uses assets (evidence: `Core/Source/VulkanAPI/ResourcesManagers/UI/ResourcesUIHandler.cpp`)
- Resource inspector → Material system: edits materials
- Ray tracing → Postprocessing: renders with
- Engine app → Ray tracing: runs
