Game Engine - Larc Engine

Currently in development.

The Larc game engine is written in C++ using SDL2 and OpenGL. A data oriented approach was taken when it comes to management of the entities, components and system. Larc engine resembles an ECS, but everything is a state (including the systems). Written to support both 2D and 3D games.

  • Memory managed

    • Global new/delete is overriden and memory is allocated out of a initial memory pool. Memory allocations are therefore far quicker than they would be from an OS allocation. The downside is an overhead in memory, with each allocation requiring a header for tracking purposes. Currently the engine has no stratedgy for dealing with memory fragmentation.
  • Data oriented

    • With the Larc engine I wanted to explore a data oriented approach to making games. Attempting to ensure data is stored in contiguous memory to reduce cache misses.
  • ECS like

    • Game state is stored as pure data structures and processed via systems. The approach in Larc engine is similar to an Entity Component System, differing in how states (components) are linked together. Entities are states, containing handles to other states used for purposes of grouping states together for removal. Systems are states, performing data transformations on other states. States are linked via a "Link" state, where systems use the link states to retrieve required states for processing. For example a Link state containing handles to position and a velocity states can be used to retrieve relevant states for a kinematics system where velocity is added to position. The kinematics system does not need to know which entity the states 'belong' to.
  • Custom collections

    • Map
      • Hash table. The hash table, block links and values all stored in contiguous memory.

Demostrated

  • C++
    • The Larc engine is written using C++ (11 compatible). CMake is used for build file generation.
  • Source control using Git
  • OpenGL
    • Larc engine targets OpenGL 3.3 for graphics.
  • Build file generation using CMake