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).
Auto Trait Implementations§
impl !Freeze for SpriteRegistryResident
impl !RefUnwindSafe for SpriteRegistryResident
impl !UnwindSafe for SpriteRegistryResident
impl Send for SpriteRegistryResident
impl Sync for SpriteRegistryResident
impl Unpin for SpriteRegistryResident
impl UnsafeUnpin for SpriteRegistryResident
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.