diff options
| author | HampusM <hampus@hampusmat.com> | 2026-08-06 15:57:29 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-08-06 15:57:29 +0200 |
| commit | af2af06f7bc145e0661def88861f56ca92dd3d89 (patch) | |
| tree | 41e3fa71e86f4b455a4f6a5d6fa7aaed9fe8a4d8 | |
| parent | b7757ab410c99c35550327d896fcf5723aa9a09a (diff) | |
feat(engine): add shader binding texture kind enum
| -rw-r--r-- | engine/src/rendering/backend/opengl.rs | 5 | ||||
| -rw-r--r-- | engine/src/rendering/shader/cursor.rs | 21 | ||||
| -rw-r--r-- | engine/src/rendering/shader/default.rs | 44 | ||||
| -rw-r--r-- | engine/src/ui/dear_imgui.rs | 6 |
4 files changed, 58 insertions, 18 deletions
diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs index be977f9..dc636ef 100644 --- a/engine/src/rendering/backend/opengl.rs +++ b/engine/src/rendering/backend/opengl.rs @@ -622,7 +622,8 @@ fn handle_commands( continue; }; - if let ShaderBindingValue::Texture(texture_object_id) = &binding_value { + if let ShaderBindingValue::Texture(texture_object_id, _) = &binding_value + { let Some(texture_obj) = object_store.get_texture_obj(texture_object_id) else { @@ -725,7 +726,7 @@ fn handle_commands( ShaderBindingValue::FMat4x4(ref value) => { value.items().as_bytes() } - ShaderBindingValue::Texture(_) => unreachable!(), + ShaderBindingValue::Texture(_, _) => unreachable!(), }, ) .unwrap(); diff --git a/engine/src/rendering/shader/cursor.rs b/engine/src/rendering/shader/cursor.rs index c54ffc9..169ad0b 100644 --- a/engine/src/rendering/shader/cursor.rs +++ b/engine/src/rendering/shader/cursor.rs @@ -201,7 +201,7 @@ pub enum BindingValue FVec3(Vec3<f32>), Color(Color<f32>), FMat4x4(Matrix<f32, 4, 4>), - Texture(RenderingObjectId), + Texture(RenderingObjectId, BindingTextureKind), } impl BindingValue @@ -272,9 +272,15 @@ impl BindingValue _, _, ) if ty.row_cnt() == Some(4) && ty.column_cnt() == Some(4) => Ok(()), - (Self::Texture(_), TypeKind::Resource, _, _, _, Some(res_shape)) - if (res_shape & ResourceShape::BASE) - .contains(ResourceShape::TEXTURE_2D) => + ( + Self::Texture(_, BindingTextureKind::Texture2D), + TypeKind::Resource, + _, + _, + _, + Some(res_shape), + ) if (res_shape & ResourceShape::BASE) + .contains(ResourceShape::TEXTURE_2D) => { Ok(()) } @@ -345,6 +351,13 @@ pub struct Binding pub value: BindingValue, } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[non_exhaustive] +pub enum BindingTextureKind +{ + Texture2D, +} + #[derive(Debug, thiserror::Error)] #[non_exhaustive] pub enum BindingError diff --git a/engine/src/rendering/shader/default.rs b/engine/src/rendering/shader/default.rs index 32cdc47..737916f 100644 --- a/engine/src/rendering/shader/default.rs +++ b/engine/src/rendering/shader/default.rs @@ -6,16 +6,21 @@ use crate::camera::{Active as ActiveCamera, Camera}; use crate::data_types::dimens::Dimens; use crate::draw_flags::NoDraw; use crate::ecs::actions::Actions; -use crate::ecs::query::term::{Traverse, TraverseUp, With, Without}; use crate::ecs::pair::ChildOf; +use crate::ecs::query::term::{Traverse, TraverseUp, With, Without}; use crate::ecs::sole::Single; use crate::ecs::Query; -use crate::lighting::{DirectionalLight, Environmental as EnvironmentalLighting, PointLight}; +use crate::lighting::{ + DirectionalLight, + Environmental as EnvironmentalLighting, + PointLight, +}; use crate::material::{Flags as MaterialFlags, Material}; use crate::matrix::Matrix; use crate::model::{MaterialSearchResult, Model}; use crate::projection::{ClipVolume as ProjectionClipVolume, Projection}; use crate::rendering::shader::cursor::{ + BindingTextureKind as ShaderBindingTextureKind, BindingValue as ShaderBindingValue, Cursor as ShaderCursor, }; @@ -64,17 +69,17 @@ pub fn enqueue_set_shader_bindings( &Camera, &WorldPosition, &ActiveCamera, - Traverse<(With<Scene>, With<ActiveScene>), TraverseUp, ChildOf> + Traverse<(With<Scene>, With<ActiveScene>), TraverseUp, ChildOf>, )>, window_query: Query<(&Window, &SurfaceSpec, With<RenderingTargetWindow>)>, point_light_query: Query<( &PointLight, &WorldPosition, - Traverse<(With<Scene>, With<ActiveScene>), TraverseUp, ChildOf> + Traverse<(With<Scene>, With<ActiveScene>), TraverseUp, ChildOf>, )>, directional_light_query: Query<( &DirectionalLight, - Traverse<(With<Scene>, With<ActiveScene>), TraverseUp, ChildOf> + Traverse<(With<Scene>, With<ActiveScene>), TraverseUp, ChildOf>, )>, assets: Single<Assets>, shader_context: Single<ShaderContext>, @@ -95,7 +100,15 @@ pub fn enqueue_set_shader_bindings( for ( entity_id, - (model, environmental_lighting, material_flags, world_pos, scale, shader, mut pending_shader_bindings), + ( + model, + environmental_lighting, + material_flags, + world_pos, + scale, + shader, + mut pending_shader_bindings, + ), ) in renderable_query.iter_with_euids() { let shader_asset = match &shader { @@ -173,7 +186,7 @@ pub fn enqueue_set_shader_bindings( let env_lighting = match &environmental_lighting { Some(env_lighting) => &env_lighting, - None => &EnvironmentalLighting::default() + None => &EnvironmentalLighting::default(), }; let model_3d_shader_cursor = shader_cursor.field("Uniforms").field("model_3d"); @@ -189,9 +202,7 @@ pub fn enqueue_set_shader_bindings( model_3d_shader_cursor .field("model_inverted") .binding(inverted_model_matrix.into())?, - model_3d_shader_cursor - .field("view") - .binding(view.into())?, + model_3d_shader_cursor.field("view").binding(view.into())?, lighting_shader_cursor .field("view_pos") .binding(camera_world_pos.position.into())?, @@ -319,6 +330,7 @@ pub fn enqueue_set_shader_bindings( }) .id() .into(), + ShaderBindingTextureKind::Texture2D, ))?, ); @@ -339,6 +351,7 @@ pub fn enqueue_set_shader_bindings( }) .id() .into(), + ShaderBindingTextureKind::Texture2D, ))?, ); @@ -359,6 +372,7 @@ pub fn enqueue_set_shader_bindings( }) .id() .into(), + ShaderBindingTextureKind::Texture2D, ))?, ); @@ -413,7 +427,15 @@ fn create_projection_matrix( type RenderableEntity<'a> = ( &'a Model, - Traverse<(Option<&'a EnvironmentalLighting>, With<Scene>, With<ActiveScene>), TraverseUp, ChildOf>, + Traverse< + ( + Option<&'a EnvironmentalLighting>, + With<Scene>, + With<ActiveScene>, + ), + TraverseUp, + ChildOf, + >, Option<&'a MaterialFlags>, Option<&'a WorldPosition>, Option<&'a Scale>, diff --git a/engine/src/ui/dear_imgui.rs b/engine/src/ui/dear_imgui.rs index 60a8da1..b9775ea 100644 --- a/engine/src/ui/dear_imgui.rs +++ b/engine/src/ui/dear_imgui.rs @@ -51,6 +51,7 @@ use crate::rendering::blending::{ }; use crate::rendering::object::Id as RenderingObjectId; use crate::rendering::shader::cursor::{ + BindingTextureKind as ShaderBindingTextureKind, BindingValue as ShaderBindingValue, Cursor as ShaderCursor, }; @@ -720,7 +721,10 @@ fn add_drawing_render_pass( ), RenderingCommand::SetShaderBinding( shader_cursor.field("main_texture").binding( - ShaderBindingValue::Texture(*texture_object_id), + ShaderBindingValue::Texture( + *texture_object_id, + ShaderBindingTextureKind::Texture2D, + ), )?, ), RenderingCommand::DrawMesh( |
