ForwardPlusLane

Struct ForwardPlusLane 

Source
pub struct ForwardPlusLane {
    pub tile_config: ForwardPlusTileConfig,
    pub shader_complexity: ShaderComplexity,
    pub gpu_resources: 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: 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.

Trait Implementations§

Source§

impl Clone for ForwardPlusLane

Source§

fn clone(&self) -> ForwardPlusLane

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
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 RenderLane for ForwardPlusLane

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.