erhe is a C++ library and editor for 3D graphics with a graphics API abstraction loosely modeled after Vulkan and Metal, with backends for OpenGL, Metal and Vulkan
908
stars
2,821
commits
C++
primary language
Sep 10, 2026
updated
A C++ 3D graphics library and sandbox editor, with a Vulkan/Metal-style rendering abstraction over OpenGL, Vulkan, and Metal.

erhe is an actively-developed personal research project for real-time rendering and geometry. Its editor is a sandbox for 3D scene creation, manipulation, and procedural mesh generation. erhe is the evolution of RenderStack.
git clone https://github.com/tksuoran/erhe
cd erhe
# Windows (from an x64 Native Tools Command Prompt)
scripts\configure_vs2026_vulkan.bat
# Linux
scripts/configure_ninja_linux_vulkan.sh && cmake --build build_ninja_linux_vulkan --target editor
# macOS
scripts/configure_xcode_metal.sh && cmake --build build_xcode_metal --target editor --config Debug
Vulkan is the default backend; the OpenGL build uses the *_opengl scripts instead (e.g. scripts\configure_vs2026_opengl.bat). See doc/building.md for all backends, CMake options, and IDE setup.
| Platform | Graphics backends | Status |
|---|---|---|
| Windows | OpenGL, Vulkan | Primary |
| Linux | OpenGL, Vulkan | Supported |
| macOS | Vulkan, Metal | Supported |
| Meta Quest / Android | Vulkan + OpenXR | Supported |
The OpenGL backend requires OpenGL 4.5 (with Direct State Access) at minimum; 4.6 is recommended. It is not available on Apple platforms.
The editor is a sandbox application for 3D scene creation and manipulation.
erhe is organized as a set of independent libraries under src/erhe/. Each has a notes.md with details on purpose, API, and design.
| Library | Description |
|---|---|
erhe::graphics | Vulkan/Metal-style graphics abstraction: pipelines, buffers, textures, shaders, ring buffers, shader monitor |
erhe::rendergraph | DAG of render nodes with typed inputs/outputs, executed in dependency order |
erhe::scene | glTF-like scene graph: nodes, meshes, cameras, lights, animations, skins |
erhe::gltf | glTF 2.0 import and export via fastgltf, including KHR physics extensions |
erhe::raytrace | CPU ray tracing abstraction with swappable bvh / tinybvh / Embree backends and BVH disk caching |
erhe::texgen | Procedural texture generation: data-driven node descriptors composed into GLSL fragment shaders (Material Maker port) |
erhe::graph | Generic node graph: nodes, pins, links, topological-order evaluation; base for the geometry, texture, and shader graphs |
erhe::xr | OpenXR integration: session and swapchain management, action-based input, hand tracking, stereo rendering |
erhe::scene_renderer | Forward renderer, shadow renderer, ID picking, camera/light/material/joint GPU buffers |
erhe::renderer | Debug line renderer (compute, geometry shader, or GL_LINES), text renderer, texture blit |
erhe::geometry | Polygon mesh manipulation via Geogram: subdivision, Conway operators, CSG, shape generators |
erhe::primitive | Converts geometry meshes to GPU vertex/index buffers; PBR material definitions |
erhe::physics | Thin abstraction over Jolt physics: rigid bodies, collision shapes, constraints |
erhe::imgui | Custom ImGui backend with per-host ImGui contexts and window management |
erhe::commands | Input command system with state machine, priority dispatch, and bindings for all input types |
erhe::window | SDL / GLFW windowing abstraction with input event handling |
erhe::item | Base Item (name, id, flags) and Hierarchy (parent/child tree) classes |
erhe::gl | Generated type-safe OpenGL wrappers with call logging and extension queries |
erhe::math | Bounding volumes, viewport projection, input axis filtering, vector/matrix helpers |
erhe::dataformat | Graphics-API-agnostic pixel and vertex format definitions |
erhe::message_bus | Typed publish-subscribe bus used to decouple editor subsystems |
erhe::profile | Unified profiling macros dispatching to Tracy, Superluminal, or NVTX |
erhe::ui | FreeType glyph rasterization and HarfBuzz shaping into GPU font atlases |
erhe::log | spdlog wrappers |
erhe::verify | VERIFY(condition) and FATAL(format, ...) macros |
erhe::codegen | Python code generator for C++ structs with versioned JSON serialization via simdjson |
erhe requires OpenGL 4.5 with DSA (Direct State Access); device creation fails on older versions. DSA, SSBOs, compute shaders and clip control are used unconditionally. The former OpenGL 4.1 (macOS) runtime compatibility layer has been removed.
erhe's own source is MIT-licensed -- see src/erhe/LICENSE. Bundled and fetched third-party dependencies retain their own licenses; see License.txt for the overview.
erhe stands on many excellent open-source projects, including Dear ImGui, Jolt Physics, Geogram, fastgltf, simdjson, SDL, OpenXR, FreeType, HarfBuzz, Tracy, GLM, fmt, and spdlog. Dependencies are fetched at configure time via CPM.cmake.
Static analysis provided by PVS-Studio - static analyzer for C, C++, C#, and Java code, free for open-source projects.
C++
66.7%
C
25.6%
Python
4.3%
CSS
1.1%
erhe is a C++ library and editor for 3D graphics with a graphics API abstraction loosely modeled after Vulkan and Metal, with backends for OpenGL, Metal and Vulkan
908
stars
2,821
commits
C++
primary language
Sep 10, 2026
updated
A C++ 3D graphics library and sandbox editor, with a Vulkan/Metal-style rendering abstraction over OpenGL, Vulkan, and Metal.

