Gamegine
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;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:
- glTF — the format, as the engine needs to understand it
- Base color, Albedo, Diffuse map — three words people use interchangeably and shouldn't
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 format | nothing, just work |
| IBL instead of a constant ambient | an environment map pipeline |
| Sorting transparent draws | nothing, just work |
| A light component | ECS design |
| KTX2 textures | extracting TextureData out of rnd::Texture |