mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-24 05:44:56 +00:00
When Conan's build output layout changes (e.g. build/generators/ vs build/Release/generators/), CMakeUserPresets.json accumulates includes that define the same preset names, causing CMake to fail with "Duplicate preset". The fix detects preset name collisions across included files and keeps only the newest, in addition to pruning missing files. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GameEngine
SDL3 GPU 2D/3D game engine with a JSON-driven workflow system. Built with C++20, using Conan for dependency management and CMake + Ninja for builds.
Quick Start
Prerequisites
- C++20 compiler (MSVC, Clang, or GCC)
- CMake 3.24+
- Conan 2.x
- Ninja (recommended)
- Python 3.9+ (build helper)
Build & Run (Recommended)
The dev_commands.py build helper runs the full pipeline: Conan install, CMake generate, configure, and build.
# Build and run the seed demo (auto-detects platform bootstrap)
python python/dev_commands.py all --run
# Equivalent explicit form on Windows
python python/dev_commands.py all --run --bootstrap bootstrap_windows --game seed
# macOS
python python/dev_commands.py all --run --bootstrap bootstrap_mac --game seed
# Linux
python python/dev_commands.py all --run --bootstrap bootstrap_linux --game seed
Build Steps (Manual)
# 1. Install Conan dependencies
python python/dev_commands.py dependencies
# 2. Generate CMakeLists.txt from cmake_config.json
python python/dev_commands.py generate
# 3. Configure CMake
python python/dev_commands.py configure --preset conan-default
# 4. Build
python python/dev_commands.py build
# 5. Run
python python/dev_commands.py run -- --bootstrap bootstrap_windows --game seed
Makefile (Unix)
make build # Build sdl3_app
make build TARGET=sdl3_app # Build specific target
make test # Build and run all tests
make rebuild # Clean + build
make list-targets # Show available targets
CLI Arguments
The compiled sdl3_app binary accepts:
| Flag | Default | Description |
|---|---|---|
--bootstrap |
bootstrap_mac |
Platform bootstrap package |
--game |
standalone_cubes |
Game package to load |
--project-root |
Current directory | Path to gameengine root |
Packages
Game content and platform initialization are defined as JSON packages in packages/:
| Package | Type | Description |
|---|---|---|
bootstrap_windows |
bootloader | Windows init, SDL3 GPU with D3D12 |
bootstrap_mac |
bootloader | macOS init, SDL3 GPU with Metal |
bootstrap_linux |
bootloader | Linux init, SDL3 GPU with Vulkan |
seed |
game | FPS demo: room with spinning cube, WASD movement, mouse look, jump. Bullet3 physics |
standalone_cubes |
game | 11x11 grid of spinning colored cubes with per-cube animation offsets |
quake3 |
game | Quake 3 BSP map viewer with FPS controls |
soundboard |
game | Audio cues + GUI controls |
engine_tester |
game | Validation tour with teleport checkpoints, captures, and diagnostics |
asset_loader |
library | Universal asset loading with cross-engine unit conversion (JSON-driven) |
assets |
library | Shared runtime assets (audio, fonts, images) |
materialx |
library | MaterialX integration |
Architecture
src/
main.cpp # Entry point, CLI parsing, workflow bootstrap
services/
interfaces/ # Abstract service interfaces (16 services)
i_audio_service.hpp
i_graphics_service.hpp
i_input_service.hpp
i_physics_service.hpp
i_scene_service.hpp
i_window_service.hpp
i_workflow_executor.hpp
...
impl/ # Concrete implementations
workflow/ # Workflow step implementations
diagnostics/ # Logging
app/ # CLI, platform services
packages/ # JSON-driven game content
{package}/
package.json # Package metadata, config, shader list
workflows/*.json # Workflow definitions (v2.2.0 format)
shaders/spirv/ # SPIR-V shaders (Vulkan, D3D12)
shaders/msl/ # Metal shaders (macOS)
scene/*.json # Scene definitions
assets/ # Package-specific assets
python/
dev_commands.py # Build helper CLI
generate_cmake.py # CMakeLists.txt generator from cmake_config.json
export_room_gltf.py # Seed demo room glTF exporter
Dependencies (Conan)
| Library | Version | Purpose |
|---|---|---|
| SDL | 3.2.20 | Windowing, input, GPU API |
| Bullet3 | 3.25 | 3D physics |
| Box2D | 3.1.1 | 2D physics |
| EnTT | 3.16.0 | Entity Component System |
| Assimp | 6.0.2 | 3D model import |
| glm | 1.0.1 | Math library |
| nlohmann_json | 3.11.3 | JSON parsing |
| RapidJSON | cci.20230929 | JSON parsing (performance) |
| FFmpeg | 8.0.1 | Audio/video decoding |
| FreeType | 2.13.2 | Font rendering |
| Cairo | 1.18.0 | 2D vector graphics |
| stb | cci.20230920 | Image loading |
| LunaSVG | 3.0.1 | SVG rendering |
| libzip | 1.10.1 | ZIP archive support |
| cpptrace | 1.0.4 | Stack traces |
| CLI11 | 2.6.0 | Command-line parsing |
| GTest | 1.17.0 | Testing framework |
Testing
# Via Makefile
make test
# Via dev_commands.py
python python/dev_commands.py build --target test_exit_step