about

Manta is C++ game engine & build system currently under development designed to achieve the following:

  • Provide a simple library for creating games quickly

  • Provide abstraction layers for cross-platform compilation (Windows/MacOS/Linux) and graphics API backends (OpenGL, DirectX, Vulkan, Metal)

  • Provide a custom build system prioritizing modularity and fast compile times

  • Employ build-time code generation for engine systems (boilerplate internals of object, asset, and render systems, etc.)

  • Have an “IDE-like” experience facilitated by a Visual Studio Code plugin (build + compile + run, debugging, *project*/workspace navigation, IntelliSense)

Manta is a personal project not meant for open use. That said, an early fork of the source is available below to browse as you please.

GitHub: https://github.com/jaredx64/manta-engine/


SHOWCASE: manta “UNIVERSAL” SHADER LANGUAGE

To seamlessly support multiple graphics backends without requiring duplicated shaders, Manta implements its own "common" shader language suffixed .shader.

Shader files are translated at build time into either GLSL, HLSL, or Metal depending on the target graphics API. Boilerplate C++ code is also generated by the build tool from the shader files to automatically handle resource input layouts and bindings.

The shader pipeline works as follows:

  • build tool searches for '.shader' files

  • build tool runs a C preprocessor on files to resolve preprocessor directives, includes, and comments

  • build tool parses the preprocessed output and and builds an AST representation of the shader program

  • build tool generates .glsl/.hlsl/.metal code from the AST

  • build tool generates internal C++ engine code from the AST

  • build tool compiles and packs the .glsl/.hlsl/.metal shaders into the project binary

  • runtime loads the shaders from the binary and uses the generated C++ code to handle API-specific resource management/input bindings


showcase: object system