All Projects β†’ Ravbug β†’ RavEngine

Ravbug / RavEngine

Licence: Apache-2.0 license
A fast, easy to use C++20 3D game library for modern computers

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
GLSL
2045 projects
shell
77523 projects
Objective-C++
1391 projects
HLSL
714 projects

Projects that are alternatives of or similar to RavEngine

bgfx-python
Python 3.7+ wrapper for the BGFX library. 🐍
Stars: ✭ 99 (-18.85%)
Mutual labels:  metal, vulkan, bgfx, directx
The Forge
The Forge Cross-Platform Rendering Framework PC Windows, Linux, Ray Tracing, macOS / iOS, Android, XBOX, PS4, PS5, Switch, Quest 2
Stars: ✭ 2,710 (+2121.31%)
Mutual labels:  metal, shaders, vulkan, directx
Diligentengine
A modern cross-platform low-level graphics library and rendering framework
Stars: ✭ 2,142 (+1655.74%)
Mutual labels:  graphics-engine, vulkan, directx, 3d-engine
bgfx-header-extension-library
Header-only effects and helper library for Bgfx to help you hit the ground running. Includes a bunch of post processing filters to complete common graphical tasks
Stars: ✭ 35 (-71.31%)
Mutual labels:  metal, vulkan, bgfx, directx
YALCT
Yet Another Live Coding Tool - Powered by Veldrid and elbow grease
Stars: ✭ 25 (-79.51%)
Mutual labels:  metal, shaders, vulkan
Diligentsamples
Sample projects demonstrating the usage of Diligent Engine
Stars: ✭ 138 (+13.11%)
Mutual labels:  graphics-engine, vulkan, directx
Wolf.engine
The Wolf is a comprehensive set of C/C++ open source libraries for realtime rendering, realtime streaming and game developing
Stars: ✭ 230 (+88.52%)
Mutual labels:  graphics-engine, metal, vulkan
Llgl
Low Level Graphics Library (LLGL) is a thin abstraction layer for the modern graphics APIs OpenGL, Direct3D, Vulkan, and Metal
Stars: ✭ 1,011 (+728.69%)
Mutual labels:  metal, vulkan, directx
CrossWindow-Demos
πŸ₯ͺ Examples of how to use CrossWindow for things like rendering graphics, listening to events, etc.
Stars: ✭ 48 (-60.66%)
Mutual labels:  metal, vulkan, directx
CrossWindow-Graphics
A header only library to simplify creating πŸŒ‹ Vulkan / βšͺ OpenGL / 🌐 WebGL / ❎DirectX / πŸ€– Metal data structures with CrossWindow.
Stars: ✭ 48 (-60.66%)
Mutual labels:  metal, vulkan, directx
spirv cross
Safe Rust wrapper around SPIRV-Cross
Stars: ✭ 75 (-38.52%)
Mutual labels:  metal, vulkan, directx
Crossshader
βš”οΈ A tool for cross compiling shaders. Convert between GLSL, HLSL, Metal Shader Language, or older versions of GLSL.
Stars: ✭ 113 (-7.38%)
Mutual labels:  metal, vulkan, directx
Methanekit
🎲 Modern 3D graphics made simple with cross-platform C++17 meta-API on top of DirectX 12 & Metal (Vulkan is coming)
Stars: ✭ 197 (+61.48%)
Mutual labels:  metal, shaders, directx
pygfx
Like ThreeJS but for Python and based on wgpu
Stars: ✭ 72 (-40.98%)
Mutual labels:  metal, vulkan, 3d-engine
LowLevelAPIDemo
Evergine Low-Level API samples.
Stars: ✭ 12 (-90.16%)
Mutual labels:  metal, vulkan, directx
Fiber2d
Cross-platform 2D Game Engine in pure Swift
Stars: ✭ 415 (+240.16%)
Mutual labels:  metal, vulkan, directx
Diligentcore
Core functionality of Diligent Engine
Stars: ✭ 263 (+115.57%)
Mutual labels:  graphics-engine, shaders, vulkan
virtualGizmo3D
Virtual GIZMO - 3D object manipulator / orientator, via mouse, with pan and dolly/zoom features
Stars: ✭ 36 (-70.49%)
Mutual labels:  metal, vulkan, directx
wgpu-mc
Rust-based replacement for the default Minecraft renderer
Stars: ✭ 254 (+108.2%)
Mutual labels:  metal, vulkan, directx
Bgfx
Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.
Stars: ✭ 10,252 (+8303.28%)
Mutual labels:  metal, vulkan, directx

