summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/src/rendering.rs14
-rw-r--r--engine/src/rendering/backend/opengl.rs28
-rw-r--r--engine/src/rendering/main_render_pass.rs3
-rw-r--r--engine/src/ui/imgui.rs3
4 files changed, 19 insertions, 29 deletions
diff --git a/engine/src/rendering.rs b/engine/src/rendering.rs
index 46e47e9..9c0e9dd 100644
--- a/engine/src/rendering.rs
+++ b/engine/src/rendering.rs
@@ -241,12 +241,7 @@ pub enum Command
CreateMesh
{
obj_id: ObjectId,
-
- /// Optional mesh data. Must be included if `obj_id` is [`ObjectId::Sequential`].
- /// If `obj_id` is [`ObjectId::Asset`], this mesh data will be used instead of
- /// the mesh data stored in the asset.
- mesh: Option<Mesh>,
-
+ mesh: AssetOrValue<Mesh>,
usage: MeshUsage,
},
UpdateMesh
@@ -260,6 +255,13 @@ pub enum Command
UpdateDrawProperties(DrawProperties, DrawPropertiesUpdateFlags),
}
+#[derive(Debug)]
+pub enum AssetOrValue<T: 'static>
+{
+ Asset(AssetHandle<T>),
+ Value(T),
+}
+
builder! {
#[builder(name = DrawMeshOptionsBuilder, derives = (Debug, Default, Clone))]
#[derive(Debug, Default, Clone)]
diff --git a/engine/src/rendering/backend/opengl.rs b/engine/src/rendering/backend/opengl.rs
index c545ccc..b5ebd81 100644
--- a/engine/src/rendering/backend/opengl.rs
+++ b/engine/src/rendering/backend/opengl.rs
@@ -100,6 +100,7 @@ use crate::rendering::shader::{
Stage as ShaderStage,
};
use crate::rendering::{
+ AssetOrValue,
BufferClearMask,
Command,
CommandQueue,
@@ -742,34 +743,19 @@ fn handle_commands(
let key = *next_graphics_ctx_object_key;
- let mesh = match mesh_object_id {
- ObjectId::Asset(mesh_asset_id) => match mesh.as_ref() {
- Some(mesh) => mesh,
- None => {
- let Some(mesh) =
- assets.get(&AssetHandle::from_id(mesh_asset_id))
- else {
- tracing::error!(
- asset_id=?mesh_asset_id,
- "Mesh asset does not exist"
- );
- continue;
- };
-
- mesh
- }
- },
- ObjectId::Sequential(_) => {
- let Some(mesh) = mesh.as_ref() else {
+ let mesh = match &mesh {
+ AssetOrValue::Asset(mesh_asset) => {
+ let Some(mesh) = assets.get(&mesh_asset) else {
tracing::error!(
- object_id=?mesh_object_id,
- "Object ID is sequential but no mesh data is given"
+ asset_id=?mesh_asset.id(),
+ "Mesh asset does not exist"
);
continue;
};
mesh
}
+ AssetOrValue::Value(mesh) => mesh,
};
let graphics_mesh = match GraphicsMesh::new(
diff --git a/engine/src/rendering/main_render_pass.rs b/engine/src/rendering/main_render_pass.rs
index 02e0ca0..d5e9163 100644
--- a/engine/src/rendering/main_render_pass.rs
+++ b/engine/src/rendering/main_render_pass.rs
@@ -13,6 +13,7 @@ use crate::rendering::shader::{
Shader,
};
use crate::rendering::{
+ AssetOrValue,
BufferClearMask,
Command,
DrawMeshOptions,
@@ -219,7 +220,7 @@ pub fn add_main_render_passes(
render_pass.commands.push(Command::CreateMesh {
obj_id: ObjectId::Asset(mesh_asset.id()),
- mesh: None,
+ mesh: AssetOrValue::Asset(mesh_asset.clone()),
usage: MeshUsage::Static,
});
}
diff --git a/engine/src/ui/imgui.rs b/engine/src/ui/imgui.rs
index 1cb3b98..13896ff 100644
--- a/engine/src/ui/imgui.rs
+++ b/engine/src/ui/imgui.rs
@@ -59,6 +59,7 @@ use crate::rendering::shader::{
ModuleSource as ShaderModuleSource,
};
use crate::rendering::{
+ AssetOrValue,
Command as RenderingCommand,
DrawMeshOptions,
DrawProperties,
@@ -481,7 +482,7 @@ fn initialize_context(
RenderingCommand::ActivateShader(RenderingObjectId::Asset(shader_asset.id())),
RenderingCommand::CreateMesh {
obj_id: mesh_obj_id,
- mesh: Some(mesh.clone()),
+ mesh: AssetOrValue::Value(mesh.clone()),
usage: MeshUsage::Stream,
},
],