Ares

Another rendering system.

A C++ game game engine made for learning purposes over the span of a summer.
Development stopped in favor of Godot, which is open source and drastically improved after release 3.0.

Demo

Features

  • Compiles and runs on Windows and Linux (mainly developed on Linux & QtCreator)
  • Fiber-based task-parallel system as described by Naughty Dog. Most of the design decisions were made with this in mind.
  • Full rendering backend abstraction (stateless command queue) and an implementation over OpenGL 3.3. Similar to how sokol-gfx is implemented, drawcalls are sorted to minimize state changes (ex. rebining textures).
  • Full modularity, separation between game and engine code, and entity-component-system design
  • Filesystem abstraction similar to PhysicsFs
  • glTF 2.0 support
  • (Very limited) Bullet Physics support
  • Can use rpmalloc as memory allocator (unstable on Windows)

How to use

Install required build dependencies (see Core/3rdparty/CMakeLists.txt) and use CMake to compile the project.

The engine itself is not useful on its own; it needs a App.so (App.dll on Windows) shared library from which to load game code from.

App.so should link to the Ares executable (yes, not the other way around); the easiest way to do so is via CMake:

add_subdirectory(Ares/)  #< Points to Ares source code
target_link_libraries(App PUBLIC Ares.Core)

You must then implement two functions (see Core/App/AppModule.hh):

#include <Ares/Core/App/AppApi.h>

ARES_API Module* ARES_loadAppModule();
ARES_API ARES_unloadAppModule(Module* loadedModule);

On engine startup the main game Module will be loaded from App.so; all game logic should be dispatched by the game module. This is similar to the concept of "game as a shared library" used by Quake.

Built With

Share this project:

Updates