pub struct LitForwardLane {
pub shader_complexity: ShaderComplexity,
pub max_directional_lights: u32,
pub max_point_lights: u32,
pub max_spot_lights: u32,
/* private fields */
}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.
Source§impl LitForwardLane
impl LitForwardLane
Sourcepub fn get_pipeline_for_material(
&self,
_material: Option<&AssetHandle<Box<dyn Material>>>,
) -> RenderPipelineId
pub fn get_pipeline_for_material( &self, _material: Option<&AssetHandle<Box<dyn Material>>>, ) -> RenderPipelineId
Returns the render pipeline for the given material (or default).
Trait Implementations§
Source§impl Debug for LitForwardLane
impl Debug for LitForwardLane
Source§impl Default for LitForwardLane
impl Default for LitForwardLane
Source§impl Lane for LitForwardLane
impl Lane for LitForwardLane
Source§fn strategy_name(&self) -> &'static str
fn strategy_name(&self) -> &'static str
Source§fn estimate_cost(&self, ctx: &LaneContext) -> f32
fn estimate_cost(&self, ctx: &LaneContext) -> f32
Source§fn on_initialize(&self, ctx: &mut LaneContext) -> Result<(), LaneError>
fn on_initialize(&self, ctx: &mut LaneContext) -> Result<(), LaneError>
Source§fn execute(&self, ctx: &mut LaneContext) -> Result<(), LaneError>
fn execute(&self, ctx: &mut LaneContext) -> Result<(), LaneError>
Source§fn on_shutdown(&self, ctx: &mut LaneContext)
fn on_shutdown(&self, ctx: &mut LaneContext)
Source§fn as_any_mut(&mut self) -> &mut dyn Any
fn as_any_mut(&mut self) -> &mut dyn Any
Auto 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
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§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>
ReadEndian::read_from_little_endian().