Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Project's composition

The lava project is in fact a bundle of multiple projects.

lava composition

The core principles of lava are:

  • Be up-to-date with C++ standard (currently set to C++17) to make your code-life easier ;
  • Keep your APIs clean (each project has a public interface with no more information than needed) ;
  • Decouple as much as you can, keeping different concepts encapsulated.


Example Description Result
chamber-watcher How to use the file and directory watcher, getting an event each time a file is created/deleted/modified. FileWatcher: watched directory has file "./data/tmp/watcher.tmp" modified.
crater-events How to use the cross-platform crater::Window class while grabbing keyboard and mouse events. WsEventType::MouseMoved (x: 331, y: 67)
dike-bouncy-sphere How to use the physics engine, showing the result of a sphere under gravity bouncing on a plane. This output is the sphere vertical position printed in the terminal.
flow-play-musics How to play multiple (streamed OGG) musics at once using the audio engine. Reading './assets/musics/buddy.ogg'.
flow-play-sounds How to play a (WAV) sound using the audio engine. Reading './assets/sounds/thunder.wav'.
flow-spatialization-effect How to use 3D spatialization of sounds, having a listener positioned in a 3D world. This is a demo of a fire-truck going around you. Reading './assets/sounds/fire-truck.wav'.
magma-scenes-and-windows How to use multiple windows and scenes with one instance of the render engine.
magma-shader-watcher How to register a material to the render engine by specifiying a file. Then, this examples shows that one can edit the file and have on-the-fly updated results.
magma-shadows How to use shadows with the render engine. The example shows that the cascaded shadow maps are updated per camera, so that they look good whatever happens.
magma-translucency How to use deep deferred renderer to get correct translucency rendering with intersecting meshes.
magma-vr How to use VR with the renderer via magma::VrRenderTarget. The renderer uses OpenVR to find the headset to draw to. Initializing VR.
sill-matcap-material How to use a matcap material with the game engine.
sill-mesh-makers How to use makers to load GLB meshes or predefined shapes.
sill-physics-demo How to use physics component. The examples expects the user to right-click to spawn bounceable spheres.
sill-rm-material How to use shipped PBR (roughness-metallic) material. The examples shows a fully metallic sphere varying its roughness over time.
sill-sponza How to load a big mesh. The examples shows how it is rendered with shadows and PBR materials.
sill-text How to use the sill::TextMeshComponent to print text within a 3D scene.
sill-vr-sandbox How to use the sill::BehaviorComponent to react to VR events. The examples is playground with interactive cubes. It has a independently-controllable companion window which shows the same scene than what is projected into the headset.
sill-vr-puzzle A big project, as this is a full puzzle game made for VR. It is highly inspired by The Witness and made to be a complete experience. Work in progress.

Contributing guide

lava uses Premake as build configuration system, but some dependencies use:

Moreover, C++17 features are highly used, be sure to have a recent compiler (gcc >= 7).

  • download Premake v5 and install it from your platform ;
  • run ./scripts/ to install submodules and download dependencies ;
  • run ./scripts/ to compile everything (with examples) ;
  • find all executables in build folder.

NOTE On linux, to use Wayland, either edit .setup.json or run ./scripts/ --windowing-system=wayland.

NOTE To compile on release, one can use make config=release.

As a daily developper, one should use: ./scripts/ <target-name> [debug]. This will enable Vulkan's validation layer, check dependencies, compile only what's necessary, and run the associated executable. If you don't know any target name, run the command without any. Adding debug at the end of the command, will launch gdb.

Compiling on Windows

In order to compile on Windows, you'll need to set-up a bash and gcc environment, so that the commands specified in the above section work too. Fact is, compiling the project with Microsoft Visual Studio Compiler has never been tested, and I personally won't even try. But have no fear, all the projects are cross-platform.

  • download and install some git bash environment for windows ;
  • download and install MinGW (find some x86_64-posix-seh in the readme with a recent gcc) ;
  • be sure to have cmake, bash and gcc findable in your PATH.

You can then follow the contributing guide with ./scripts/ && ./scripts/

Generating documentation

  • Have doxygen installed on your system ;
  • cd doc/technical && doxygen doxygen-config.xml to generate technical documentation.


Everything lava needs is downloaded via Premake to external/.

Current awesome dependencies are:

NOTE The one guideline concerning dependencies is to not include within this repository any external source, keeping the project light-weight and up-to-date. The one drawback is that compiling this repository in the future could be impossible because of removed or changed projects. If so, a new repository should be created containing the no-longer-available sources of concerned project.


lava - bundle of multiple projects making an open-source cross-platform **game engine**




No releases published


No packages published