The lava project is in fact a bundle of multiple projects.
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.
|chamber-watcher||How to use the file and directory watcher, getting an event each time a file is created/deleted/modified.||
|crater-events||How to use the cross-platform
|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.||
|flow-play-sounds||How to play a (WAV) sound using the audio engine.||
|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.||
|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
|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-vr-sandbox||How to use the
|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.|
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 ;
./scripts/setup.shto install submodules and download dependencies ;
./scripts/build.shto compile everything (with examples) ;
- find all executables in
NOTE On linux, to use Wayland, either edit
NOTE To compile on release, one can use
As a daily developper, one should use:
./scripts/run.sh <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.
debug at the end of the command, will launch
Compiling on Windows
In order to compile on Windows, you'll need to set-up a
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
- download and install some git bash environment for windows ;
- download and install MinGW
x86_64-posix-sehin the readme with a recent
- be sure to have
gccfindable in your PATH.
You can then follow the contributing guide with
./scripts/setup.sh && ./scripts/build.sh.
- Have doxygen installed on your system ;
cd doc/technical && doxygen doxygen-config.xmlto generate technical documentation.
Everything lava needs is downloaded via Premake to
Current awesome dependencies are:
- Bullet Physics
- Nlohman's JSON
- OpenGL Mathematics
- STB libraries
- Vulkan headers and loader
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.