The build process uses cmake and is an adaptation of LearnOpenGL work.
As all the required libs and headers are already in the project, just run cmake and open the generated solution (tested with Cmake windows app/CLion). Cmake may require admin privileges.
First make sure you have CMake, Git, and GCC by typing as root (sudo) apt-get install g++ cmake git and then get the required packages: Using root (sudo) and type apt-get install libsoil-dev libglm-dev libassimp-dev libglew-dev libglfw3-dev libxinerama-dev libxcursor-dev libxi-dev libfreetype-dev libgl1-mesa-dev xorg-dev .
Build through CMake-gui: The source directory is SproutEngine and specify the build directory as SproutEngine/build. Creating the build directory within SproutEngine is important for linking to the resource files (it also will be ignored by Git). Hit configure and specify your compiler files (Unix Makefiles are recommended), resolve any missing directories or libraries, and then hit generate. Navigate to the build directory (cd SproutEngine/build) and type make in the terminal. This should generate the executables in the respective chapter folders.
Build through Cmake command line:
cd /path/to/SproutEngine
mkdir build && cd build
cmake ..
cmake --build .
Mac OS building
Building on Mac OS should be fairly simple, but i can't check that it works since I do not own a MacOS device:
brew install cmake assimp glm glfw freetype
cmake -S . -B build
cmake --build build -j$(sysctl -n hw.logicalcpu)
The project is divided into different targets, each focusing on an aspect of realtime rendering.
Realtime rasterization rendering. As of now, is implemented:
- model loading and displaying
- PBR pipeline
- Pass system, with multiple post processing effects
- Shadow mapping (simple, no CSM)
- Frustum culling
- Editor window
Raytracing on both CPU and GPU. Implemented on the GPU side (most likely broken right now, I'm reworking my whole pipeline) :
- Movement though the scene
- Diffuse lighting with materials, emissive triangles and frame accumulation
On the CPU side:
- Light bounces, with different material types (lambertians, dielectrics, mettalic)
- Antialiasing
- BVH that can be displayed by rasterization for debugging purposes
Integration of a physics engine to the rendering. Implemented:
- Rigidbody physics, without collisions as of now
- Basic physics solver, running on a parallel thread. Can be paused, resumed.
- Spring joints (in progress)




