summaryrefslogtreecommitdiff
path: root/engine/src
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-07-10 12:42:14 +0200
committerHampusM <hampus@hampusmat.com>2026-07-10 12:42:14 +0200
commit8345bc48223e21c200d7f0a53ec4c9482bceeedb (patch)
tree85178c7c6994e372c8e88d6737c95aedf60b0b9b /engine/src
parentf193d6222ba7572be733d53630f22191c0506c80 (diff)
feat(engine): make texture shader binding values specified by object ID
Diffstat (limited to 'engine/src')
-rw-r--r--engine/src/rendering/backend/opengl.rs31
-rw-r--r--engine/src/rendering/object.rs8
-rw-r--r--engine/src/shader/cursor.rs9
-rw-r--r--engine/src/shader/default.rs12
-rw-r--r--engine/src/ui/imgui.rs13
5 files changed, 45 insertions, 28 deletions
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<TargetWindow>, Without<SurfaceSpec>,)
+ (With<TargetWindow>, Without<SurfaceSpec>),
>,
windowing_context: Single<WindowingContext>,
graphics_props: Single<GraphicsProperties>,
@@ -301,7 +301,9 @@ fn init_window_graphics(
}
};
- let Ok(window_inner_size) = PhysicalSize::<NonZero<u32>>::try_convert_from(window.inner_size.clone()) else {
+ let Ok(window_inner_size) =
+ PhysicalSize::<NonZero<u32>>::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<AssetId> 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);
diff --git a/engine/src/shader/cursor.rs b/engine/src/shader/cursor.rs
index 0522858..8011012 100644
--- a/engine/src/shader/cursor.rs
+++ b/engine/src/shader/cursor.rs
@@ -1,8 +1,7 @@
-use crate::asset::Handle as AssetHandle;
-use crate::matrix::Matrix;
+use crate::data_types::matrix::Matrix;
+use crate::data_types::vector::Vec3;
+use crate::rendering::object::Id as RenderingObjectId;
use crate::shader::{TypeKind, TypeLayout, VariableLayout};
-use crate::texture::Texture;
-use crate::vector::Vec3;
/// Shader cursor
#[derive(Clone)]
@@ -116,7 +115,7 @@ pub enum BindingValue
Float(f32),
FVec3(Vec3<f32>),
FMat4x4(Matrix<f32, 4, 4>),
- Texture(AssetHandle<Texture>),
+ Texture(RenderingObjectId),
}
impl From<u32> for BindingValue
diff --git a/engine/src/shader/default.rs b/engine/src/shader/default.rs
index 27a38b6..c174e8b 100644
--- a/engine/src/shader/default.rs
+++ b/engine/src/shader/default.rs
@@ -282,7 +282,9 @@ pub fn enqueue_set_shader_bindings(
assets
.get_handle_to_loaded(TEXTURE_WHITE_1X1_ASSET_LABEL.clone())
.expect("Not possible")
- }),
+ })
+ .id()
+ .into(),
),
));
@@ -297,7 +299,9 @@ pub fn enqueue_set_shader_bindings(
assets
.get_handle_to_loaded(TEXTURE_WHITE_1X1_ASSET_LABEL.clone())
.expect("Not possible")
- }),
+ })
+ .id()
+ .into(),
),
));
@@ -312,7 +316,9 @@ pub fn enqueue_set_shader_bindings(
assets
.get_handle_to_loaded(TEXTURE_WHITE_1X1_ASSET_LABEL.clone())
.expect("Not possible")
- }),
+ })
+ .id()
+ .into(),
),
));
diff --git a/engine/src/ui/imgui.rs b/engine/src/ui/imgui.rs
index daf8494..5565455 100644
--- a/engine/src/ui/imgui.rs
+++ b/engine/src/ui/imgui.rs
@@ -186,12 +186,13 @@ fn handle_window_changed(
let window_size_logical = PhysicalSize {
width: window.inner_size.width as f64,
height: window.inner_size.height as f64,
- }.to_logical::<f64>(hidpi_factor);
+ }
+ .to_logical::<f64>(hidpi_factor);
- context
- .ctx
- .get_io_mut()
- .set_display_size([window_size_logical.width as f32, window_size_logical.height as f32]);
+ context.ctx.get_io_mut().set_display_size([
+ window_size_logical.width as f32,
+ window_size_logical.height as f32,
+ ]);
}
fn update(
@@ -580,7 +581,7 @@ fn add_drawing_render_pass(
),
RenderingCommand::SetShaderBinding(
shader_cursor.field("main_texture").into_binding_location(),
- ShaderBindingValue::Texture(font_texture_asset),
+ ShaderBindingValue::Texture(font_texture_asset.id().into()),
),
]);