Skip to content

Commit f79d9b1

Browse files
committed
added render_phase method to TrackedRenderPass
1 parent 29e635a commit f79d9b1

File tree

6 files changed

+39
-30
lines changed

6 files changed

+39
-30
lines changed

crates/bevy_core_pipeline/src/core_2d/main_pass_2d_node.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,12 @@ impl Node for MainPass2dNode {
7777
true,
7878
)
7979
.begin(render_context);
80-
render_pass.set_camera_viewport(&camera);
8180

82-
transparent_phase.render(&mut render_pass, world, view_entity);
81+
render_pass.set_camera_viewport(&camera).render_phase(
82+
transparent_phase,
83+
world,
84+
view_entity,
85+
);
8386
}
8487

8588
// WebGL2 quirk: if ending with a render pass with a custom viewport, the viewport isn't

crates/bevy_core_pipeline/src/core_3d/main_pass_3d_node.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ impl Node for MainPass3dNode {
8585
)
8686
.depth_ops(camera_3d.depth_load_op.clone().into(), true)
8787
.begin(render_context);
88-
render_pass.set_camera_viewport(camera);
89-
90-
opaque_phase.render(&mut render_pass, world, view_entity);
88+
render_pass
89+
.set_camera_viewport(camera)
90+
.render_phase(opaque_phase, world, view_entity);
9191
}
9292

9393
if !alpha_mask_phase.items.is_empty() {
@@ -102,9 +102,11 @@ impl Node for MainPass3dNode {
102102
.color_ops(LoadOp::Load, true)
103103
.depth_ops(LoadOp::Load, true)
104104
.begin(render_context);
105-
render_pass.set_camera_viewport(camera);
106-
107-
alpha_mask_phase.render(&mut render_pass, world, view_entity);
105+
render_pass.set_camera_viewport(camera).render_phase(
106+
alpha_mask_phase,
107+
world,
108+
view_entity,
109+
);
108110
}
109111

110112
if !transparent_phase.items.is_empty() {
@@ -125,9 +127,11 @@ impl Node for MainPass3dNode {
125127
.color_ops(LoadOp::Load, true)
126128
.depth_ops(LoadOp::Load, true)
127129
.begin(render_context);
128-
render_pass.set_camera_viewport(camera);
129-
130-
transparent_phase.render(&mut render_pass, world, view_entity);
130+
render_pass.set_camera_viewport(camera).render_phase(
131+
transparent_phase,
132+
world,
133+
view_entity,
134+
);
131135
}
132136

133137
// WebGL2 quirk: if ending with a render pass with a custom viewport, the viewport isn't

crates/bevy_pbr/src/render/light.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1784,7 +1784,7 @@ impl Node for ShadowPassNode {
17841784
}),
17851785
});
17861786

1787-
shadow_phase.render(&mut render_pass, world, view_light_entity);
1787+
render_pass.render_phase(shadow_phase, world, view_entity);
17881788
}
17891789
}
17901790

crates/bevy_render/src/render_phase/draw_state.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::render_phase::{DrawFunctions, PhaseItem, RenderPhase};
12
use crate::{
23
camera::ExtractedCamera,
34
render_resource::{
@@ -7,6 +8,8 @@ use crate::{
78
renderer::{RenderContext, RenderDevice},
89
view::{ViewDepthTexture, ViewTarget},
910
};
11+
use bevy_ecs::entity::Entity;
12+
use bevy_ecs::prelude::World;
1013
use bevy_utils::{default, tracing::trace};
1114
use std::ops::Range;
1215
use wgpu::{
@@ -604,6 +607,22 @@ impl<'a> TrackedRenderPass<'a> {
604607
trace!("set blend constant: {:?}", color);
605608
self.pass.set_blend_constant(wgpu::Color::from(color));
606609
}
610+
611+
pub fn render_phase<P: PhaseItem>(
612+
&mut self,
613+
render_phase: &RenderPhase<P>,
614+
world: &'a World,
615+
view: Entity,
616+
) {
617+
let draw_functions = world.resource::<DrawFunctions<P>>();
618+
let mut draw_functions = draw_functions.write();
619+
draw_functions.prepare(world);
620+
621+
for item in &render_phase.items {
622+
let draw_function = draw_functions.get_mut(item.draw_function()).unwrap();
623+
draw_function.draw(world, self, view, item);
624+
}
625+
}
607626
}
608627

609628
pub struct TrackedRenderPassBuilder<'v> {

crates/bevy_render/src/render_phase/mod.rs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -72,23 +72,6 @@ impl<I: PhaseItem> RenderPhase<I> {
7272
pub fn sort(&mut self) {
7373
I::sort(&mut self.items);
7474
}
75-
76-
/// Renders all of its [`PhaseItem`]s using their corresponding draw functions.
77-
pub fn render<'w>(
78-
&self,
79-
render_pass: &mut TrackedRenderPass<'w>,
80-
world: &'w World,
81-
view: Entity,
82-
) {
83-
let draw_functions = world.resource::<DrawFunctions<I>>();
84-
let mut draw_functions = draw_functions.write();
85-
draw_functions.prepare(world);
86-
87-
for item in &self.items {
88-
let draw_function = draw_functions.get_mut(item.draw_function()).unwrap();
89-
draw_function.draw(world, render_pass, view, item);
90-
}
91-
}
9275
}
9376

9477
impl<I: BatchedPhaseItem> RenderPhase<I> {

crates/bevy_ui/src/render/render_pass.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ impl Node for UiPassNode {
8484
.color_ops(LoadOp::Load, true)
8585
.begin(render_context);
8686

87-
transparent_phase.render(&mut render_pass, world, view_entity);
87+
render_pass.render_phase(transparent_phase, world, view_entity);
8888

8989
Ok(())
9090
}

0 commit comments

Comments
 (0)