Skip to main content

ShadowUniforms

Struct ShadowUniforms 

Source
#[repr(C)]
pub struct ShadowUniforms { pub light_vps: [[[f32; 4]; 4]; 4], pub cascade_splits: [f32; 4], pub active_cascades: u32, pub _pad: [u32; 3], }
Expand description

Cascaded shadow map view-projection matrices and split depths.

Pushed to the shadow-pass vertex shader at buffer(0) (alongside a cascade_idx push constant that picks one matrix) and to the main-pass fragment shader at buffer(5). Layout must stay in sync with the ShadowUniforms struct in the single-source shaders. Three of them declare it: the forward pass stops at active_cascades, the shadow pass at cascade_splits, and only the fog froxel kernel spells out the trailing pad.

cascade_splits are the view-space depth thresholds (positive) marking the FAR end of each cascade. The fragment shader picks the first cascade whose split is greater than the fragment’s view-space depth. Slot 3 (the last cascade’s far end) doubles as the overall shadow distance.

Fields§

§light_vps: [[[f32; 4]; 4]; 4]

One light-space VP matrix per cascade, column-major.

§cascade_splits: [f32; 4]

View-space depth at the FAR end of each cascade. Stored as a vec4 to keep MSL std140-like alignment trivial across backends. Slots [active_cascades..] hold a negative sentinel so the fragment shader’s split comparison never selects an unrendered cascade.

§active_cascades: u32

How many of the NUM_SHADOW_CASCADES slots are live this frame (1..=4, from GraphicsConfig.shadow_cascades). The array capacity stays 4; only the first active_cascades are split, rendered, and sampled. The fragment shader bounds both its cascade fallback and its cross-cascade blend by this so it never reads a slot the CPU did not render.

§_pad: [u32; 3]

Pads the struct to 288 bytes (a multiple of 16). The Rust [[f32; 4]; 4] matrices are only 4-byte aligned, so Rust would otherwise leave this at 276; the MSL float4x4-aligned struct and the GLSL std140 block both round up to 288, so the upload size must match for the bound buffer range to cover them.

Trait Implementations§

Source§

impl Clone for ShadowUniforms

Source§

fn clone(&self) -> ShadowUniforms

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for ShadowUniforms

Source§

impl NoUninit for ShadowUniforms

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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, <T as TryFrom<U>>::Error>

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