diff options
| author | HampusM <hampus@hampusmat.com> | 2026-04-26 16:29:21 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-04-26 16:34:13 +0200 |
| commit | 5f93b02dc787bbda41ce9213d1a418ecea8c61a3 (patch) | |
| tree | 776be3c6f0596b55aafd983ec04805dd2002cf6f /engine/src/renderer/main_render_pass.rs | |
| parent | 95bd0f41411fb56575dc7339bb36a460ed01a6f2 (diff) | |
fix(engine): make shader bindings work for multiple windows
Diffstat (limited to 'engine/src/renderer/main_render_pass.rs')
| -rw-r--r-- | engine/src/renderer/main_render_pass.rs | 38 |
1 files changed, 26 insertions, 12 deletions
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() |
