Skip to main content

InstanceContext

Struct InstanceContext 

Source
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: Entity

The entity the record is for.

§world_from_local: Affine3A

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

Source

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.

Source

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.

Source

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

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

§

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

Source§

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

§

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

§

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.
§

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.
§

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.
§

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.
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
§

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

§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

§

fn simd_from(_simd: S, value: T) -> T

§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

§

fn simd_into(self, simd: S) -> T

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.
§

impl<T> Upcast<T> for T

§

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

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

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