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

Source§

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

Formats the value using the given formatter. Read more
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> 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> 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.