erhe is an actively-developed personal research project for real-time rendering and geometry. Its editor is a sandbox for 3D scene creation, manipulation, and procedural mesh generation. erhe is the evolution of RenderStack.
git clone https://github.com/tksuoran/erhe
cd erhe
# Windows (from an x64 Native Tools Command Prompt)
scripts\configure_vs2026_vulkan.bat
# Linux
scripts/configure_ninja_linux_vulkan.sh && cmake --build build_ninja_linux_vulkan --target editor
# macOS
scripts/configure_xcode_metal.sh && cmake --build build_xcode_metal --target editor --config Debug
Vulkan is the default backend; the OpenGL build uses the *_opengl scripts instead (e.g. scripts\configure_vs2026_opengl.bat). See doc/building.md for all backends, CMake options, and IDE setup.
| Platform | Graphics backends | Status |
|---|---|---|
| Windows | OpenGL, Vulkan | Primary |
| Linux | OpenGL, Vulkan | Supported |
| macOS | Vulkan, Metal | Supported |
| Meta Quest / Android | Vulkan + OpenXR | Supported |
The OpenGL backend requires OpenGL 4.5 (with Direct State Access) at minimum; 4.6 is recommended. It is not available on Apple platforms.
The editor is a sandbox application for 3D scene creation and manipulation.
erhe is organized as a set of independent libraries under src/erhe/. Each has a notes.md with details on purpose, API, and design.
| Library | Description |
|---|---|
erhe::graphics | Vulkan/Metal-style graphics abstraction: pipelines, buffers, textures, shaders, ring buffers, shader monitor |
erhe::rendergraph | DAG of render nodes with typed inputs/outputs, executed in dependency order |
erhe::scene | glTF-like scene graph: nodes, meshes, cameras, lights, animations, skins |
erhe::gltf | glTF 2.0 import and export via fastgltf, including KHR physics extensions |
erhe::raytrace | CPU ray tracing abstraction with swappable bvh / tinybvh / Embree backends and BVH disk caching |
erhe::texgen | Procedural texture generation: data-driven node descriptors composed into GLSL fragment shaders (Material Maker port) |
erhe::graph | Generic node graph: nodes, pins, links, topological-order evaluation; base for the geometry, texture, and shader graphs |
erhe::xr | OpenXR integration: session and swapchain management, action-based input, hand tracking, stereo rendering |
erhe::scene_renderer | Forward renderer, shadow renderer, ID picking, camera/light/material/joint GPU buffers |
erhe::renderer | Debug line renderer (compute, geometry shader, or GL_LINES), text renderer, texture blit |
erhe::geometry | Polygon mesh manipulation via Geogram: subdivision, Conway operators, CSG, shape generators |
erhe::primitive | Converts geometry meshes to GPU vertex/index buffers; PBR material definitions |
erhe::physics | Thin abstraction over Jolt physics: rigid bodies, collision shapes, constraints |
erhe::imgui | Custom ImGui backend with per-host ImGui contexts and window management |
erhe::commands | Input command system with state machine, priority dispatch, and bindings for all input types |
erhe::window | SDL / GLFW windowing abstraction with input event handling |
erhe::item | Base Item (name, id, flags) and Hierarchy (parent/child tree) classes |
erhe::gl | Generated type-safe OpenGL wrappers with call logging and extension queries |
erhe::math | Bounding volumes, viewport projection, input axis filtering, vector/matrix helpers |
erhe::dataformat | Graphics-API-agnostic pixel and vertex format definitions |
erhe::message_bus | Typed publish-subscribe bus used to decouple editor subsystems |
erhe::profile | Unified profiling macros dispatching to Tracy, Superluminal, or NVTX |
erhe::ui | FreeType glyph rasterization and HarfBuzz shaping into GPU font atlases |
erhe::log | spdlog wrappers |
erhe::verify | VERIFY(condition) and FATAL(format, ...) macros |
erhe::codegen | Python code generator for C++ structs with versioned JSON serialization via simdjson |
erhe requires OpenGL 4.5 with DSA (Direct State Access); device creation fails on older versions. DSA, SSBOs, compute shaders and clip control are used unconditionally. The former OpenGL 4.1 (macOS) runtime compatibility layer has been removed.
erhe's own source is MIT-licensed -- see src/erhe/LICENSE. Bundled and fetched third-party dependencies retain their own licenses; see License.txt for the overview.
erhe stands on many excellent open-source projects, including Dear ImGui, Jolt Physics, Geogram, fastgltf, simdjson, SDL, OpenXR, FreeType, HarfBuzz, Tracy, GLM, fmt, and spdlog. Dependencies are fetched at configure time via CPM.cmake.
Static analysis provided by PVS-Studio - static analyzer for C, C++, C#, and Java code, free for open-source projects.
C++
66.7%
C
25.6%
Python
4.3%
CSS
1.1%