
This is a squash-and-rebase of @Ku95's documentation of the new renderer onto the latest `pipelined-rendering` branch. Original PR is #2884. Co-authored-by: dataphract <dataphract@gmail.com> Co-authored-by: Carter Anderson <mcanders1@gmail.com>
39 lines
938 B
Rust
39 lines
938 B
Rust
mod draw;
|
|
mod draw_state;
|
|
|
|
pub use draw::*;
|
|
pub use draw_state::*;
|
|
|
|
use bevy_ecs::prelude::Query;
|
|
|
|
/// A resource to collect and sort draw requests for specific [`PhaseItems`](PhaseItem).
|
|
pub struct RenderPhase<I: PhaseItem> {
|
|
pub items: Vec<I>,
|
|
}
|
|
|
|
impl<I: PhaseItem> Default for RenderPhase<I> {
|
|
fn default() -> Self {
|
|
Self { items: Vec::new() }
|
|
}
|
|
}
|
|
|
|
impl<I: PhaseItem> RenderPhase<I> {
|
|
/// Adds a [`PhaseItem`] to this render phase.
|
|
#[inline]
|
|
pub fn add(&mut self, item: I) {
|
|
self.items.push(item);
|
|
}
|
|
|
|
/// Sorts all of its [`PhaseItems`](PhaseItem).
|
|
pub fn sort(&mut self) {
|
|
self.items.sort_by_key(|d| d.sort_key());
|
|
}
|
|
}
|
|
|
|
/// This system sorts all [`RenderPhases`](RenderPhase) for the [`PhaseItem`] type.
|
|
pub fn sort_phase_system<I: PhaseItem>(mut render_phases: Query<&mut RenderPhase<I>>) {
|
|
for mut phase in render_phases.iter_mut() {
|
|
phase.sort();
|
|
}
|
|
}
|