Destrum
Destrum is a C++20 Vulkan rendering/game-engine playground. It contains the core destrum engine library, a demo application called lightkeeper, and an asset-cooking toolchain powered by TheChef.
Features
- Vulkan rendering backend
- SDL2 window/input setup
- Scene, GameObject, Component, and Transform systems
- Mesh and material caching
- GLTF/FBX model loading
- Skeletal animation support
- Skybox/cubemap rendering
- Asset cooking pipeline for engine and game assets
- Editor library: docked viewport, play/pause/stop, undo/redo, click to select, gizmos, asset browser
- Stable asset ids (
.metafiles) and material files (.dmat) - HDR rendering with exposure and tonemapping (ACES, Khronos PBR Neutral)
- 3D audio through OpenAL Soft (
AudioSource/AudioListener, WAV and OGG) - CMake-based build setup with third-party dependencies as submodules
Repository layout
.
├── cmake/ # Shader compilation CMake helpers
├── destrum/ # Core engine library
│ ├── include/ # Public engine headers
│ ├── src/ # Engine implementation
│ ├── assets_src/ # Source engine assets
│ └── third_party/# Vendored/submodule dependencies
├── editor/ # Editor library (destrum::editor), attached to a game at startup
├── docs/ # How the engine pieces work
├── lightkeeper/ # Demo/game executable using Destrum
│ ├── include/
│ ├── src/
│ └── assets_src/
├── TheChef/ # Asset cooking tool
└── CMakeLists.txt
Requirements
- CMake 3.31 or newer
- C++20 compiler
- Vulkan SDK
- Git with submodule support
On Windows, MSVC is supported.
Dependencies
Most dependencies are included as Git submodules:
- SDL2
- volk
- vk-bootstrap
- Vulkan Memory Allocator
- GLM
- nlohmann/json
- spdlog
- stb (image, vorbis)
- OpenAL Soft
- tinygltf
- tinyexr
- Assimp
- FreeType
- fmt
Getting started
Clone the repository with submodules:
git clone --recurse-submodules https://git.brammie15.dev/brammie15/Destrum.git
cd Destrum
Configure the project:
cmake -S . -B build
Build everything:
cmake --build build --config Release
Run the first-party regression tests:
ctest --test-dir build -C Release --output-on-failure
Run the demo executable:
./build/lightkeeper/Release/lightkeeper.exe
For single-configuration generators, use the executable path produced by that generator instead. Runtime assets are placed beside the executable in both layouts.
Asset cooking
Assets are cooked automatically as part of the build through the TheChef tool.
You can also run the top-level custom targets manually:
cmake --build build --target CookAssets
cmake --build build --target CleanupAssets
cmake --build build --target ValidateShaders
CookAssets processes both engine and game assets. CleanupAssets removes generated runtime asset output.
ValidateShaders runs spirv-val over the cooked engine shaders when the Vulkan SDK provides it.
Export a folder other people can run (the game, its DLLs and every cooked asset packed into one assets.dpak):
cmake --build build --config Release --target Export
It ends up in build/export/Release/lightkeeper/, plus a lightkeeper.zip next to it. On Windows, export.bat does
the same and opens the folder. TheChef --list build/export/Release/lightkeeper/assets.dpak shows what takes up the
space. See docs/CookedAssets.md.
Install the application, engine library, public headers, and runtime assets:
cmake --install build --config Release
Demo app
lightkeeper is the current demo application. It loads its level from lightkeeper/assets_src/scenes/main.scene and starts in the editor. Press F5 to play, or run lightkeeper --game to skip the editor. See docs/Editor.md.
Development notes
The engine code lives in destrum/. Public headers are under destrum/include/destrum, and implementation files are under destrum/src.
The main engine target is exposed as:
destrum::destrum
Game/demo targets can link against it:
target_link_libraries(my_game PRIVATE destrum::destrum destrum::editor)
The editor is optional, a game without it links only destrum::destrum.
License
Do what you want dawgs 🙏