|
nngn
|
Graphics/physics/audio/game engine.
Documentation generated from comments using Doxygen is available here. It can of course also be read inline in the source code. Source code is organized in the following directories:
src: main source code directory. Most of the code is contained in one of the subdirectories, which form mostly-independent modules.src/lua: Lua libray and scripts.scripts: auxiliary scripts for building and interacting with the program.tests: unit and integration tests for the C++ and Lua components.tools: external and independent tools that interact with the engine to display information and control execution (inspection, profiling, configuration, etc.).All targets use autotools. For a native binary, simply execute:
See dependencies for the required packages.
The following build environments are regularly tested and known to work:
Cross-compiling with mingw is supported with the usual configure arguments:
See scripts/src_build.sh for an example of how to build dependencies from source.
A WebAssembly application can be built using emscripten. It provides all dependencies listed below, except for Lua, which must be built from source. See scripts/src_build.sh for an example.
Then, follow the autotools process, prefixing configure with emconfigure. pkg-config doesn't currently work with it, but the scripts/emscripten/pkgconfig directory has dummy files that can be used:
The following configure options are relevant when targeting WebAssembly:
--disable-benchmarks--disable-tests--disable-tools--without-opencl--without-vulkanSome additional capabilities can be enabled via the usual configure script option format. Some of them, described in dependencies, require additional libraries. The ones in this section do not, but can be selectively enabled.
--enable-lua-alloc: use a custom Lua allocator (see lua_Alloc in the documentation) which tracks all memory alloctions for each state. This information can be visualized at runtime.These are the required packages for building the main program, along with the versions known to work:
lua (5.4.4): embedded scripting languageThe default build of the program is very minimal. Additional functionality can be enabled by passing extra flags to the configure script.
See scripts/container.sh for an example script that creates a container with all the build dependencies.
--with-openclEnables the OpenCL compute backend. Requires:
OpenCL (2.2): heterogeneous computing library--with-openglEnables the OpenGL graphics backend. Requires:
glfw (3.3): portable GUI librarygl (4.5, 3.1es): graphics libraryglew (2.1.0): OpenGL extension loading library--with-vulkanEnables the Vulkan graphics backend. Requires:
glfw (3.3): portable GUI libraryvulkan (1.1.130): graphics libraryglslang (11.1.0): GLSL compilerAdditionally, if the VulkanMemoryAllocator library is present (determined by the vk_mem_alloc.h header file), it is used for some of the memory allocations. This default can be disabled with --without-vma.
--with-libpngEnables loading images. Requires:
libpng (1.6.37): PNG loading library--with-freetype2Enables loading fonts. Requires:
freetype2 (2.10.1): font libraryBuilding the tests requires Qt5Core and Qt5Test (5.14.0) and can be enabled with the --enable-tests flag. A clang-tidy check is also available via make tidy.
The tests can be compiled and executed with several compiler protections and sanitizers.
The following compilers have been tested:
gcc (11.1.0)clang (12.0.1)The following compiler flags have been tested:
-D_GLIBCXX_SANITIZE_VECTOR-fsanitize-address-use-after-scope-fstack-protectorThe following sanitizers have been tested:
addressleakundefinedpointer-comparepointer-subtractBuilding the benchmakrs requires Qt5Core and Qt5Test (5.14.0) and can be enabled with the --enable-benchmarks flag.
Buildings auxiliary tools requires Qt5Widgets, QtNetwork, Qt5Charts, and rustc (1.41.1) and can be enabled with the --enable-tools flag.
The packages required for a minimal build in FreeBSD are (available as pre-built packages via pkg):
autoconfautomakegcc11pkgconf