diff options
| author | HampusM <hampus@hampusmat.com> | 2026-09-21 18:25:11 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-09-21 18:25:11 +0200 |
| commit | 552aa5fc3d318fba4e9db49ce5fa67fc8c4ea5f2 (patch) | |
| tree | 8c3f75cf9cb8313e21f84b06c5f132410a4f4502 /engine/src/rendering/backend/opengl.rs | |
| parent | e1e4df1f971950dd56d49a8b863d8888768633fa (diff) | |
fix(engine): fix borrow compile error in gl rendering backend
Diffstat (limited to 'engine/src/rendering/backend/opengl.rs')
| -rw-r--r-- | engine/src/rendering/backend/opengl.rs | 46 |
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!(); }; |
