Ryan GattisGraphics & Systems Engineer
← Projects

Material Engine

Reusable Vulkan engine library — a Vulkan RAII layer, an engine layer, and a standalone ECS.

  • C++23
  • Vulkan
  • OpenXR
  • CMake
  • vcpkg
  • GoogleTest
  • Dear ImGui

Implementation AI-generated. I designed the architecture, chose the approach, and directed the engineering decisions; the code itself was generated rather than hand-written. Noted here so the nature of the work is clear up front.

Layer diagram — glass depends on glass-ecs and steel; steel wraps Vulkan, SDL3 and OpenXR; glass-ecs links only glm
Layer diagram — glass depends on glass-ecs and steel; steel wraps Vulkan, SDL3 and OpenXR; glass-ecs links only glm
Libraries
3 targets
Standard
C++23

The engine architecture from the voxel project, extracted into a library that other projects can consume as a git submodule. Splitting it out forced the layer boundary to become real: anything that leaked Vulkan types through the abstraction had to be fixed rather than worked around.

The layering

The diagram above is generated from the CMake targets rather than drawn by hand, so the arrows are the real link dependencies.

The part worth pointing at is glass-ecs. It links only glm — no Vulkan, no SDL, no OpenXR. An entity system has no business knowing what a swapchain is, and keeping that true means the ECS can be unit-tested with no GPU present, which is exactly what the test suite does.

steel — the Vulkan layer

RAII wrappers over window and device initialization, swapchain management, a pipeline builder, buffer uploads, uniform buffer templates, FXAA post-processing, Dear ImGui integration, and OpenXR HMD support.

glass — the engine layer

A sparse-set ECS with World / Entity / View, event dispatch, a perspective camera, a material/shader/mesh/geometry system, and a renderer that targets both desktop and stereo XR from the same call path.

Build

CMake 3.25+ with vcpkg managing dependencies, and a ctest suite that runs in CI.