@@ -4,7 +4,7 @@ use bevy::ecs::prelude::*;
44use bevy:: prelude:: { Color , Image } ;
55use bevy:: render:: render_asset:: RenderAssets ;
66use bevy:: render:: render_phase:: {
7- BatchedPhaseItem , CachedRenderPipelinePhaseItem , DrawFunctionId , PhaseItem ,
7+ BatchedPhaseItem , CachedRenderPipelinePhaseItem , DrawFunctionId , PhaseItem , DrawFunctions ,
88} ;
99use bevy:: render:: render_resource:: { CachedRenderPipelineId , RenderPassColorAttachment } ;
1010use bevy:: render:: {
@@ -209,6 +209,10 @@ impl Node for MainPassUINode {
209209 if let Some ( opacity_layer_manager) =
210210 opacity_layer_manager. camera_layers . get ( & view_entity)
211211 {
212+ let draw_functions = world. resource :: < DrawFunctions < TransparentOpacityUI > > ( ) ;
213+ let mut draw_functions = draw_functions. write ( ) ;
214+ draw_functions. prepare ( world) ;
215+
212216 for layer_id in 1 ..MAX_OPACITY_LAYERS {
213217 // Start new render pass.
214218 let gpu_images = world. get_resource :: < RenderAssets < Image > > ( ) . unwrap ( ) ;
@@ -229,8 +233,11 @@ impl Node for MainPassUINode {
229233
230234 let mut tracked_pass =
231235 render_context. begin_tracked_render_pass ( pass_descriptor) ;
232-
233- transparent_opacity_phase. render ( & mut tracked_pass, world, view_entity) ;
236+
237+ for item in transparent_opacity_phase. items . iter ( ) . filter ( |i| i. opacity_layer == layer_id) {
238+ let draw_function = draw_functions. get_mut ( item. draw_function ( ) ) . unwrap ( ) ;
239+ draw_function. draw ( world, & mut tracked_pass, view_entity, item) ;
240+ }
234241 }
235242 }
236243 }
0 commit comments