Skip to main content

SpriteBatch

Struct SpriteBatch 

Source
pub struct SpriteBatch { /* private fields */ }
Expand description

Per-frame snapshot batch. Send + Sync so it can cross into the compositor thread via repose_render_wgpu::Callback.

Each batch id owns its pipelines/instances in CallbackResources (like FullscreenPass’s id map). Re-keying the atlas (a new BatchDesc or uploads_gen) drops its contents; the game re-fills it with the uploads that came with the new descriptor.

Implementations§

Source§

impl SpriteBatch

Source

pub fn new(desc: BatchDesc) -> Self

Source

pub fn with_id(id: impl Into<String>, desc: BatchDesc) -> Self

Source

pub fn id(&self) -> &str

Source

pub fn clear(&mut self)

Source

pub fn len(&self) -> usize

Source

pub fn is_empty(&self) -> bool

Source

pub fn set_camera(&mut self, view_proj: Mat4)

View-projection matrix, y-down screen convention (see screen_camera).

Source

pub fn upload(&mut self, upload: AtlasUpload)

Queue atlas uploads, applied in the next prepare.

Source

pub fn extend_uploads(&mut self, uploads: impl IntoIterator<Item = AtlasUpload>)

Queue several uploads at once (per-frame atlas drains).

Source

pub fn set_light_source(&mut self, id: impl Into<String>)

Light every sprite in this batch from the light map of the Light2dPass with this id.

The pass and the batch must share one camera (set_camera on both); the light map is published as a world-space rect, so a batch drawn into any rectangle of the same target lines up without further setup. A batch whose pass has not prepared yet draws unlit for that frame.

Source

pub fn clear_light_source(&mut self)

Draw unlit: the identity light map, modulation ignored.

Source

pub fn set_light_modulate(&mut self, rgb: [f32; 3])

Scene darkness for this batch: multiplies every sprite’s colour before the light map adds light. [1.0; 3] (default) is neutral and [0.0; 3] is black; a batch with no light source ignores it. Values are clamped to 0.. and a non-finite channel falls back to 1.0, so one bad frame cannot blacken or NaN the whole batch.

Source

pub fn push( &mut self, center: [f32; 2], size: [f32; 2], rotation: f32, anchor: [f32; 2], flip_x: bool, flip_y: bool, uv_min: [f32; 2], uv_max: [f32; 2], tint: [f32; 4], page: u32, )

Push one textured quad.

Source

pub fn push_masked( &mut self, center: [f32; 2], size: [f32; 2], rotation: f32, anchor: [f32; 2], flip_x: bool, flip_y: bool, uv_min: [f32; 2], uv_max: [f32; 2], tint: [f32; 4], page: u32, light_mask: u32, )

Push one textured quad on an explicit light layer.

Source

pub fn push_blended( &mut self, center: [f32; 2], size: [f32; 2], rotation: f32, anchor: [f32; 2], flip_x: bool, flip_y: bool, uv_min: [f32; 2], uv_max: [f32; 2], tint: [f32; 4], page: u32, z: f32, blend: SpriteBlend, )

Push with explicit z + blend; lit by layer 0 (light mask 1). Use Self::push_blended_masked to put the sprite on another layer.

Source

pub fn push_blended_masked( &mut self, center: [f32; 2], size: [f32; 2], rotation: f32, anchor: [f32; 2], flip_x: bool, flip_y: bool, uv_min: [f32; 2], uv_max: [f32; 2], tint: [f32; 4], page: u32, z: f32, blend: SpriteBlend, light_mask: u32, )

Push with explicit z, blend, and light layer bits.

Source

pub fn push_sprite(&mut self, s: &SpriteInstance)

Bridge a snapshot sprite into the batch.

The atlas and the render target are both Rgba8UnormSrgb, so the sampled texel and the written pixel are already in linear space and the tint has to be linearized here; Self::push takes one directly.

Source§

impl SpriteBatch

Source

pub fn resolve_lightmap( &self, device: &Device, queue: &Queue, resources: &mut CallbackResources, )

Point this batch at the light map the renderer’s finish_prepare hook makes visible after every prepare has run, so scene order between a light pass and its consumers does not matter.

Runs on the renderer’s finish_prepare; also safe to call directly.

Source

pub fn prepare_with_uploads( &self, device: &Device, queue: &Queue, _encoder: &mut CommandEncoder, screen: &ScreenDescriptor, resources: &mut CallbackResources, uploads: &[AtlasUpload], ) -> Vec<CommandBuffer>

Game-owned passes can drive this batch into their OWN render target instead.

Trait Implementations§

Source§

impl WgpuCallback for SpriteBatch

Source§

fn resource_key(&self) -> Option<&str>

Source§

fn resource_type_id(&self) -> TypeId

Source§

fn prepare( &self, device: &Device, queue: &Queue, encoder: &mut CommandEncoder, screen: &ScreenDescriptor, resources: &mut CallbackResources, ) -> Vec<CommandBuffer>

Called before the main repose render pass, with access to device/queue/encoder for buffer uploads. Can return extra command buffers to be submitted.
Source§

fn finish_prepare( &self, device: &Device, queue: &Queue, _encoder: &mut CommandEncoder, _screen: &ScreenDescriptor, resources: &mut CallbackResources, ) -> Vec<CommandBuffer>

Called after all prepare calls, before paint. For cross-callback sync.
Source§

fn paint( &self, _info: PaintCallbackInfo, rpass: &mut CallbackRenderPass<'_, '_>, resources: &CallbackResources, )

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert 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>

Convert 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)

Convert &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)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send> ⓘ

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more