Basics
Build
See compilation and dependencies.
Coordinate system
We are using the default opengl right handed coordinate system with x going right, y going upwards and z point towards you.
We are using column major matrices.

Unittests
If you are going to contribute, make sure that you are adding unittests, too. I won't make promises about not breaking anything if there aren't unittests that are telling me that I've broken something.
To add a unittest, each module (src/modules/XXX) has a tests/ subdirectory. The CMakeLists.txt in the module directory adds the source files from that folder.
set(TEST_SRCS
[...]
)
gtest_suite_begin(tests-${LIB} TEMPLATE ${ROOT_DIR}/src/modules/core/tests/main.cpp.in)
gtest_suite_sources(tests-${LIB} ${TEST_SRCS})
gtest_suite_deps(tests-${LIB} ${LIB})
gtest_suite_end(tests-${LIB})
Coding style
Rule of thumb - stick to the existing coding style - you can also use the clang-format settings to format your code. In general
you should not include any whitespace or formatting changes if they don't belong to your code changes.
If you do a formatting change, this should not be mixed with code changes - make a dedicated commit for the formatting.
Avoid using the STL were possible - see Orthodox C++.
Commit messages
Commit messages should match the usual git commit message guidelines. Keep the summary short - put an UPPERCASE prefix in front of it and try to explain why the change was made - not what you changed (because that is part of the commit diff already).
The prefix is usually the module name. E.g. if you are changing code in src/modules/voxelformat the prefix would be VOXELFORMAT. A commit message could look like this:
VOXELFORMAT: summary
detail message line 1
detail message line 2
Modules
| Name | Description |
|---|---|
| app | Basic application classes |
| command | Bind c++ functionality to console commands |
| commonlua | Basic lua bindings and helper |
| core | String, collections and other foundation classes |
| http | Http download module |
| image | Image loading and writing |
| io | Stream and file handling |
| math | Based on glm |
| memento | The undo/redo states for a scene graph instance |
| metric | telegraf, influx and other metrics |
| noise | Different noise implementations |
| palette | Palette formats and helper |
| render | General renderer implementations and helpers |
| scenegraph | Scene graph and scene graph node implementation |
| testcore | Visual test helpers |
| ui | DearImgui based ui code |
| util | |
| video | Window and renderer module |
| voxel | The voxel engine code based on PolyVox |
| voxelcollection | Browse online and local voxel collections |
| voxelfont | TTF font to voxel |
| voxelformat | Several volume and mesh based file formats to load or generate voxels |
| voxelgenerator | LUA generator, space colonization, tree- and shape generators |
| voxelpathtracer | Path tracer |
| voxelrender | Voxel renderer |
| voxelutil | Pathfinding, raycasting, image and general util functions |