RavEngine

A C++20 cross-platform game framework, with emphasis on performance and ease of use. Notable features:

  1. Fast Parallel ECS
    • Unique feature: Supports querying by base classes without virtual!
    • Also supports Unity-style scripting with full automatic parallelization
  2. Multithreaded physics simulation (Nvidia PhysX 5.1)
  3. 3D spatialized audio with accurate room reverbation modeling (Google Resonance Audio)
  4. Automatic memory management handled via reference counting
  5. Supports modern rendering APIs (Metal, DirectX, Vulkan)
  6. Flexible and fast declarative user interface system based on HTML and CSS (RmlUi)
  7. Support for SVGs in the UI and for textures
  8. High-performance easy-to-use multiplayer networking system (Valve GameNetworkingSockets)
  9. FSM animation blending tree system
  10. Compute shader mesh skinning with automatic batching
  11. Software instrument synthesis and MIDI playback (sfizz)
  12. Programmable audio post-processing system
  13. CI/CD-friendly build process powered by CMake
  14. Quality-of-life features like automatic incremental shader compilation

Note: RavEngine does not have a graphical editor.

This is an early alpha

Expect bugs and frequent breaking changes. Do not use in serious projects.

Integrating and building

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/*.cmake")
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()

You need to declare your shaders, so that RavEngine can automatically compile them to the correct backend. Create a .cmake file and invoke RavEngine's macro:

declare_shader("shaderName" "${CMAKE_CURRENT_LIST_DIR}/vertexshader.glsl" "${CMAKE_CURRENT_LIST_DIR}/fragmentshader.glsl" "${CMAKE_CURRENT_LIST_DIR}/varying.def.hlsl")

When you load a shader, RavEngine will use the name you specify as the first parameter. To learn how to write bgfx shaders, see the documentation at https://github.com/bkaradzic/bgfx

Then build with CMake as normal. On Windows, you will need to run your initial configure twice before building. Example scripts are provided.

Supported platforms

Platform Architecture Compiler CMake Generator Rendering API
macOS 10.15+ Intel, Apple Silicon Apple Clang Xcode Metal
iOS 14+ Device + Simulator Apple Clang Xcode Metal
tvOS 14+ Device + Simulator Apple Clang Xcode Metal
Windows 10+ (Win32) x86_64, aarch64 MSVC Visual Studio DX12, Vulkan
Windows 10+ (GDK) x86_64 MSVC Visual Studio DX12, Vulkan
Windows 10+ (UWP) x86_64, aarch64 MSVC Visual Studio DX12
Linux x86_64, aarch64 Clang, gcc Ninja, Make Vulkan
Emscripten (build only) WebAssembly emcc Make --

Note for Linux users: You must have the following shared libaries installed on your system:

  • libatomic
  • x11-dev, libgl-dev (for X11 support)
  • wayland-devel, libxkbcommon-devel, libegl-dev (for Wayland support, note that Wayland is currently not fully supported)
  • alsa-lib-devel (aka libasound2-devel) (or another SDL2-supported audio library)

In addition the Raspberry Pi currently does not work due to missing support for 32-bit index buffers in Vulkan.

Example programs

View a respository with code samples here: https://github.com/RavEngine/Samples

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].