Module bevy::render::render_phase

Expand description

The modular rendering abstraction responsible for queuing, preparing, sorting and drawing entities as part of separate render phases.

In Bevy each view (camera, or shadow-casting light, etc.) has one or multiple RenderPhases (e.g. opaque, transparent, shadow, etc). 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).

To draw an entity, a corresponding PhaseItem has to be added to one or multiple of these render phases for each view that it is visible in. This must be done in the RenderSet::Queue. After that the render phase sorts them in the RenderSet::PhaseSort. Finally the items are rendered using a single TrackedRenderPass, during the RenderSet::Render.

Therefore each phase item is assigned a Draw function. These set up the state of the TrackedRenderPass (i.e. select the RenderPipeline, configure the BindGroups, etc.) and then issue a draw call, for the corresponding item.

The Draw function trait can either be implemented directly or such a function can be created by composing multiple RenderCommands.