diff options
| author | HampusM <hampus@hampusmat.com> | 2026-08-06 15:45:47 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-08-06 15:45:47 +0200 |
| commit | b7757ab410c99c35550327d896fcf5723aa9a09a (patch) | |
| tree | f7e4de21312f680de557c4a16745450ea1c125af | |
| parent | 6471a831e3a929a6922297d4b6176eb43c20b4bd (diff) | |
refactor(engine): make SetShaderBinding rendering command take shader::Binding
| -rw-r--r-- | engine/src/rendering.rs | 8 | ||||
| -rw-r--r-- | engine/src/rendering/backend/opengl.rs | 10 | ||||
| -rw-r--r-- | engine/src/rendering/main_render_pass.rs | 30 | ||||
| -rw-r--r-- | engine/src/rendering/shader/cursor.rs | 5 | ||||
| -rw-r--r-- | engine/src/ui/dear_imgui.rs | 43 |
5 files changed, 42 insertions, 54 deletions
diff --git a/engine/src/rendering.rs b/engine/src/rendering.rs index ba66adb..dc3cb76 100644 --- a/engine/src/rendering.rs +++ b/engine/src/rendering.rs @@ -23,11 +23,7 @@ use crate::image::Image; use crate::mesh::Mesh; use crate::rendering::blending::Config as BlendingConfig; use crate::rendering::object::{Id as ObjectId, Store as ObjectStore}; -use crate::rendering::shader::cursor::{ - Binding as ShaderBinding, - BindingLocation as ShaderBindingLocation, - BindingValue as ShaderBindingValue, -}; +use crate::rendering::shader::cursor::Binding as ShaderBinding; use crate::rendering::shader::Program as ShaderProgram; use crate::texture::Texture; use crate::vector::Vec2; @@ -218,7 +214,7 @@ pub enum Command SwapBuffers(SurfaceId), CreateShaderProgram(ObjectId, ShaderProgram), ActivateShader(ObjectId), - SetShaderBinding(ShaderBindingLocation, ShaderBindingValue), + SetShaderBinding(ShaderBinding), CreateTexture(ObjectId, AssetOrValue<Texture>), UpdateTexture { diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs index f88fe38..be977f9 100644 --- a/engine/src/rendering/backend/opengl.rs +++ b/engine/src/rendering/backend/opengl.rs @@ -93,7 +93,10 @@ use crate::rendering::object::{ RawValue as ObjectRawValue, Store as ObjectStore, }; -use crate::rendering::shader::cursor::BindingValue as ShaderBindingValue; +use crate::rendering::shader::cursor::{ + Binding as ShaderBinding, + BindingValue as ShaderBindingValue, +}; use crate::rendering::shader::{ Context as ShaderContext, Error as ShaderError, @@ -608,7 +611,10 @@ fn handle_commands( activated_gl_shader_program = Some((shader_program_obj_id, gl_shader_program)); } - Command::SetShaderBinding(binding_location, binding_value) => { + Command::SetShaderBinding(ShaderBinding { + location: binding_location, + value: binding_value, + }) => { let Some((activated_gl_shader_program_obj_id, _)) = &activated_gl_shader_program else { diff --git a/engine/src/rendering/main_render_pass.rs b/engine/src/rendering/main_render_pass.rs index b318f1a..60bed03 100644 --- a/engine/src/rendering/main_render_pass.rs +++ b/engine/src/rendering/main_render_pass.rs @@ -9,7 +9,6 @@ use crate::ecs::Query; use crate::error; use crate::model::{MaterialSearchResult, Model}; use crate::rendering::object::{Id as ObjectId, Store as ObjectStore}; -use crate::rendering::shader::cursor::Binding as ShaderBinding; use crate::rendering::shader::default::ASSET_LABEL as DEFAULT_SHADER_ASSET_LABEL; use crate::rendering::shader::{ Context as ShaderContext, @@ -184,33 +183,22 @@ pub fn add_main_render_passes( } } - for ShaderBinding { - location: shader_binding_loc, - value: shader_binding_val, - } in &pending_shader_bindings.bindings - { - render_pass.commands.push(Command::SetShaderBinding( - shader_binding_loc.clone(), - shader_binding_val.clone(), - )); + for shader_binding in &pending_shader_bindings.bindings { + render_pass + .commands + .push(Command::SetShaderBinding(shader_binding.clone())); } - for ( - shader_binding_surface_id, - ShaderBinding { - location: shader_binding_loc, - value: shader_binding_val, - }, - ) in &pending_shader_bindings.surface_specific_bindings + for (shader_binding_surface_id, shader_binding) in + &pending_shader_bindings.surface_specific_bindings { if *shader_binding_surface_id != surface_spec.id { continue; } - render_pass.commands.push(Command::SetShaderBinding( - shader_binding_loc.clone(), - shader_binding_val.clone(), - )); + render_pass + .commands + .push(Command::SetShaderBinding(shader_binding.clone())); } if let Some(draw_flags) = draw_flags.as_deref().and_then(|draw_flags| { diff --git a/engine/src/rendering/shader/cursor.rs b/engine/src/rendering/shader/cursor.rs index 0f985a7..c54ffc9 100644 --- a/engine/src/rendering/shader/cursor.rs +++ b/engine/src/rendering/shader/cursor.rs @@ -122,11 +122,6 @@ impl<'a> Cursor<'a> value, }) } - - pub fn into_binding_location(self) -> BindingLocation - { - self.binding_location - } } /// Shader cursor location. diff --git a/engine/src/ui/dear_imgui.rs b/engine/src/ui/dear_imgui.rs index 4bf34c9..60a8da1 100644 --- a/engine/src/ui/dear_imgui.rs +++ b/engine/src/ui/dear_imgui.rs @@ -297,7 +297,7 @@ fn update( shader_asset.clone(), mesh_obj_id, &mut mesh, - ); + )?; context.ctx.new_frame(); @@ -473,7 +473,7 @@ fn add_drawing_render_pass( shader_asset: AssetHandle<ShaderModuleSource>, mesh_obj_id: RenderingObjectId, mesh: &mut Mesh, -) +) -> Result<(), crate::Error> { let render_pass = render_passes.passes.push_back_mut(RenderPass { commands: Vec::new(), @@ -641,22 +641,22 @@ fn add_drawing_render_pass( shader_cursor .field("Uniforms") .field("projection") - .into_binding_location(), - ShaderBindingValue::FMat4x4( - OrthographicProjection::builder() - .near(1.0) - .far(-1.0) - .viewport_origin(Vec2 { x: 0.0, y: 1.0 }) - .size(crate::projection::OrthographicSize::WindowSize) - .build() - .to_matrix_rh( - Dimens { - width: display_width, - height: -display_height, - }, - ProjectionClipVolume::NegOneToOne, - ), - ), + .binding( + OrthographicProjection::builder() + .near(1.0) + .far(-1.0) + .viewport_origin(Vec2 { x: 0.0, y: 1.0 }) + .size(crate::projection::OrthographicSize::WindowSize) + .build() + .to_matrix_rh( + Dimens { + width: display_width, + height: -display_height, + }, + ProjectionClipVolume::NegOneToOne, + ) + .into(), + )?, ), ]); @@ -719,8 +719,9 @@ fn add_drawing_render_pass( DrawPropertiesUpdateFlags::SCISSOR_BOX, ), RenderingCommand::SetShaderBinding( - shader_cursor.field("main_texture").into_binding_location(), - ShaderBindingValue::Texture(texture_object_id.clone()), + shader_cursor.field("main_texture").binding( + ShaderBindingValue::Texture(*texture_object_id), + )?, ), RenderingCommand::DrawMesh( mesh_obj_id, @@ -736,6 +737,8 @@ fn add_drawing_render_pass( } } } + + Ok(()) } fn get_texture_rect_image( |
