This template aims to remove most of the boilerplate project setup from developing a C++ game (engine) by ensuring a completely reproducible build environment.
This is done through use of CMake which is utilized to clone all dependencies a game (engine) requires in most scenarios and then some extras you might not think of until you need them.
The following libraries are cloned/downloaded by
thirdparty/CMakeLists.txt
and ready to use out
of the box:
- DirectX 12
- Debugging GUI: imgui (MIT)
- This library is vendored on first configuration as it's commonly modified by users.
- Device input:
OIS(Zlib)- TODO: Find a replacement that isn't SDL. CrossWindow?
- CPU information: cpu_features (Apache 2.0)
- String manipulation: bstrlib (BSD-3-Clause)
- Hot reloading: cr (MIT)
- FontStash (Zlib)
- MMGR by Paul Nettle (Custom license)
- Modified to use C++ style casts and
uintptr_t
instead ofunsigned int
(sufficient only for 32-bit pointers)
- Modified to use C++ style casts and
- Compression
- lz4
- zlib
- zstd?
- Utils
- murmurhash3
- Nothings (MIT/Public domain)
- frozen for static maps
- NVidia
- nvapi
- OpenGL
- GLEW or some other loader
- Vulkan
- SDK
- Memory Allocator
- SPRIV crosscompiler
- soloud or another audio engine
- Window abstraction
- GLFW for desktop
- GLFM for mobile
- CrossWindow
- Task Scheduler
- The Forge uses TaskScheduler (unmaintained)
- alternative is concurrencpp (popular, maintained)
- or FiberTaskingLib which is more similar to TaskScheduler
- Formats
- DDS image format: tiny_dds or dds_image
tiny_imageformat> Nothings image- KTX image format: tiny_ktx
- XML: TinyXML2
- tiny_obj_loader
- Nothings vorbis
- SIMD & linear algebra
- Logging & formatting
- spdlog
- fmt
- Debugging
- RenderDoc
- MTuner SDK memory profiler
- Microsoft Windows PixEvents? Something cross-platform?
- Preprocessing
- mcpp preprocessor?
This project is licensed under Apache 2.0
/MIT
/Zlib
terenary license.
Copies of the licenses can be found in the root directory.
It republishes MMGR which has a custom license (see
thirdparty/mmgr/README.md
).
All other used libraries are not redistributed and instead get downloaded at
project configuration time. See their respective websites or repositories linked
in this document for more details.
Most libraries use permissive licenses however and can be safely included in
commercial code, but check the licenses of the libraries you end up using. I
take no responsibility for any issues that may arise from depending on any of
them, be it with intent (e.g. by enabling them in configuration) or by accident
(e.g. configuration doesn't exclude their sources/binaries and you end up
including them in your build).