How thenecromance/monkeyrenderer works
MonkeyRender is a C++ OpenGL/ECS rendering engine, demonstrated by a sandbox that initializes the core, registers runtime modules, creates camera/mesh/light/shader entities, and runs the update loop. Its capabilities include input-driven camera control, asset and shader loading with hot reload, forward and deferred rendering, shadows, post-processing, grid display, anti-aliasing, and ImGui controls. The graph preserves these branches; some module implementations were not excerpted, so only documented registration or visible source relationships are linked. The empty README provides no additional evidence.
Main entry points: main.cpp Sandbox app · CameraModule.cpp Camera & frame data · OpenGLApp.cpp OpenGL window · ShadowMapModule.cpp Shadow mapping
Components 22
Runtime & Window
- Sandbox app
SandBox/src/main.cpp - Engine core
Core/src/Core.cpp - OpenGL window
Core/src/Graphics/OpenGLApp.cpp
Scene & Input
- Input handler
Core/src/Modules/Input/InputHandler.cpp - Input module
Core/src/Modules/Input/InputModule.cpp - Camera & frame data
Core/src/Modules/CameraModule.cpp - Transform updates
Core/src/Modules/TransformModule.cpp
Assets & Shaders
- Mesh importer
Core/src/Modules/Importer/MeshModule.cpp - Texture importer
Core/src/Modules/Importer/TextureImporter.cpp - Program importer
Core/src/Modules/Importer/ProgramImporter.cpp - Shader file watcher
Core/src/Modules/FileWatcherModule.cpp - Shader operations
Core/src/Components/ShaderOperator.cpp
Rendering
- Light module
Core/src/Modules/Renderer/LightModule.cpp - Shadow mapping
Core/src/Modules/Renderer/ShadowMapModule.cpp - Base renderer
Core/src/Modules/Renderer/BaseRenderModule.cpp - Forward renderer
Core/src/Modules/Renderer/ForwardRenderModule.cpp - Deferred renderer
Core/src/Modules/Renderer/DefferedRender.cpp - Post-processing
Core/src/Modules/Renderer/PostProcessModule.cpp - Grid display
Core/src/Modules/GridModule.cpp - ImGui renderer
Core/src/Modules/ImGuiModule/ImGuiRenderModule.cpp - Anti-aliasing
Core/src/Modules/Renderer/AntiAliasingConfigModule.cpp
Other components
- Application user
Connections 32
- Application user → Sandbox app: runs
SandBox/src/main.cpp - Sandbox app → Engine core: initializes
SandBox/src/main.cpp - Sandbox app → Input module: registers
SandBox/src/main.cpp - Sandbox app → Camera & frame data: registers
SandBox/src/main.cpp - Sandbox app → Transform updates: registers
SandBox/src/main.cpp - Sandbox app → Mesh importer: registers
SandBox/src/main.cpp - Sandbox app → Texture importer: registers
SandBox/src/main.cpp - Sandbox app → Program importer: registers
SandBox/src/main.cpp - Sandbox app → Light module: registers
SandBox/src/main.cpp - Sandbox app → Shadow mapping: registers
SandBox/src/main.cpp - Sandbox app → Base renderer: registers
SandBox/src/main.cpp - Sandbox app → Forward renderer: registers
SandBox/src/main.cpp - Sandbox app → Deferred renderer: registers
SandBox/src/main.cpp - Sandbox app → Post-processing: registers
SandBox/src/main.cpp - Sandbox app → Grid display: registers
SandBox/src/main.cpp - Sandbox app → ImGui renderer: registers
SandBox/src/main.cpp - Sandbox app → Anti-aliasing: registers
SandBox/src/main.cpp - Sandbox app → OpenGL window: runs loop
- Engine core → OpenGL window: uses
Core/src/Core.cpp - Engine core → Input handler: updates input
Core/src/Core.cpp - Input handler → OpenGL window: reads events
Core/src/Modules/Input/InputHandler.cpp - Camera & frame data → OpenGL window: reads dimensions
Core/src/Modules/CameraModule.cpp - Camera & frame data → Input module: reads controls
- Camera & frame data → Shader operations: updates frame data
- Program importer → Shader file watcher: uses watcher
Core/src/Modules/Importer/ProgramImporter.cpp - Program importer → Shader operations: uses shader components
Core/src/Modules/Importer/ProgramImporter.cpp - Shader operations → Shader file watcher: reads files
Core/src/Components/ShaderOperator.cpp - Shadow mapping → OpenGL window: uses OpenGL
Core/src/Modules/Renderer/ShadowMapModule.cpp - Shadow mapping → Camera & frame data: reads camera data
- Shadow mapping → Light module: reads lights
- Base renderer → Forward renderer: coordinates passes
- Base renderer → Deferred renderer: coordinates passes