summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-08-06 15:57:29 +0200
committerHampusM <hampus@hampusmat.com>2026-08-06 15:57:29 +0200
commitaf2af06f7bc145e0661def88861f56ca92dd3d89 (patch)
tree41e3fa71e86f4b455a4f6a5d6fa7aaed9fe8a4d8
parentb7757ab410c99c35550327d896fcf5723aa9a09a (diff)
feat(engine): add shader binding texture kind enum
-rw-r--r--engine/src/rendering/backend/opengl.rs5
-rw-r--r--engine/src/rendering/shader/cursor.rs21
-rw-r--r--engine/src/rendering/shader/default.rs44
-rw-r--r--engine/src/ui/dear_imgui.rs6
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(