#[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: u32How 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
impl Clone for ShadowUniforms
Source§fn clone(&self) -> ShadowUniforms
fn clone(&self) -> ShadowUniforms
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more