summaryrefslogtreecommitdiff
path: root/engine/src/renderer/main_render_pass.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/renderer/main_render_pass.rs')
-rw-r--r--engine/src/renderer/main_render_pass.rs38
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()