pub struct InstanceContext<'a> {
pub world: Scope<'a>,
pub entity: Entity,
pub world_from_local: Affine3A,
joints: &'a mut Vec<JointMatrix>,
morph_weights: &'a mut Vec<f32>,
}Expand description
Everything a family may read – and the frame arrays it may append to – while it writes one instance record.
The record is the family’s own: the built-in lit family builds a MeshInstance, while a caller’s family writes whatever its pipeline’s instance-step attributes declare, reading the components it needs from the world. Culling resolved only the entity and its placement; what else a draw carries, the family decides here.
Skin poses and morph weights are two independent things, each with its own frame array and its own pack method. A family that reads neither calls neither; a family that needs one packs only that one.
Fields§
§world: Scope<'a>The scope the entity is drawn through, for per-entity components.
It is the drawing source’s own scope, so a family reads the components of the subtree that source owns rather than of the whole world.
entity: EntityThe entity the record is for.
world_from_local: Affine3AThe entity’s world transform, resolved by culling.
joints: &'a mut Vec<JointMatrix>The frame’s joint matrices, appended to by Self::pack_joints.
morph_weights: &'a mut Vec<f32>The frame’s morph weights, appended to by Self::pack_morph_weights.
Implementations§
Source§impl<'a> InstanceContext<'a>
impl<'a> InstanceContext<'a>
Sourcepub(crate) fn new(
world: Scope<'a>,
entity: Entity,
world_from_local: Affine3A,
joints: &'a mut Vec<JointMatrix>,
morph_weights: &'a mut Vec<f32>,
) -> Self
pub(crate) fn new( world: Scope<'a>, entity: Entity, world_from_local: Affine3A, joints: &'a mut Vec<JointMatrix>, morph_weights: &'a mut Vec<f32>, ) -> Self
Build a context for one entity from the frame’s two growing arrays.
Sourcepub fn pack_joints(&mut self) -> u32
pub fn pack_joints(&mut self) -> u32
Append this entity’s joint matrices to the frame’s array and return the index its slice starts at.
The matrices come from the SkinPose of the entity this one names
with a SkinBinding. A family calls this only for a skinned mesh, and
puts the returned base into the record field its shader reads.
§Panics
If the entity names no pose entity, if that entity carries no
SkinPose, or if the pose is empty.
Sourcepub fn pack_morph_weights(&mut self, targets: u32) -> u32
pub fn pack_morph_weights(&mut self, targets: u32) -> u32
Append this entity’s morph weights to the frame’s array and return the index its slice starts at.
The weights come from the MorphWeights of the entity this one names
with a MorphBinding. targets is the mesh’s target count, which
the weights must match. A family calls this only for a morphed mesh, and
puts the returned base into the record field its shader reads.
§Panics
If the entity names no weights entity, if that entity carries no
MorphWeights, or if the weight count does not match targets.
Auto Trait Implementations§
impl<'a> !RefUnwindSafe for InstanceContext<'a>
impl<'a> !Send for InstanceContext<'a>
impl<'a> !Sync for InstanceContext<'a>
impl<'a> !UnwindSafe for InstanceContext<'a>
impl<'a> Forget for InstanceContext<'a>
impl<'a> Freeze for InstanceContext<'a>
impl<'a> Move for InstanceContext<'a>
impl<'a> Unpin for InstanceContext<'a>
impl<'a> UnsafeUnpin for InstanceContext<'a>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> Component for Twhere
T: 'static,
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§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.§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.§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.§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.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more