From 5f93b02dc787bbda41ce9213d1a418ecea8c61a3 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sun, 26 Apr 2026 16:29:21 +0200 Subject: fix(engine): make shader bindings work for multiple windows --- engine/src/renderer/main_render_pass.rs | 38 ++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 12 deletions(-) (limited to 'engine/src/renderer') diff --git a/engine/src/renderer/main_render_pass.rs b/engine/src/renderer/main_render_pass.rs index e7964dd..7492379 100644 --- a/engine/src/renderer/main_render_pass.rs +++ b/engine/src/renderer/main_render_pass.rs @@ -84,10 +84,13 @@ pub fn add_main_render_passes( None => &default_shader_asset, }; - if pending_shader_bindings.as_ref().map_or_else( - || true, - |pending_shader_bindings| pending_shader_bindings.bindings.is_empty(), - ) { + let Some(pending_shader_bindings) = pending_shader_bindings.as_mut() else { + continue; + }; + + if pending_shader_bindings.bindings.is_empty() + && pending_shader_bindings.surface_specific_bindings.is_empty() + { continue; } @@ -167,15 +170,26 @@ pub fn add_main_render_passes( } } - if let Some(pending_shader_bindings) = &mut pending_shader_bindings { - for (shader_binding_loc, shader_binding_val) in - pending_shader_bindings.bindings.drain(..) - { - render_pass.commands.push(RendererCommand::SetShaderBinding( - shader_binding_loc, - shader_binding_val, - )); + for (shader_binding_loc, shader_binding_val) in + &pending_shader_bindings.bindings + { + render_pass.commands.push(RendererCommand::SetShaderBinding( + shader_binding_loc.clone(), + shader_binding_val.clone(), + )); + } + + for (shader_binding_surface_id, shader_binding_loc, shader_binding_val) in + &pending_shader_bindings.surface_specific_bindings + { + if *shader_binding_surface_id != surface_spec.id { + continue; } + + render_pass.commands.push(RendererCommand::SetShaderBinding( + shader_binding_loc.clone(), + shader_binding_val.clone(), + )); } if let Some(draw_flags) = draw_flags.as_deref() -- cgit v1.2.3-18-g5258