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

Manta Engine features a custom shader language which cross-compiles to .glsl, .hlsl, .metal (WIP) for the respective graphics backends. The goal is to streamline the shader authoring process in conjunction with the engine’s API-agnostic graphics layer. With this “universal” shader language, creating and maintaining shaders is as simple as modifying single ‘.shader’ files.

During the code generation stage of the build pipeline, miscellaneous internal C++ “boilerplate” engine code is generated from the shader metadata. This includes shader, texture, and render target bindings; vertex input layouts; CPU-side (C++) constant/uniform buffer interfaces; and more. The ‘.shader’ files also support C preprocessor directives such as #include, #if, etc.

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