Skip to content

Commit 29e635a

Browse files
committed
added TrackedRenderPassBuilder
changed set_camera_viewport method to take &Camera instead of &Viewport
1 parent c56bbcb commit 29e635a

File tree

6 files changed

+179
-142
lines changed

6 files changed

+179
-142
lines changed

crates/bevy_core_pipeline/src/bloom/mod.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,7 @@ impl Node for BloomNode {
246246
&bind_groups.prefilter_bind_group,
247247
&[uniform_index.index()],
248248
);
249-
if let Some(viewport) = camera.viewport.as_ref() {
250-
prefilter_pass.set_camera_viewport(viewport);
251-
}
249+
prefilter_pass.set_camera_viewport(&camera);
252250
prefilter_pass.draw(0..3, 0..1);
253251
}
254252

@@ -270,9 +268,7 @@ impl Node for BloomNode {
270268
&bind_groups.downsampling_bind_groups[mip as usize - 1],
271269
&[uniform_index.index()],
272270
);
273-
if let Some(viewport) = camera.viewport.as_ref() {
274-
downsampling_pass.set_camera_viewport(viewport);
275-
}
271+
downsampling_pass.set_camera_viewport(&camera);
276272
downsampling_pass.draw(0..3, 0..1);
277273
}
278274

@@ -294,9 +290,7 @@ impl Node for BloomNode {
294290
&bind_groups.upsampling_bind_groups[mip as usize - 1],
295291
&[uniform_index.index()],
296292
);
297-
if let Some(viewport) = camera.viewport.as_ref() {
298-
upsampling_pass.set_camera_viewport(viewport);
299-
}
293+
upsampling_pass.set_camera_viewport(&camera);
300294
upsampling_pass.draw(0..3, 0..1);
301295
}
302296

@@ -318,9 +312,7 @@ impl Node for BloomNode {
318312
&bind_groups.upsampling_final_bind_group,
319313
&[uniform_index.index()],
320314
);
321-
if let Some(viewport) = camera.viewport.as_ref() {
322-
upsampling_final_pass.set_camera_viewport(viewport);
323-
}
315+
upsampling_final_pass.set_camera_viewport(&camera);
324316
upsampling_final_pass.draw(0..3, 0..1);
325317
}
326318

