24#include <Metal/Metal.hpp>
44 "InstanceCullParams must be 128 bytes to match MSL layout");
67 void reserve(uint32_t maxInstances);
86 [[nodiscard]]
bool isReady()
const {
return resourcesReady_; }
93 void ensureResources();
98 MTL::ComputePipelineState* cullPipeline_ =
nullptr;
99 MTL::ComputePipelineState* writeArgsPipeline_ =
nullptr;
102 MTL::Buffer* compactedBuffer_ =
nullptr;
103 MTL::Buffer* indirectArgsBuffer_ =
nullptr;
104 MTL::Buffer* counterBuffer_ =
nullptr;
105 MTL::Buffer* uniformBuffer_ =
nullptr;
107 uint32_t maxInstances_ = 0;
109 bool resourcesReady_ =
false;
uint32_t indexCount
Mesh Primitive.count -> indirect args.
float frustumPlanes[6][4]
6 planes: (nx, ny, nz, d). dot(n,p)+d >= 0 = inside.
uint32_t indexStart
Mesh Primitive.base -> indirect args.
int32_t baseVertex
Mesh Primitive.baseVertex -> indirect args.
uint32_t baseInstance
Always 0.
float boundingSphereRadius
Bounding sphere radius for each instance.
uint32_t instanceCount
Total input instances.