Skip to content

romanpunia/vengeance

Repository files navigation



Vengeance Logo

C++ Cross-Platform Framework

Build Status

About ⚔️

Vengeance is a cross-platform game engine extension over Vitex framework. It's a 3D optimized engine, there is a posibility to render efficient 2D graphics with batching but that is not a priority. Main shading language is HLSL, it is transpiled or directly compiled and saved to cache when needed.

Rendering is based on stacking, that way you specify renderers for a camera (order matters), when rendering is initiated we process each renderer step by step, renderer can initiate sub-pass to render another part of scene for shadows, reflections, transparency and others. Before rendering begins, render lists are prepared for geometry rendering based on culling results, for sub-passes we use frustum and indexed culling, for main passes we also use occlusion culling.

Culling, physics, audio and rendering are done multhreaded if possible. In best case, we don't have any synchronization between threads but when we need to write to shared data, for example, destroy a rigid body owned by physics engine, we use scene transactions that are just callbacks that are guaranteed to be executed thread safe (in scope of scene) which in turn makes scene eventual consistent as transactions are fired later when all parallel tasks are finished.

Another important aspect of Vengeance is schemas, they are used to serialize and deserialize data, their main purpose is to provide containers for serialized game states such as meshes, animations, materials, scenes, configurations and other.

Documentation

You may take a look at Wiki pages. There are some practical usage examples that can be drag-and-drop executed.

Cross platform (tested platforms)

  • Windows 7/8/8.1/10+ x64/x86 (MSVC, MSVC ClangCL, MinGW)
  • Raspberian 3+ ARM (GCC)
  • Solaris 9+ x64/x86 (GCC)
  • FreeBSD 11+ x64/x86 (GCC)
  • Debian 11+ x64/x86 (GCC, LLVM)
  • Ubuntu 16.04+ x64/x86 (GCC)
  • MacOS Catalina 10.15+ x64 (Xcode)

Building

There are several ways to build this project that are explained here:

Configuration

  • VI_CXX is the C++ standard (17, 20, 23) which will be used, C++20 and higher will replace stateful coroutines with std coroutines, defaults to 20
  • VI_LOGGING is a logging level (errors, warnings, default, debug, verbose), defaults to "default"
  • VI_PESSIMISTIC will enable assertion statements in release mode, defaults to OFF
  • VI_BINDINGS will enable full script bindings otherwise only essentials will be used to reduce lib size, defaults to ON
  • VI_ALLOCATOR will enable custom allocator for all used standard containers, making them incompatible with std::allocator based ones but adding opportunity to use pool allocator, defaults to ON
  • VI_FCONTEXT will enable internal fcontext implementation for coroutines, defaults to ON
  • VI_SHADERS to embed shaders to /src/vengeance/graphics/shaders/bundle.hpp, defaults to ON

Dependencies

Serialization features

Networking features

Graphics features

GUI features

Other features

License

Vengeance is licensed under the MIT license

Known Issues

Documentation in it's usual form is non-existant at the moment. In the nearest future that could be changed.