Skip to main content

ForwardPlusLane

Struct ForwardPlusLane 

Source
pub struct ForwardPlusLane {
    pub tile_config: ForwardPlusTileConfig,
    pub shader_complexity: ShaderComplexity,
    pub gpu_resources: Mutex<ForwardPlusGpuResources>,
    /* private fields */
}
Expand description

A rendering lane that implements Forward+ (Tiled Forward) rendering.

Forward+ divides the screen into tiles and uses a compute shader to determine which lights affect each tile before the main render pass. This significantly reduces per-fragment lighting cost for scenes with many lights.

§Configuration

The lane is configured via ForwardPlusTileConfig, which controls:

  • Tile size: 16x16 or 32x32 pixels (trade-off between culling granularity and overhead)
  • Max lights per tile: Memory budget for per-tile light lists
  • Depth pre-pass: Optional optimization for depth-bounded light culling

Fields§

§tile_config: ForwardPlusTileConfig

Tile configuration for light culling.

§shader_complexity: ShaderComplexity

Shader complexity for cost estimation.

§gpu_resources: Mutex<ForwardPlusGpuResources>

GPU resources for compute and render passes.

Implementations§

Source§

impl ForwardPlusLane

Source

pub fn new() -> Self

Creates a new ForwardPlusLane with default settings.

Default configuration:

  • Tile size: 16x16 pixels
  • Max lights per tile: 128
  • No depth pre-pass
Source

pub fn with_config(config: ForwardPlusTileConfig) -> Self

Creates a new ForwardPlusLane with the specified configuration.

§Arguments
  • config - The tile configuration for light culling
Source

pub fn with_complexity(complexity: ShaderComplexity) -> Self

Creates a new ForwardPlusLane with the specified shader complexity.

Source

pub fn set_screen_size(&mut self, width: u32, height: u32)

Updates the screen size used for tile calculations.

This should be called when the window is resized to recalculate tile counts and buffer sizes.

Source

pub fn tile_count(&self) -> (u32, u32)

Calculates the number of tiles in each dimension.

Source

pub fn total_tiles(&self) -> u32

Calculates the total number of tiles on screen.

Source

pub fn effective_light_count(&self, render_world: &RenderWorld) -> usize

Returns the effective number of lights in the scene.

This counts all light types (directional, point, spot) that will be processed by the light culling pass.

Source§

impl ForwardPlusLane

Source

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 Default for ForwardPlusLane

Source§

fn default() -> Self

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

impl Lane for ForwardPlusLane

Source§

fn strategy_name(&self) -> &'static str

Human-readable name identifying this lane’s strategy. Read more
Source§

fn lane_kind(&self) -> LaneKind

The kind of processing this lane performs. Read more
Source§

fn estimate_cost(&self, ctx: &LaneContext) -> f32

Estimated computational cost of running this lane. Read more
Source§

fn on_initialize(&self, ctx: &mut LaneContext) -> Result<(), LaneError>

Called once when the lane is registered or the underlying context resets. Read more
Source§

fn execute(&self, ctx: &mut LaneContext) -> Result<(), LaneError>

Main execution entry point — called each frame/tick by the owning agent. Read more
Source§

fn on_shutdown(&self, ctx: &mut LaneContext)

Called when the lane is being destroyed or the context is shutting down. Read more
Source§

fn as_any(&self) -> &dyn Any

Downcast to a concrete type for type-specific operations.
Source§

fn as_any_mut(&mut self) -> &mut dyn Any

Downcast to a concrete type (mutable) for type-specific operations.

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
§

impl<T> AppLifecycle for T
where T: ?Sized,

§

fn on_start(&mut self, ctx: &mut dyn AppContext)

Called once after the backend is up but before the first update. Apps install their theme / fonts here.
§

fn on_exit(&mut self)

Called once when the window is closing. Persist state here.
§

impl<T> AsAny for T
where T: Any,

§

fn as_any(&self) -> &(dyn Any + 'static)

Returns a reference to the inner value as &dyn Any.
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, 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.