pub struct LitForwardLane {
pub shader_complexity: ShaderComplexity,
pub max_directional_lights: u32,
pub max_point_lights: u32,
pub max_spot_lights: u32,
}Expand description
A lane that implements forward rendering with lighting support.
This lane renders meshes with lighting calculations performed in the fragment shader. It supports multiple light types (directional, point, spot) and includes shader complexity tracking for GORNA resource negotiation.
§Performance Characteristics
- O(meshes × lights) fragment shader complexity
- Suitable for: Scenes with moderate light counts (< 20 lights)
- Shader complexity tracking: Integrates with GORNA for adaptive quality
§Cost Estimation
The cost estimation includes:
- Base triangle and draw call costs (same as
SimpleUnlitLane) - Shader complexity multiplier based on the configured complexity level
- Per-light cost scaling based on the number of active lights
Fields§
§shader_complexity: ShaderComplexityThe shader complexity level to use for cost estimation.
max_directional_lights: u32Maximum number of directional lights supported per pass.
max_point_lights: u32Maximum number of point lights supported per pass.
max_spot_lights: u32Maximum number of spot lights supported per pass.
Implementations§
Source§impl LitForwardLane
impl LitForwardLane
Sourcepub fn with_complexity(complexity: ShaderComplexity) -> Self
pub fn with_complexity(complexity: ShaderComplexity) -> Self
Creates a new LitForwardLane with the specified shader complexity.
Sourcepub fn effective_light_counts(
&self,
render_world: &RenderWorld,
) -> (usize, usize, usize)
pub fn effective_light_counts( &self, render_world: &RenderWorld, ) -> (usize, usize, usize)
Returns the effective number of lights that will be used for rendering.
This clamps the actual light counts to the maximum supported per pass.
Trait Implementations§
Source§impl Debug for LitForwardLane
impl Debug for LitForwardLane
Source§impl Default for LitForwardLane
impl Default for LitForwardLane
Source§impl RenderLane for LitForwardLane
impl RenderLane for LitForwardLane
Source§fn strategy_name(&self) -> &'static str
fn strategy_name(&self) -> &'static str
Returns a human-readable identifier for this rendering strategy. Read more
Source§fn get_pipeline_for_material(
&self,
material_uuid: Option<AssetUUID>,
materials: &Assets<Box<dyn Material>>,
) -> RenderPipelineId
fn get_pipeline_for_material( &self, material_uuid: Option<AssetUUID>, materials: &Assets<Box<dyn Material>>, ) -> RenderPipelineId
Gets the appropriate render pipeline for a given material. Read more
Source§fn render(
&self,
render_world: &RenderWorld,
encoder: &mut dyn CommandEncoder,
render_ctx: &RenderContext<'_>,
gpu_meshes: &RwLock<Assets<GpuMesh>>,
materials: &RwLock<Assets<Box<dyn Material>>>,
)
fn render( &self, render_world: &RenderWorld, encoder: &mut dyn CommandEncoder, render_ctx: &RenderContext<'_>, gpu_meshes: &RwLock<Assets<GpuMesh>>, materials: &RwLock<Assets<Box<dyn Material>>>, )
Encodes GPU commands to render the scene into the provided command encoder. Read more
Source§fn estimate_cost(
&self,
render_world: &RenderWorld,
gpu_meshes: &RwLock<Assets<GpuMesh>>,
) -> f32
fn estimate_cost( &self, render_world: &RenderWorld, gpu_meshes: &RwLock<Assets<GpuMesh>>, ) -> f32
Estimates the GPU cost of rendering the given
RenderWorld with this strategy. Read moreAuto Trait Implementations§
impl Freeze for LitForwardLane
impl RefUnwindSafe for LitForwardLane
impl Send for LitForwardLane
impl Sync for LitForwardLane
impl Unpin for LitForwardLane
impl UnwindSafe for LitForwardLane
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
Mutably borrows from an owned value. Read more
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>
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 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>
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<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
Read this value from the supplied reader. Same as
ReadEndian::read_from_little_endian().