diff --git a/src/render/ui_pass.rs b/src/render/ui_pass.rs index 9a51af7adc3465762939386f02b0e2838ec81317..24129f9dfd50d3528e15f4af7c64aeaa245386ea 100644 --- a/src/render/ui_pass.rs +++ b/src/render/ui_pass.rs @@ -4,7 +4,7 @@ use bevy::ecs::prelude::*; use bevy::prelude::{Color, Image}; use bevy::render::render_asset::RenderAssets; use bevy::render::render_phase::{ - BatchedPhaseItem, CachedRenderPipelinePhaseItem, DrawFunctionId, PhaseItem, + BatchedPhaseItem, CachedRenderPipelinePhaseItem, DrawFunctionId, PhaseItem, DrawFunctions, }; use bevy::render::render_resource::{CachedRenderPipelineId, RenderPassColorAttachment}; use bevy::render::{ @@ -209,6 +209,10 @@ impl Node for MainPassUINode { if let Some(opacity_layer_manager) = opacity_layer_manager.camera_layers.get(&view_entity) { + let draw_functions = world.resource::<DrawFunctions<TransparentOpacityUI>>(); + let mut draw_functions = draw_functions.write(); + draw_functions.prepare(world); + for layer_id in 1..MAX_OPACITY_LAYERS { // Start new render pass. let gpu_images = world.get_resource::<RenderAssets<Image>>().unwrap(); @@ -229,8 +233,11 @@ impl Node for MainPassUINode { let mut tracked_pass = render_context.begin_tracked_render_pass(pass_descriptor); - - transparent_opacity_phase.render(&mut tracked_pass, world, view_entity); + + for item in transparent_opacity_phase.items.iter().filter(|i| i.opacity_layer == layer_id) { + let draw_function = draw_functions.get_mut(item.draw_function()).unwrap(); + draw_function.draw(world, &mut tracked_pass, view_entity, item); + } } } }