|
Vulkan Schnee 0.0.1
High-performance rendering engine
|
This document describes the data structures used by the renderer and their relationships.
The renderer transforms the scene graph into flat GPU buffers. The hierarchy is:
An object is an Actor or Entity in the ECS (EnTT). Each object has:
Objects can have zero or more MeshComponents attached.
A MeshComponent references its parent entity and contains a SceneNode for local transforms. Each MeshComponent has:
Each mesh consists of one or more primitives. A primitive represents a single draw unit with:
Primitives are subdivided into meshlets for the mesh shader pipeline. GPU meshlets use Engine::Rendering::GpuBuffers::UnifiedMeshlet:
The recorded mesh path skips meshlet culling. UnifiedMeshlet data is consumed by Engine/shaders/material/triangle.mesh through the binned visible meshlet records.
Indirect dispatch parameters for compute shaders:
Per-object data for frustum culling:
Local-space bounds used by PrimitiveCulling.comp to compute world-space culling bounds on GPU:
Frustum planes for stereo culling:
Plane order in shaders is left, right, top, bottom, near, far.
Simple atomic counters track surviving objects/meshlets:
Binned counters track per-pipeline counts: