Introduction
A voxel game engine. Players can create a world which is procedurally generated. The world loads and unloads automatically as players move and allows them to remove or add blocks as desired.
Architecture
This application utilizes a modular monolithic architecture. Multiple build targets are declared
Engine Module
This module contains the main logical components for the application to work. Each component is its own sub module.
Platform Sub Module
This module provides an abstract platform interface to facilitate window creation and management. It also provides an implementation of this interface using SDL.
Graphics Sub Module
This module provides an api which manages the creation and lifetime of GPU resources, as well as draw command submission and rendering. Two implementations are provided for the graphics sub module, one in OpenGL and one in Vulkan.
Language Sub Module
This module contains common logic for lexing, parsing, semantic analysis and compiling. This is currently used exclusively by the common shader compiler. This compiler is implemented to generalize shaders between OpenGL and Vulkan so that shader implementation is backend agnostic.
Math Sub Module
This module contains common mathematical functions and types used around the engine. It includes definitions for linear algebra operations, including vector and matrix types, and other common functionality like random number management.
Game Module
The game module contains the logic of the game. It manages world generation, entity management, physics and player interaction.
Terrain system
This system is in charge of generating chunks for specific locations. It procedurally generates terrain based on the current position and manages loading and unloading