Rether / docs
engine/gamegine/Gamegine
hubA C++23 Vulkan engine, and the notes that follow it

Gamegine

updated 2026.08.10created 2026.08.10~2 min

My own engine: a static library eng, Vulkan through an RHI abstraction, ECS over EnTT, glTF assets. This page only points at things — everything it links to is where the actual knowledge lives.

How these notes are split

Three kinds, because they age at three different speeds. Getting a note into the wrong one is what makes documentation rot.

  • reference — the world, not my code. glTF, what base color means, how a BRDF works. A commit never invalidates it.
  • garden — my engine, present tense. Rewritten in place when the code changes, never appended to.
  • log — dated, past tense. What I did, what I decided, what bit me. Never retouched.

A log links to the other two. It never repeats them. If an architecture note starts telling a story ("I first tried…"), that paragraph belongs in a log.

The map

Everything the glTF work touches, and where each piece is written down. Dashed nodes are notes that do not exist yet.

graph TD
    HUB["Gamegine<br/><i>hub</i>"]

    subgraph world["The world · reference"]
        GLTF["glTF format"]
        PBR["Metallic-roughness<br/>workflow"]
        COLOR["Color spaces<br/>sRGB vs linear"]
        TANGENT["Tangent space"]
        KTX["KTX2 · Basis"]
        TERMS["base-color<br/>albedo · diffuse-map"]
    end

    subgraph mine["My engine"]
        ARCH["Architecture<br/><i>garden</i>"]
        SHADER["Shader contract<br/><i>reference</i>"]
        LOG["2026-08-10<br/>PBR materials<br/><i>log</i>"]
    end

    HUB --> ARCH
    HUB --> SHADER
    HUB --> LOG
    HUB --> world

    ARCH --> SHADER
    LOG -.->|"cites, never copies"| ARCH
    LOG -.->|"cites, never copies"| SHADER

    GLTF --> PBR
    PBR --> TERMS
    LOG -.-> PBR
    LOG -.-> COLOR
    ARCH -.-> KTX
    SHADER -.-> TANGENT

    classDef missing stroke-dasharray:4 3;
    class PBR,COLOR,TANGENT,KTX missing;
Notes behind the glTF implementation. Dashed = not written yet.

The five dashed notes are not a wishlist — each one is a thing I had to work out anyway while implementing this, and currently only exists as a paragraph inside a log where nobody will find it again.

The engine, as it stands

Gamegine architecture — the seven layers, who owns what, and which way dependencies point. Read this first; most "where does this belong" questions are answered by the layer order alone. Its Known warts section is the honest list of what is currently wrong.

Shader contract — every binding, push constant and vertex attribute in one table. The note I reopen the most. Nothing validates the C++ side against the shader at compile time, so this is the authority.

Work log

  • PBR materials — five texture slots, the factors in a uniform buffer, four pipeline variants. The end of the one-texture material.

Background reading

The general notes these lean on, none of them specific to my engine:

Open fronts

Not a roadmap, just what is knowingly unfinished. Each one is argued in the note that owns it.

Blocked on
Tangents in the vertex formatnothing, just work
IBL instead of a constant ambientan environment map pipeline
Sorting transparent drawsnothing, just work
A light componentECS design
KTX2 texturesextracting TextureData out of rnd::Texture

Keyboard

search this vaultK / /
step the sidebarjk
open selected
switch browse mode123
switch vaultgv
toggle themet
close / clearesc
this help?
esc to close