# 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 (`.meta` files) 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 ```txt . ├── 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: ```bash git clone --recurse-submodules https://git.brammie15.dev/brammie15/Destrum.git cd Destrum ``` Configure the project: ```bash cmake -S . -B build ``` Build everything: ```bash cmake --build build --config Release ``` Run the first-party regression tests: ```bash ctest --test-dir build -C Release --output-on-failure ``` Run the demo executable: ```bash ./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: ```bash 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`): ```bash 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: ```bash 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: ```cmake destrum::destrum ``` Game/demo targets can link against it: ```cmake 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 :pray: