summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-08-06 15:45:47 +0200
committerHampusM <hampus@hampusmat.com>2026-08-06 15:45:47 +0200
commitb7757ab410c99c35550327d896fcf5723aa9a09a (patch)
treef7e4de21312f680de557c4a16745450ea1c125af
parent6471a831e3a929a6922297d4b6176eb43c20b4bd (diff)
refactor(engine): make SetShaderBinding rendering command take shader::Binding
-rw-r--r--engine/src/rendering.rs8
-rw-r--r--engine/src/rendering/backend/opengl.rs10
-rw-r--r--engine/src/rendering/main_render_pass.rs30
-rw-r--r--engine/src/rendering/shader/cursor.rs5
-rw-r--r--engine/src/ui/dear_imgui.rs43
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(