System Architecture

During the development process we wanted to avoid using third party libraries wherever possible, with the only possible exception being the editor UI. A full dependency graph is below, with external libraries highlighted in red.


For a more legible view of the engine, we’ve also provided a full list of internal and external libraries and executables.

Engine LibrariesUse
Dagmar::Log
Handles multiple logging levels to various output streams
Dagmar::FilesystemUtility library for tracking various important disk locations
Dagmar::PlatformDetectorUtility library for basic platform reflection
Dagmar::RendererContains wrapper classes for buffers, shaders, cameras, etc.
Dagmar::ExceptionsProvides custom exceptions for an easier debugging experience
Dagmar::AllocatorHandles some memory allocation and management
Dagmar::ModuleLifecycleEnsures the safe startup and shutdown of singletons
Dagmar::ResourcesHandles the serialisation, parsing and storage of resources
Dagmar::EngineConfigParses and stores engine configurations provided by the user
Dagmar::ECSEntity component system which manages entities in a DOD fashion
Dagmar::UIContains managers for the window, I/O, and fonts
Dagmar::GraphicsWrappers for meshes, textures, descriptors, etc.
Dagmar::ComponentsComponents used in our ECS for attachment to entities
Dagmar::SystemsSystems used in our ECS, e.g. Physics, Rendering, Lighting, etc.
Dagmar::Scene Handles the scene graph, and all operations on it
Dagmar::TimeTracks various time metrics, both relative and absolute
Dagmar::LayersHandles the dispatching of I/O events, as well as UI rendering order
Dagmar::ApplicationProvides an interface for applications to use the engine
Dagmar::VoxelManages voxel structures, mesh generations, etc.
Dagmar::ProfilerTracks memory and CPU usage of the system
Dagmar::EngineLinks all previous libraries into one interface
Common LibrariesUse
Dagmar::Common::Layers
Contains the game layer which is used in both our apps
Dagmar::Compiler
Used to compile the game from the editor
Editor LibrariesUse
Dagmar::Editor::Layers
Layers used solely by the editor
Dagmar::Editor::ResourceLoader
Loads resources solely required by the editor at startup
Dagmar::Editor::ApplicationWraps the whole editor application
Dagmar::EditorMain function entry point
Game LibrariesUse
Dagmar::Game::Layers
Layers used solely by the game
Dagmar::Game::ResourceLoader
Loads resources required by the game
Dagmar::Game::ApplicationWraps the whole game application
Dagmar::GameMain function entry point