From 8345bc48223e21c200d7f0a53ec4c9482bceeedb Mon Sep 17 00:00:00 2001 From: HampusM Date: Fri, 10 Jul 2026 12:42:14 +0200 Subject: feat(engine): make texture shader binding values specified by object ID --- engine/src/rendering/backend/opengl.rs | 31 +++++++++++++++++-------------- engine/src/rendering/object.rs | 8 ++++++++ 2 files changed, 25 insertions(+), 14 deletions(-) (limited to 'engine/src/rendering') diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs index f8be5b4..fbb402c 100644 --- a/engine/src/rendering/backend/opengl.rs +++ b/engine/src/rendering/backend/opengl.rs @@ -101,9 +101,9 @@ use crate::rendering::{ GraphicsProperties, SurfaceId, SurfaceSpec, + TargetWindow, POST_RENDER_PHASE, RENDER_PHASE, - TargetWindow }; use crate::shader::cursor::BindingValue as ShaderBindingValue; use crate::shader::{ @@ -265,7 +265,7 @@ fn prepare_windows( fn init_window_graphics( window_query: Query< (&Window, &WindowGlConfig), - (With, Without,) + (With, Without), >, windowing_context: Single, graphics_props: Single, @@ -301,7 +301,9 @@ fn init_window_graphics( } }; - let Ok(window_inner_size) = PhysicalSize::>::try_convert_from(window.inner_size.clone()) else { + let Ok(window_inner_size) = + PhysicalSize::>::try_convert_from(window.inner_size.clone()) + else { tracing::error!( "Cannot create a surface for a window with a width/height of 0", ); @@ -353,8 +355,8 @@ fn init_window_graphics( &Vec2 { x: 0, y: 0 }.into(), &opengl_bindings::data_types::Dimens { width: window.inner_size.width, - height: window.inner_size.height - } + height: window.inner_size.height, + }, ) { tracing::error!("Failed to set viewport: {err}"); } @@ -474,8 +476,8 @@ fn handle_commands( &Vec2 { x: 0, y: 0 }.into(), &opengl_bindings::data_types::Dimens { width: surface.size.width, - height: surface.size.height - } + height: surface.size.height, + }, ) { tracing::error!("Failed to set viewport: {err}"); } @@ -497,8 +499,8 @@ fn handle_commands( &Vec2 { x: 0, y: 0 }.into(), &opengl_bindings::data_types::Dimens { width: surface.size.width, - height: surface.size.height - } + height: surface.size.height, + }, ) { tracing::error!("Failed to set viewport: {err}"); } @@ -588,14 +590,15 @@ fn handle_commands( continue; }; - if let ShaderBindingValue::Texture(texture_asset) = &binding_value { - let Some(texture_obj) = object_store - .get_texture_obj(&ObjectId::Asset(texture_asset.id())) + if let ShaderBindingValue::Texture(texture_object_id) = &binding_value { + let Some(texture_obj) = + object_store.get_texture_obj(texture_object_id) else { tracing::error!( - "Texture {:?} does not exist in rendering object store", - assets.get_label(texture_asset) + texture_object_id = ?texture_object_id, + "Texture does not exist in rendering object store", ); + continue; }; diff --git a/engine/src/rendering/object.rs b/engine/src/rendering/object.rs index ead20e6..3fcb461 100644 --- a/engine/src/rendering/object.rs +++ b/engine/src/rendering/object.rs @@ -34,6 +34,14 @@ impl Id } } +impl From for Id +{ + fn from(asset_id: AssetId) -> Self + { + Self::Asset(asset_id) + } +} + #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct SequentialId(u64); -- cgit v1.2.3-18-g5258