- A simple OpenGL based graphics engine, built to learn C++ and graphics programming
- This isn't a serious, production-quality engine, please don't treat it as one
- Despite the project being for learning, any contributions are still welcome
- See
docs/CONTRIBUTING.mdto get started - If you found this project interesting, any donations are greatly appreciated :)
- See
- Multi-threaded model loading, using
libassimpand a thread pool - Shader program caching with a custom hash
- Key binding and mouse input support
- Camera path support
- Command prompt for engine control
- Miscellaneous utilities (thread pool, thread-safe logging, timers, random number generation)
- A
c++23compatible compiler (g++ (14+)/clang++ (18+))- Toolchain support for thread-local variables
- All build and runtime dependencies installed
- A 64-bit Linux system
- Some functions may have AVX-512 / VAES accelerated versions
- An OpenGL 4.5+ compatible driver
- Alternatively, an OpenGL 3.2+ driver supporting the following extensions can be used
ARB_direct_state_accessARB_shader_storage_buffer_objectARB_texture_storageARB_texture_cube_map_array
- OpenGL debugging is supported with
KHR_debug - Program caching is supported with
ARB_get_program_binary - No error contexts are supported with
KHR_no_error
make librarysudo make install
make buildwill compile the library and all demos on the current branch- Demos can be listed with
./launch.sh --demo - Run a specific demo with
./launch.sh --demo [DEMO]- For example:
./launch.sh --demo object-field - Running the binary directly will only work if
libammoniteis installed to the system
- For example:
make cleanwill clean the build area, to start from fresh- Screenshots of some demos can be found at the end of the README
- The
sponzademo requires some Intel assets- Download the Sponza base scene, then extract it to
assets-experimental/intel-assets/main_sponza/ - The Curtains and Ivy packages are also supported
- Extract these to
assets-experimental/intel-assets/pkg_a_curtains/andassets-experimental/intel-assets/pkg_b_ivy/
- Extract these to
- Download the Sponza base scene, then extract it to
- All demos support the following keybinds:
W,A,SandDfor movement- Left control to 'sprint'
- Scroll to adjust zoom
- Middle-click to reset zoom
Bto switch cameraGto record a camera pathCto release inputESCto close the demoVto open the command promptF11to toggle fullscreen- Up or down arrow to adjust the framerate limit
Zto toggle focal depth[or]to adjust focal depth
- The
object-fielddemo additionally supports the following keybinds:Fto place a new cube at the camera's positionPto toggle model placement mode- Left-click to confirm placement
- Scroll to adjust distance
- Middle-click to reset distance
Rto shuffle placed objects
- Compiled demos have a few arguments supported:
--help: Displays a help menu--benchmark: Start a benchmark--demo: List available demos--demo [DEMO]: Launch a specific demo--vsync: Enable / disable VSync (true/false)
-
buildandlibrarysupport-j[CORE COUNT]make build- Builds the demomake library- Buildsbuild/libammonite.somake install- Installslibammonite.soto the systemmake headers- Installs Ammonite headers andammonite.pcto the systemmake uninstall- Removes installed library and headers- Custom install locations must be specified the same way as they were installed
make clean- Cleans the build area (build/) and default runtime cache (cache/)
- All targets and optional flags are documented here
- Set the environment variable
PREFIX_DIRto configure the base install path- The
install,headersanduninstalltargets have additional path options
- The
- Package names are correct for Debian, other distros may vary
makepkgconfcoreutilssedpython3g++ORclang++- If using clang++, use
CXX="clang++" make [TARGET]USE_LLVM_CPP=truemight be useful for systems without (a new enough) GCC
- When swapping between different compilers, run
make clean
- If using clang++, use
-
libglm-dev libglfw3-dev libepoxy-dev libstb-dev libassimp-devlibdecor-0-0 libdecor-0-plugin-1-gtkare required for Wayland window decorations
-
clang-tidy (21+)
-
inkscape optipng
- Due to the small size of this project, only a small range of hardware can be tested
- If you hardware / driver meets the requirements listed here, but the engine doesn't work, please file a bug report
- Issues, feature requests and bug reports can be filed here
- Feel free to work on any issues / feature ideas, suggestions are welcome :)
- Some very basic usage information can be found in
docs/USAGE.md - Better documentation is planned in the future
- Some models in
assets/may have been created by third parties, attribution can be found indocs/CREDITS.md - Reference materials:
- This project is available under the terms of the MIT License
- These terms can be found in
LICENCE.txt
- These terms can be found in

