pub struct SpriteRegistryResident {
pub occupancy: Buffer,
pub colors: Buffer,
pub color_offsets: Buffer,
pub model_meta: Buffer,
pub instances: Buffer,
pub instance_capacity: u32,
pub tile_ranges: Buffer,
pub tile_instances: Buffer,
/* private fields */
}Expand description
GPU-resident registry + instances: every model’s occupancy / colours / offsets concatenated into shared storage buffers, a per-model metadata table, and a capacity-sized instance buffer rewritten each frame with the frustum-visible subset (GPU.10.2). One bind group serves all models (same approach as the multi-grid scene).
Fields§
§occupancy: Buffer§colors: Buffer§color_offsets: Buffer§model_meta: Buffer§instances: BufferHolds up to instance_capacity instances; the visible subset
is packed into [0, count) each frame by Self::cull_bin_upload.
instance_capacity: u32§tile_ranges: BufferGPU.10.3 — per-tile (offset, count) into tile_instances,
flat 2 * tiles_x * tiles_y u32s. Grown to fit the screen.
tile_instances: BufferGPU.10.3 — flat list of visible-instance indices grouped by tile. Grown to fit the per-frame total.
Implementations§
Source§impl SpriteRegistryResident
impl SpriteRegistryResident
Sourcepub fn upload(
device: &Device,
registry: &SpriteModelRegistry,
instances: &[SpriteInstance],
) -> Self
pub fn upload( device: &Device, registry: &SpriteModelRegistry, instances: &[SpriteInstance], ) -> Self
Concatenate registry’s models into shared buffers and prepare
instances for per-frame culling. Model-relative indices stay
as built; the shader adds each model’s base offset from the
metadata table.
Sourcepub fn cull_bin_upload(
&mut self,
device: &Device,
queue: &Queue,
f: &ViewFrustum,
screen_w: u32,
screen_h: u32,
tile_size: u32,
lod_px: f32,
) -> (u32, u32, u32)
pub fn cull_bin_upload( &mut self, device: &Device, queue: &Queue, f: &ViewFrustum, screen_w: u32, screen_h: u32, tile_size: u32, lod_px: f32, ) -> (u32, u32, u32)
GPU.10.3 — frustum-cull, pack the visible subset into the
instance buffer, then bin those instances into screen tiles:
project each visible bounding sphere to a screen AABB and append
its (visible) index to every overlapped tile. Uploads the
instance buffer + tile_ranges (per-tile offset/count) +
tile_instances (flat grouped indices), growing the tile
buffers as needed. Returns (visible_count, tiles_x, tiles_y).