summaryrefslogtreecommitdiff
path: root/engine/src
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-09-21 18:25:11 +0200
committerHampusM <hampus@hampusmat.com>2026-09-21 18:25:11 +0200
commit552aa5fc3d318fba4e9db49ce5fa67fc8c4ea5f2 (patch)
tree8c3f75cf9cb8313e21f84b06c5f132410a4f4502 /engine/src
parente1e4df1f971950dd56d49a8b863d8888768633fa (diff)
fix(engine): fix borrow compile error in gl rendering backend
Diffstat (limited to 'engine/src')
-rw-r--r--engine/src/rendering/backend/opengl.rs46
1 files changed, 25 insertions, 21 deletions
diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs
index 5b009ca..8b887b3 100644
--- a/engine/src/rendering/backend/opengl.rs
+++ b/engine/src/rendering/backend/opengl.rs
@@ -395,7 +395,7 @@ impl intmap::IntKey for ShaderBindingIndex
}
}
-#[derive(Debug)]
+#[derive(Debug, Clone)]
enum BackendShaderBinding
{
Uniform(GlBuffer<u8>),
@@ -1526,7 +1526,7 @@ fn set_shader_binding<'backend_resources>(
shader_object_id: ObjectId,
binding_location: &ShaderBindingLocation,
binding_value: ShaderBindingValue,
-) -> Option<&'backend_resources BackendShaderBinding>
+) -> Option<BackendShaderBinding>
{
if let ShaderBindingValue::Texture(texture_object_id, _) = &binding_value {
let gl_texture = match backend_resources.get_resource(
@@ -1562,7 +1562,8 @@ fn set_shader_binding<'backend_resources>(
return Some(
shader_bindings
.entry(ShaderBindingIndex(binding_location.binding_index))
- .set_or_insert_with(|| BackendShaderBinding::Texture(gl_texture.clone())),
+ .set_or_insert_with(|| BackendShaderBinding::Texture(gl_texture.clone()))
+ .clone(),
);
// if Some(shader_object_id)
@@ -1587,27 +1588,30 @@ fn set_shader_binding<'backend_resources>(
None => return None,
};
- let binding =
- match shader_bindings.get(ShaderBindingIndex(binding_location.binding_index)) {
- Some(binding @ BackendShaderBinding::Uniform(_)) => binding,
- Some(_) | None => {
- let uniform_buf = GlBuffer::<u8>::new(gl_context);
+ let binding = match shader_bindings
+ .get(ShaderBindingIndex(binding_location.binding_index))
+ .cloned()
+ {
+ Some(binding @ BackendShaderBinding::Uniform(_)) => binding,
+ Some(_) | None => {
+ let uniform_buf = GlBuffer::<u8>::new(gl_context);
- uniform_buf
- .init(
- gl_context,
- binding_location.binding_size,
- opengl_bindings::buffer::Usage::Dynamic,
- )
- .unwrap();
+ uniform_buf
+ .init(
+ gl_context,
+ binding_location.binding_size,
+ opengl_bindings::buffer::Usage::Dynamic,
+ )
+ .unwrap();
- shader_bindings
- .entry(ShaderBindingIndex(binding_location.binding_index))
- .set_or_insert_with(|| BackendShaderBinding::Uniform(uniform_buf))
- }
- };
+ shader_bindings
+ .entry(ShaderBindingIndex(binding_location.binding_index))
+ .set_or_insert_with(|| BackendShaderBinding::Uniform(uniform_buf))
+ .clone()
+ }
+ };
- let BackendShaderBinding::Uniform(binding_uniform_buf) = binding else {
+ let BackendShaderBinding::Uniform(binding_uniform_buf) = &binding else {
unreachable!();
};