From 1479ad468d81177e6ad89f19167a80c8e02a6d5b Mon Sep 17 00:00:00 2001 From: Bram Verhulst Date: Fri, 19 Jun 2026 13:25:24 +0200 Subject: [PATCH] Add linux support --- .gitignore | 4 +- Readme.md | 124 ++++++++++++++++++ destrum/CMakeLists.txt | 16 +-- destrum/include/destrum/Graphics/Util.h | 2 + .../include/destrum/ObjectModel/Component.h | 1 - .../include/destrum/ObjectModel/GameObject.h | 2 + destrum/src/Graphics/Frustum.cpp | 2 +- destrum/third_party/CMakeLists.txt | 1 + 8 files changed, 140 insertions(+), 12 deletions(-) create mode 100644 Readme.md diff --git a/.gitignore b/.gitignore index 558db6a..cd2a7cc 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ destrum/assets_runtime lightkeeper/assets_runtime .vs/** -.idea/** \ No newline at end of file +.idea/** + +build/** diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..3e7ae92 --- /dev/null +++ b/Readme.md @@ -0,0 +1,124 @@ +# 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 +* 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 +├── 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 +* 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 +``` + +Run the demo executable: + +```bash +./build/lightkeeper/lightkeeper +``` + +## 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 +``` + +`CookAssets` processes both engine and game assets. `CleanupAssets` removes generated runtime asset output. + +## Demo app + +`lightkeeper` is the current demo application. It creates an SDL window, initializes the Destrum app, loads assets, sets up a scene, renders meshes, skyboxes, and a skinned animated character. + +## 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) +``` + +## License + +Do what you want dawgs :pray: diff --git a/destrum/CMakeLists.txt b/destrum/CMakeLists.txt index 81bab6e..954e0ad 100644 --- a/destrum/CMakeLists.txt +++ b/destrum/CMakeLists.txt @@ -90,15 +90,13 @@ target_compile_definitions(destrum ) if (WIN32) - if (BUILD_SHARED_LIBS) - target_link_libraries(destrum - PUBLIC SDL2::SDL2main SDL2::SDL2 - ) - else () - target_link_libraries(destrum - PUBLIC SDL2::SDL2main SDL2::SDL2-static - ) - endif () + target_link_libraries(destrum PUBLIC SDL2::SDL2main) +endif () + +if (BUILD_SHARED_LIBS) + target_link_libraries(destrum PUBLIC SDL2::SDL2) +else () + target_link_libraries(destrum PUBLIC SDL2::SDL2-static) endif () target_compile_definitions(destrum diff --git a/destrum/include/destrum/Graphics/Util.h b/destrum/include/destrum/Graphics/Util.h index 98baa5e..326a431 100644 --- a/destrum/include/destrum/Graphics/Util.h +++ b/destrum/include/destrum/Graphics/Util.h @@ -2,6 +2,8 @@ #define UTIL_H #include +#include + #include #include "glm/vec4.hpp" diff --git a/destrum/include/destrum/ObjectModel/Component.h b/destrum/include/destrum/ObjectModel/Component.h index 0247e2a..a5928b2 100644 --- a/destrum/include/destrum/ObjectModel/Component.h +++ b/destrum/include/destrum/ObjectModel/Component.h @@ -7,7 +7,6 @@ class GameObject; class Transform; - class Component: public Object { public: diff --git a/destrum/include/destrum/ObjectModel/GameObject.h b/destrum/include/destrum/ObjectModel/GameObject.h index 495fc16..7783242 100644 --- a/destrum/include/destrum/ObjectModel/GameObject.h +++ b/destrum/include/destrum/ObjectModel/GameObject.h @@ -6,6 +6,8 @@ #include #include +class Scene; + class GameObject final: public Object { public: friend class Scene; diff --git a/destrum/src/Graphics/Frustum.cpp b/destrum/src/Graphics/Frustum.cpp index 209a41c..e8c15ef 100644 --- a/destrum/src/Graphics/Frustum.cpp +++ b/destrum/src/Graphics/Frustum.cpp @@ -1,5 +1,5 @@ #include - +#include Frustum edge::createFrustumFromCamera(const Camera& camera) { // TODO: write a non-horrible version of this, lol Frustum frustum; diff --git a/destrum/third_party/CMakeLists.txt b/destrum/third_party/CMakeLists.txt index 0c6bed2..57b9fbb 100644 --- a/destrum/third_party/CMakeLists.txt +++ b/destrum/third_party/CMakeLists.txt @@ -63,4 +63,5 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) set(ASSIMP_BUILD_TESTS OFF CACHE BOOL "" FORCE) set(ASSIMP_INJECT_DEBUG_POSTFIX OFF CACHE BOOL "" FORCE) set(ASSIMP_INSTALL OFF CACHE BOOL "" FORCE) +set(ASSIMP_WARNINGS_AS_ERRORS OFF CACHE BOOL "" FORCE) add_subdirectory(assimp)