diff options
Diffstat (limited to 'engine/src')
| -rw-r--r-- | engine/src/rendering.rs | 14 | ||||
| -rw-r--r-- | engine/src/rendering/backend/opengl.rs | 28 | ||||
| -rw-r--r-- | engine/src/rendering/main_render_pass.rs | 3 | ||||
| -rw-r--r-- | engine/src/ui/imgui.rs | 3 |
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, }, ], |
