Struct BinnedRenderPhase

Source
pub struct BinnedRenderPhase<BPI>
where BPI: BinnedPhaseItem,
{ pub multidrawable_meshes: IndexMap<BPI::BatchSetKey, IndexMap<BPI::BinKey, RenderBin>>, pub batchable_meshes: IndexMap<(BPI::BatchSetKey, BPI::BinKey), RenderBin>, pub unbatchable_meshes: IndexMap<(BPI::BatchSetKey, BPI::BinKey), UnbatchableBinnedEntities>, pub non_mesh_items: IndexMap<(BPI::BatchSetKey, BPI::BinKey), NonMeshEntities>, /* private fields */ }
Expand description

A collection of all rendering instructions, that will be executed by the GPU, for a single render phase for a single view.

Each view (camera, or shadow-casting light, etc.) can have one or multiple render phases. They are used to queue entities for rendering. Multiple phases might be required due to different sorting/batching behaviors (e.g. opaque: front to back, transparent: back to front) or because one phase depends on the rendered texture of the previous phase (e.g. for screen-space reflections). All PhaseItems are then rendered using a single TrackedRenderPass. The render pass might be reused for multiple phases to reduce GPU overhead.

This flavor of render phase is used for phases in which the ordering is less critical: for example, Opaque3d. It’s generally faster than the alternative SortedRenderPhase.

Fields§

§multidrawable_meshes: IndexMap<BPI::BatchSetKey, IndexMap<BPI::BinKey, RenderBin>>

The multidrawable bins.

Each batch set key maps to a batch set, which in this case is a set of meshes that can be drawn together in one multidraw call. Each batch set is subdivided into bins, each of which represents a particular mesh. Each bin contains the entity IDs of instances of that mesh.

So, for example, if there are two cubes and a sphere present in the scene, we would generally have one batch set containing two bins, assuming that the cubes and sphere meshes are allocated together and use the same pipeline. The first bin, corresponding to the cubes, will have two entities in it. The second bin, corresponding to the sphere, will have one entity in it.

§batchable_meshes: IndexMap<(BPI::BatchSetKey, BPI::BinKey), RenderBin>

The bins corresponding to batchable items that aren’t multidrawable.

For multidrawable entities, use multidrawable_meshes; for unbatchable entities, use unbatchable_values.

§unbatchable_meshes: IndexMap<(BPI::BatchSetKey, BPI::BinKey), UnbatchableBinnedEntities>

The unbatchable bins.

Each entity here is rendered in a separate drawcall.

§non_mesh_items: IndexMap<(BPI::BatchSetKey, BPI::BinKey), NonMeshEntities>

Items in the bin that aren’t meshes at all.

Bevy itself doesn’t place anything in this list, but plugins or your app can in order to execute custom drawing commands. Draw functions for each entity are simply called in order at rendering time.

See the custom_phase_item example for an example of how to use this.

Implementations§

Source§

impl<BPI> BinnedRenderPhase<BPI>
where BPI: BinnedPhaseItem,

Source

pub fn add( &mut self, batch_set_key: BPI::BatchSetKey, bin_key: BPI::BinKey, (entity, main_entity): (Entity, MainEntity), input_uniform_index: InputUniformIndex, phase_type: BinnedRenderPhaseType, change_tick: Tick, )

Bins a new entity.

The phase_type parameter specifies whether the entity is a preprocessable mesh and whether it can be binned with meshes of the same type.

Source

pub fn update_cache( &mut self, main_entity: MainEntity, cached_bin_key: Option<CachedBinKey<BPI>>, change_tick: Tick, )

Inserts an entity into the cache with the given change tick.

Source

pub fn render<'w>( &self, render_pass: &mut TrackedRenderPass<'w>, world: &'w World, view: Entity, ) -> Result<(), DrawError>

Encodes the GPU commands needed to render all entities in this phase.

Source

pub fn is_empty(&self) -> bool

Source

pub fn prepare_for_new_frame(&mut self)

Source

pub fn validate_cached_entity( &mut self, visible_entity: MainEntity, current_change_tick: Tick, ) -> bool

Checks to see whether the entity is in a bin and returns true if it’s both in a bin and up to date.

If this function returns true, we also add the entry to the valid_cached_entity_bin_keys list.

Source

pub fn sweep_old_entities(&mut self)

Removes all entities not marked as clean from the bins.

During queue_material_meshes, we process all visible entities and mark each as clean as we come to it. Then, in sweep_old_entities, we call this method, which removes entities that aren’t marked as clean from the bins.

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, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

Source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
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> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

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

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

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

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

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

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSend for T
where T: Any + Send,

Source§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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
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.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ConditionalSend for T
where T: Send,

Source§

impl<T> Settings for T
where T: 'static + Send + Sync,

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,