crates/bevy_core_pipeline/src/core_2d/main_pass_2d_node.rs

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use bevy_render::{
77
camera::ExtractedCamera,
88
render_graph::{Node, NodeRunError, RenderGraphContext, SlotInfo, SlotType},
99
render_phase::RenderPhase,
10-
render_resource::{LoadOp, Operations, RenderPassDescriptor},
10+
render_resource::LoadOp,
1111
renderer::RenderContext,
1212
view::{ExtractedView, ViewTarget},
1313
};
@@ -63,24 +63,21 @@ impl Node for MainPass2dNode {
6363
#[cfg(feature = "trace")]
6464
let _main_pass_2d = info_span!("main_pass_2d").entered();
6565

66-
let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor {
67-
label: Some("main_pass_2d"),
68-
color_attachments: &[Some(target.get_color_attachment(Operations {
69-
load: match camera_2d.clear_color {
66+
let mut render_pass = target
67+
.render_pass(None)
68+
.label("main_pass_2d")
69+
.color_ops(
70+
match camera_2d.clear_color {
7071
ClearColorConfig::Default => {
7172
LoadOp::Clear(world.resource::<ClearColor>().0.into())
7273
}
7374
ClearColorConfig::Custom(color) => LoadOp::Clear(color.into()),
7475
ClearColorConfig::None => LoadOp::Load,
7576
},
76-
store: true,
77-
}))],
78-
depth_stencil_attachment: None,
79-
});
80-
81-
if let Some(viewport) = camera.viewport.as_ref() {
82-
render_pass.set_camera_viewport(viewport);
83-
}
77+
true,
78+
)
79+
.begin(render_context);
80+
render_pass.set_camera_viewport(&camera);
8481

8582
transparent_phase.render(&mut render_pass, world, view_entity);
8683
}
@@ -91,18 +88,12 @@ impl Node for MainPass2dNode {
9188
if camera.viewport.is_some() {
9289
#[cfg(feature = "trace")]
9390
let _reset_viewport_pass_2d = info_span!("reset_viewport_pass_2d").entered();
94-
let pass_descriptor = RenderPassDescriptor {
95-
label: Some("reset_viewport_pass_2d"),
96-
color_attachments: &[Some(target.get_color_attachment(Operations {
97-
load: LoadOp::Load,
98-
store: true,
99-
}))],
100-
depth_stencil_attachment: None,
101-
};
10291

103-
render_context
104-
.command_encoder
105-
.begin_render_pass(&pass_descriptor);
92+
target
93+
.render_pass(None)
94+
.label("reset_view_port_pass_2d")
95+
.color_ops(LoadOp::Load, true)
96+
.begin(render_context);
10697
}
10798

10899
Ok(())

crates/bevy_core_pipeline/src/core_3d/main_pass_3d_node.rs

Lines changed: 36 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use bevy_render::{
77
camera::ExtractedCamera,
88
render_graph::{Node, NodeRunError, RenderGraphContext, SlotInfo, SlotType},
99
render_phase::RenderPhase,
10-
render_resource::{LoadOp, Operations, RenderPassDepthStencilAttachment, RenderPassDescriptor},
10+
render_resource::LoadOp,
1111
renderer::RenderContext,
1212
view::{ExtractedView, ViewDepthTexture, ViewTarget},
1313
};
@@ -70,35 +70,22 @@ impl Node for MainPass3dNode {
7070
#[cfg(feature = "trace")]
7171
let _main_opaque_pass_3d_span = info_span!("main_opaque_pass_3d").entered();
7272

73-
let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor {
74-
label: Some("main_opaque_pass_3d"),
75-
// NOTE: The opaque pass loads the color
76-
// buffer as well as writing to it.
77-
color_attachments: &[Some(target.get_color_attachment(Operations {
78-
load: match camera_3d.clear_color {
73+
let mut render_pass = target
74+
.render_pass(Some(depth))
75+
.label("main_opaque_pass_3d")
76+
.color_ops(
77+
match camera_3d.clear_color {
7978
ClearColorConfig::Default => {
8079
LoadOp::Clear(world.resource::<ClearColor>().0.into())
8180
}
8281
ClearColorConfig::Custom(color) => LoadOp::Clear(color.into()),
8382
ClearColorConfig::None => LoadOp::Load,
8483
},
85-
store: true,
86-
}))],
87-
depth_stencil_attachment: Some(RenderPassDepthStencilAttachment {
88-
view: &depth.view,
89-
// NOTE: The opaque main pass loads the depth buffer and possibly overwrites it
90-
depth_ops: Some(Operations {
91-
// NOTE: 0.0 is the far plane due to bevy's use of reverse-z projections.
92-
load: camera_3d.depth_load_op.clone().into(),
93-
store: true,
94-
}),
95-
stencil_ops: None,
96-
}),
97-
});
98-
99-
if let Some(viewport) = camera.viewport.as_ref() {
100-
render_pass.set_camera_viewport(viewport);
101-
}
84+
true,
85+
)
86+
.depth_ops(camera_3d.depth_load_op.clone().into(), true)
87+
.begin(render_context);
88+
render_pass.set_camera_viewport(camera);
10289

10390
opaque_phase.render(&mut render_pass, world, view_entity);
10491
}
@@ -109,27 +96,13 @@ impl Node for MainPass3dNode {
10996
#[cfg(feature = "trace")]
11097
let _main_alpha_mask_pass_3d_span = info_span!("main_alpha_mask_pass_3d").entered();
11198

112-
let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor {
113-
label: Some("main_alpha_mask_pass_3d"),
114-
// NOTE: The alpha_mask pass loads the color buffer as well as overwriting it where appropriate.
115-
color_attachments: &[Some(target.get_color_attachment(Operations {
116-
load: LoadOp::Load,
117-
store: true,
118-
}))],
119-
depth_stencil_attachment: Some(RenderPassDepthStencilAttachment {
120-
view: &depth.view,
121-
// NOTE: The alpha mask pass loads the depth buffer and possibly overwrites it
122-
depth_ops: Some(Operations {
123-
load: LoadOp::Load,
124-
store: true,
125-
}),
126-
stencil_ops: None,
127-
}),
128-
});
129-
130-
if let Some(viewport) = camera.viewport.as_ref() {
131-
render_pass.set_camera_viewport(viewport);
132-
}
99+
let mut render_pass = target
100+
.render_pass(Some(depth))
101+
.label("main_alpha_mask_pass_3d")
102+
.color_ops(LoadOp::Load, true)
103+
.depth_ops(LoadOp::Load, true)
104+
.begin(render_context);
105+
render_pass.set_camera_viewport(camera);
133106

134107
alpha_mask_phase.render(&mut render_pass, world, view_entity);
135108
}
@@ -140,32 +113,19 @@ impl Node for MainPass3dNode {
140113
#[cfg(feature = "trace")]
141114
let _main_transparent_pass_3d_span = info_span!("main_transparent_pass_3d").entered();
142115

143-
let mut render_pass = render_context.begin_tracked_render_pass(RenderPassDescriptor {
144-
label: Some("main_transparent_pass_3d"),
145-
// NOTE: The transparent pass loads the color buffer as well as overwriting it where appropriate.
146-
color_attachments: &[Some(target.get_color_attachment(Operations {
147-
load: LoadOp::Load,
148-
store: true,
149-
}))],
150-
depth_stencil_attachment: Some(RenderPassDepthStencilAttachment {
151-
view: &depth.view,
152-
// NOTE: For the transparent pass we load the depth buffer. There should be no
153-
// need to write to it, but store is set to `true` as a workaround for issue #3776,
154-
// https://github.com/bevyengine/bevy/issues/3776
155-
// so that wgpu does not clear the depth buffer.
156-
// As the opaque and alpha mask passes run first, opaque meshes can occlude
157-
// transparent ones.
158-
depth_ops: Some(Operations {
159-
load: LoadOp::Load,
160-
store: true,
161-
}),
162-
stencil_ops: None,
163-
}),
164-
});
165-
166-
if let Some(viewport) = camera.viewport.as_ref() {
167-
render_pass.set_camera_viewport(viewport);
168-
}
116+
// NOTE: For the transparent pass we load the depth buffer. There should be no
117+
// need to write to it, but store is set to `true` as a workaround for issue #3776,
118+
// https://github.com/bevyengine/bevy/issues/3776
119+
// so that wgpu does not clear the depth buffer.
120+
// As the opaque and alpha mask passes run first, opaque meshes can occlude
121+
// transparent ones.
122+
let mut render_pass = target
123+
.render_pass(Some(depth))
124+
.label("main_transparent_pass_3d")
125+
.color_ops(LoadOp::Load, true)
126+
.depth_ops(LoadOp::Load, true)
127+
.begin(render_context);
128+
render_pass.set_camera_viewport(camera);
169129

170130
transparent_phase.render(&mut render_pass, world, view_entity);
171131
}
@@ -176,18 +136,12 @@ impl Node for MainPass3dNode {
176136
if camera.viewport.is_some() {
177137
#[cfg(feature = "trace")]
178138
let _reset_viewport_pass_3d = info_span!("reset_viewport_pass_3d").entered();
179-
let pass_descriptor = RenderPassDescriptor {
180-
label: Some("reset_viewport_pass_3d"),
181-
color_attachments: &[Some(target.get_color_attachment(Operations {
182-
load: LoadOp::Load,
183-
store: true,
184-
}))],
185-
depth_stencil_attachment: None,
186-
};
187139

188-
render_context
189-
.command_encoder
190-
.begin_render_pass(&pass_descriptor);
140+
target
141+
.render_pass(None)
142+
.label("reset_viewport_pass_3d")
143+
.color_ops(LoadOp::Load, true)
144+
.begin(render_context);
191145
}
192146

193147
Ok(())

0 commit comments

Comments
 (0)