4#include <glm/mat4x4.hpp>
122 static_assert(
sizeof(
UnifiedMeshlet) == 48,
"UnifiedMeshlet size mismatch");
246 static_assert(
sizeof(
MeshGeometryData) == 48,
"MeshGeometryData size mismatch");
310 static_assert(offsetof(
DiffuseShaderMaterial, baseColorFactor) == 16,
"baseColorFactor must be at offset 16");
344 static_assert(
sizeof(
PbrMaterial) == 96,
"PbrMaterial size mismatch with GLSL std430 layout");
345 static_assert(offsetof(
PbrMaterial, baseColorFactor) == 16,
"baseColorFactor must be at offset 16");
346 static_assert(offsetof(
PbrMaterial, emissiveFactor) == 32,
"emissiveFactor must be at offset 32 (16-byte aligned for std430 vec3)");
356 static_assert(
sizeof(
NormalsMaterial) == 16,
"NormalsMaterial size mismatch");
375 static_assert(
sizeof(
SHProbeData) == 160,
"SHProbeData size mismatch");
389 static_assert(
sizeof(
DynamicPointLight) == 32,
"DynamicPointLight size mismatch");
398 std::array<DynamicPointLight, MAX_DYNAMIC_POINT_LIGHTS>
pointLights{};
401 "DynamicPointLightBuffer size mismatch");
415 static_assert(
sizeof(
SunLightBuffer) == 64,
"SunLightBuffer size mismatch");
451 static_assert(
sizeof(
ClusterLodData) == 48,
"ClusterLodData size mismatch");
465 static_assert(
sizeof(
ClusterGroupData) == 32,
"ClusterGroupData size mismatch");
482 static_assert(
sizeof(
LodConfigUBO) == 48,
"LodConfigUBO size mismatch");
496 static_assert(
sizeof(
ClusterSurvivor) == 16,
"ClusterSurvivor size mismatch");
constexpr uint32_t MAX_SUN_SHADOW_CASCADES
constexpr uint32_t MAX_DYNAMIC_POINT_LIGHTS
GpuBuffers::MeshGeometryData MeshGeometryData
GpuBuffers::ObjectCullingData ObjectCullingData
GpuBuffers::ClusterSurvivor ClusterSurvivor
GpuBuffers::MeshletBounds MeshletBounds
GpuBuffers::GpuMeshDescription GpuMeshDescription
GpuBuffers::LodConfigUBO LodConfigUBO
GpuBuffers::ClusterLodData ClusterLodData
GpuBuffers::VisibleLodPrimitive VisibleLodPrimitive
GpuBuffers::DynamicPointLightBuffer DynamicPointLightBuffer
GpuBuffers::Dispatch Dispatch
GpuBuffers::DynamicPointLight DynamicPointLight
GpuBuffers::ObjectCullingCounters ObjectCullingCounters
GpuBuffers::DiffuseShaderMaterial GpuDiffuseShaderMaterial
GpuBuffers::NormalsMaterial GpuNormalsMaterial
GpuBuffers::SHProbeData SHProbeData
GpuBuffers::PrimitiveMeshletData PrimitiveMeshletData
GpuBuffers::InstanceData InstanceData
GpuBuffers::SunLightBuffer SunLightBuffer
GpuBuffers::MeshUnpackingData MeshUnpackingData
GpuBuffers::LocalBoundsData LocalBoundsData
GpuBuffers::VisibleMeshletInfo VisibleMeshletInfo
GpuBuffers::VisibleMeshletRange VisibleMeshletRange
GpuBuffers::InstanceCullingData InstanceCullingData
GpuBuffers::SunShadowCascadeBuffer SunShadowCascadeBuffer
GpuBuffers::ClusterGroupData ClusterGroupData
GpuBuffers::UnifiedMeshlet UnifiedMeshlet
GpuBuffers::PbrMaterial GpuPbrMaterial
GpuBuffers::DiffuseFlatColorMaterial GpuDiffuseFlatColorMaterial
GpuBuffers::SingleMeshletGeometryData SingleMeshletGeometryData
GpuBuffers::MeshPrimitiveRenderData MeshPrimitiveRenderData
CPU-side mesh data with per-object transform and primitives.
std::vector< CpuPrimitiveData > primitives
uint32_t meshletOffset
First meshlet for this primitive.
float boundingSphereRadius
glm::vec3 boundingSphereWorldPosition
Frustum planes for compute shader culling.
std::array< glm::vec4, 6 > planes[2]
[eyeIndex][planeIndex]
Per-group LOD data representing simplified child clusters.
float simplifiedError
Error threshold for this group.
glm::vec4 simplifiedBoundsPositionAndRadius
xyz = local center, w = radius
int32_t depth
DAG depth (0 = coarsest level)
Per-cluster LOD data for GPU-driven LOD selection.
uint64_t meshletDataAddress
Device address of the referenced UnifiedMeshlet.
uint32_t meshletIndex
Index into UnifiedMeshlet buffer.
int32_t groupId
Group this cluster belongs to (for parent error check)
float error
Simplification error (mesh-local units)
glm::vec4 boundsPositionAndRadius
xyz = local center, w = radius
int32_t refinedGroupId
Group this cluster simplifies (-1 for base geometry)
Cluster survivor data passed from culling to binning shaders.
uint32_t primitiveID
For transform/material lookup.
float ditherFactor
0.0-1.0 for transition blending
uint32_t clusterIndex
Global cluster index → maps to meshlet.
GPU-side flat color material.
GPU-side diffuse textured material.
uint32_t baseColorTextureIndex
glm::vec4 baseColorFactor
Compute dispatch dimensions.
Fixed-size dynamic point light buffer for shaders.
std::array< DynamicPointLight, MAX_DYNAMIC_POINT_LIGHTS > pointLights
GPU-side dynamic point light. positionRadius.xyz = world position, w = influence radius....
GPU-side mesh location and meshlet count.
Instance culling data for compute shader.
uint32_t meshGeometryId
Index into MeshGeometryData buffer.
uint32_t instanceId
Index into InstanceData buffer.
glm::vec4 worldPositionAndRadius
xyz = world position, w = radius
Per-instance data referencing shared geometry.
uint32_t meshGeometryId
Index into MeshGeometryData buffer.
Local-space bounding sphere data for GPU transformation.
glm::vec4 localCenterAndRadius
xyz = local center, w = local radius
LOD configuration UBO for GPU shader selection.
float cameraNear
Positive near plane distance.
float cameraProj11
projection[1][1] = cot(fov/2)
uint32_t ditherEnabled
1 = dither transitions, 0 = hard cut
float errorThresholdPixels
Target pixel error (default 1.0)
glm::vec4 cameraPosition
World-space camera position.
glm::vec2 screenSize
Render target dimensions.
Shared geometry metadata for instanced rendering with LOD support.
uint32_t clusterStartIndex
0xFFFFFFFF if no LOD
uint32_t singleMeshletGeoIndex
0xFFFFFFFF if multi-meshlet
uint32_t geometryVertexStart
uint32_t boneCount
0 for static meshes
uint32_t boneVertexDataStart
uint32_t flags
Bit 0: isSkinned.
uint32_t meshletStartIndex
Per-primitive render data for GPU shader access.
uint32_t shProbeIndex
Index into SH probe SSBO (0 = default)
Mesh unpacking metadata for compute shader.
uint32_t meshStartIndex
First meshlet for this mesh.
uint32_t objectIndex
Index into main SSBO.
glm::vec4 worldPositionAndRadius
GPU-side normals debug material.
Culling operation counters for GPU buffers.
uint32_t totalMeshletCount
Object culling data for compute shader.
glm::vec4 worldPositionAndRadius
xyz = world position, w = radius
GPU-side PBR material with spherical harmonics.
uint32_t roughnessMetallicTextureIndex
0xFFFFFFFF = not present
glm::vec4 baseColorFactor
uint32_t lightmapTextureIndex
0xFFFFFFFF = not present
uint32_t baseColorTextureIndex
0xFFFFFFFF = not present
uint32_t emissiveTextureIndex
0xFFFFFFFF = not present
uint32_t normalMapBC5
1 = BC5 (RG), 0 = RGB
uint32_t normalTextureIndex
0xFFFFFFFF = not present
float alphaCutoff
Threshold for MASK mode.
Per-primitive meshlet range for culling shader.
uint64_t meshletDataAddress
uint32_t meshletStartIndex
Spherical harmonics probe data for dynamic lighting.
glm::vec4 coefficients[9]
L0-L2 RGB coefficients.
GPU data for single-meshlet vertex-shader path.
GPU-side single directional sun light. directionEnabled.xyz = direction the light travels in world sp...
glm::vec4 shadowParams
x = castsShadows, y = angular diameter degrees
glm::vec4 lightmapShadowParams
x = sun direct removal scale
glm::vec4 directionEnabled
GPU-side cascaded shadow data for the active directional sun.
glm::vec4 cascadeSplits
camera-forward far split per cascade
glm::vec4 cameraForward
xyz = cascade camera forward direction, w = render debug mode
glm::vec4 params
x = enabled, y = cascade count, z = map size, w = max distance
std::array< glm::mat4, MAX_SUN_SHADOW_CASCADES > lightViewProj
glm::vec4 biasParams
x = depth bias, y = normal bias, z = PCF radius, w = lightmapped receivers
GPU-side meshlet memory location and counts.
uint32_t triangleDataOffset
uint64_t vertexDataAddress
uint64_t triangleDataAddress
uint32_t vertexDataOffset
Visible LOD primitive data for parallel cluster selection.
uint32_t clusterStartIndex
First ClusterLodData index for this primitive.
uint32_t primitiveID
Primitive index for transform/material lookup.
uint32_t clusterCount
Number of clusters in this primitive's LOD hierarchy.
uint32_t meshGeometryId
Index into MeshGeometryData buffer.
Visible meshlet result from culling operation.
float ditherFactor
LOD transition dither factor (0.0-1.0)
uint64_t meshletDataAddress
Visible meshlet range per object for dispatch.
CPU-side mapping from MeshAsset to shared geometry buffer.
uint32_t vertexBaseOffset
uint32_t triangleBaseOffset
uint32_t meshletStartIndex
uint32_t vsIndexOffset
VS index buffer offset (single-meshlet only)
uint32_t boneVertexBaseOffset
glm::vec3 localBoundsCenter
CPU-side per-object meshlet, vertex, and index data.
std::vector< GpuBuffers::UnifiedMeshlet > meshletData
std::vector< uint8_t > tris
std::vector< uint32_t > vertices