LitForwardLane

Struct LitForwardLane 

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

The shader complexity level to use for cost estimation.

§max_directional_lights: u32

Maximum number of directional lights supported per pass.

§max_point_lights: u32

Maximum number of point lights supported per pass.

§max_spot_lights: u32

Maximum number of spot lights supported per pass.

Implementations§

Source§

impl LitForwardLane

Source

pub fn new() -> Self

Creates a new LitForwardLane with default settings.

Source

pub fn with_complexity(complexity: ShaderComplexity) -> Self

Creates a new LitForwardLane with the specified shader complexity.

Source

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

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for LitForwardLane

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl RenderLane for LitForwardLane

Source§

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

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

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

Estimates the GPU cost of rendering the given RenderWorld with this strategy. Read more

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

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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<F, T> IntoSample<T> for F
where T: FromSample<F>,

§

fn into_sample(self) -> T

§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

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().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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.