A C++20 cross-platform game framework, with emphasis on addressing pain points in existing game engines. Notable features:
- Fast Parallel ECS, with support for querying by base class
- Multithreaded physics simulation
- 3D spatial audio, including room reverbation modeling
- Automatic memory management handled via reference counting, no garbage collector
- GPU-driven render engine that supports modern rendering APIs (Metal, DirectX 12, Vulkan)
- Fully-programmable GPU particle system, supporting both arbitrary meshes and billboarded sprites
- Physically-based lighting model
- Author shaders in vanilla GLSL
- Declarative user interface system based on HTML and CSS
- Support for SVGs in the UI and for textures
- Built-in multiplayer networking system
- FSM animation blending tree system
- Compute shader mesh skinning with automatic batching
- Programmable audio effect processing system
- AR/VR support via OpenXR integration
- CI/CD-friendly build process powered by CMake
- Quality-of-life features like automatic incremental shader compilation
- Integrates with GPU debugging tools (Xcode Metal Debugger, RenderDoc, PIX, NSight)
A complete list of third party technologies can be found in the deps
folder.
Note: RavEngine does not have a graphical editor.
Expect bugs and frequent breaking changes. Do not use in serious projects.
Use CMake:
cmake_minimum_required(VERSION 3.23)
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR})
# set output dirs
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)
PROJECT(Example_RavEngine_Game)
add_subdirectory("RavEngine") # configure the engine library
# configure your executable like normal
file(GLOB SOURCES "src/*.cpp" "src/*.hpp" "src/*.h")
add_executable("${PROJECT_NAME}" ${SOURCES})
target_link_libraries("${PROJECT_NAME}" PUBLIC "RavEngine" ) # also adds header includes
target_compile_features("${PROJECT_NAME}" PRIVATE cxx_std_20) # require C++20
# inform engine about your different assets
file(GLOB objects "objects/*.obj" "objects/*.fbx")
file(GLOB textures "textures/*")
file(GLOB shaders "shaders/*.vsh" "shaders/*.fsh" "shaders/*.csh")
file(GLOB fonts "fonts/*.ttf")
file(GLOB sounds "sounds/*.ogg")
file(GLOB uis "${sample_dir}/ui/*.rml" "${sample_dir}/uis/*.rcss")
pack_resources(TARGET "${PROJECT_NAME}"
OBJECTS ${objects}
SHADERS ${shaders}
TEXTURES ${textures}
UIS ${uis}
FONTS ${fonts}
SOUNDS ${sounds}
)
# fixup macOS / iOS / tvOS bundle
if(APPLE)
INSTALL(CODE
"include(BundleUtilities)
fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/$<CONFIGURATION>/${PROJECT_NAME}.app\" \"\" \"\")
"
COMPONENT Runtime
)
endif()
Then build with CMake as normal. Other notes:
- Windows:
- you will need to run your initial configure twice before building (known bug).
- If on an older OS (Windows 10), you'll need to clone recursive to get an updated version of DXC.
Platform | Architecture | Compiler | CMake Generator | Rendering API |
---|---|---|---|---|
macOS 12+ | Intel, Apple Silicon | Apple Clang | Xcode | Metal |
iOS 16+ | Device + Simulator* | Apple Clang | Xcode | Metal |
tvOS 16+ | Device + Simulator* | Apple Clang | Xcode | Metal |
visionOS 2D 1+ (WIP) | Device + Simulator* | Apple Clang | Xcode | Metal |
Windows 10+ (Win32) | x86_64, aarch64 | MSVC | Visual Studio, Ninja | DX12, Vulkan |
Windows 10+ (GDK) | x86_64 | MSVC | Visual Studio | DX12, Vulkan |
Windows 10+ (UWP) | x86_64, aarch64 | MSVC | Visual Studio | DX12 |
Xbox Series (UWP) | x86_64 | MSVC | Visual Studio | DX12 |
Linux | x86_64, aarch64 | Clang, gcc | Ninja, Make | Vulkan |
Android (WIP) | x86, x86_64, arm64-v8a, arm7a | NDK Clang | Ninja, Make, Android Studio | Vulkan |
Emscripten (Early WIP) | WebAssembly | emcc | Ninja, Make | WebGPU |
* Simulator support is build-only. RavEngine uses GPU features that the simulator does not support.
Hardware
Part | Recommended | Minimum |
---|---|---|
CPU | 16 threads | 4 cores |
RAM | 32 GB | 16 GB |
GPU | - | Any with DX12, VK 1.3, or Metal 3 |
Disk | - | SSD w/ 40GB free space |
Note that for end users the minimum system requirements are much lower
Software
- macOS, iOS, tvOS, visionOS
- Xcode 15.3+
- CMake
- Windows, UWP, Xbox
- Visual Studio 2022 or later with the "Desktop Development in C++" and "Game Development in C++" modules
- CMake (included with Visual Studio)
- LunarG Vulkan SDK (optional unless Vulkan support is desired)
- Android
- Android Studio 4.2 or later with NDK 25 or later
- Host requirements:
- macOS host: Xcode 15.3+
- Windows Host: Visual Studio 2022 with the "Desktop Development in C++" and "Game Development in C++" modules
- Linux host: clang 16 or later (recommended) or gcc 13 or later
- The SDL Android Builder wrapper project
- Web Browsers
- Latest emsdk
- CMake
- Host requirements:
- macOS: Xcode 15.3+
- Windows: Visual Studio 2022 with the "Desktop Development in C++" and "Game Development in C++" modules
- Linux: clang 16 or later (recommended) or gcc 13 or later
- Linux
- ninja (recommended) or make
- clang 16 or later (recommended) or gcc 13 or later
- cmake
- libatomic
- libx11-dev
- libwayland-dev
- uuid-dev
- alsa-lib-devel or pulseaudio (or another SDL3-supported audio library)
- LunarG Vulkan SDK
View a respository with code samples here: https://github.com/RavEngine/Samples