@@ -7,7 +7,7 @@ use bevy_render::{
7
7
camera:: ExtractedCamera ,
8
8
render_graph:: { Node , NodeRunError , RenderGraphContext , SlotInfo , SlotType } ,
9
9
render_phase:: RenderPhase ,
10
- render_resource:: { LoadOp , Operations , RenderPassDepthStencilAttachment , RenderPassDescriptor } ,
10
+ render_resource:: LoadOp ,
11
11
renderer:: RenderContext ,
12
12
view:: { ExtractedView , ViewDepthTexture , ViewTarget } ,
13
13
} ;
@@ -70,35 +70,22 @@ impl Node for MainPass3dNode {
70
70
#[ cfg( feature = "trace" ) ]
71
71
let _main_opaque_pass_3d_span = info_span ! ( "main_opaque_pass_3d" ) . entered ( ) ;
72
72
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 {
79
78
ClearColorConfig :: Default => {
80
79
LoadOp :: Clear ( world. resource :: < ClearColor > ( ) . 0 . into ( ) )
81
80
}
82
81
ClearColorConfig :: Custom ( color) => LoadOp :: Clear ( color. into ( ) ) ,
83
82
ClearColorConfig :: None => LoadOp :: Load ,
84
83
} ,
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) ;
102
89
103
90
opaque_phase. render ( & mut render_pass, world, view_entity) ;
104
91
}
@@ -109,27 +96,13 @@ impl Node for MainPass3dNode {
109
96
#[ cfg( feature = "trace" ) ]
110
97
let _main_alpha_mask_pass_3d_span = info_span ! ( "main_alpha_mask_pass_3d" ) . entered ( ) ;
111
98
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) ;
133
106
134
107
alpha_mask_phase. render ( & mut render_pass, world, view_entity) ;
135
108
}
@@ -140,32 +113,19 @@ impl Node for MainPass3dNode {
140
113
#[ cfg( feature = "trace" ) ]
141
114
let _main_transparent_pass_3d_span = info_span ! ( "main_transparent_pass_3d" ) . entered ( ) ;
142
115
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) ;
169
129
170
130
transparent_phase. render ( & mut render_pass, world, view_entity) ;
171
131
}
@@ -176,18 +136,12 @@ impl Node for MainPass3dNode {
176
136
if camera. viewport . is_some ( ) {
177
137
#[ cfg( feature = "trace" ) ]
178
138
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
- } ;
187
139
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) ;
191
145
}
192
146
193
147
Ok ( ( ) )
0 commit comments