diff options
Diffstat (limited to 'engine/src/renderer.rs')
| -rw-r--r-- | engine/src/renderer.rs | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/engine/src/renderer.rs b/engine/src/renderer.rs index 6c20102..8b37989 100644 --- a/engine/src/renderer.rs +++ b/engine/src/renderer.rs @@ -12,7 +12,7 @@ use ecs::query::term::Without; use ecs::sole::Single; use ecs::{Component, Query, declare_entity}; -use crate::asset::{Assets, Handle as AssetHandle, Label as AssetLabel}; +use crate::asset::{Assets, Label as AssetLabel}; use crate::builder; use crate::color::Color; use crate::data_types::dimens::Dimens; @@ -164,10 +164,8 @@ pub enum Command ActivateShader(ObjectId), SetShaderBinding(ShaderBindingLocation, ShaderBindingValue), CreateTexture(Texture), - DrawMesh - { - mesh_asset: AssetHandle<Mesh>, - }, + CreateMesh(ObjectId, Mesh), + DrawMesh(ObjectId), SetPolygonModeConfig(PolygonModeConfig), } @@ -332,6 +330,10 @@ pub fn enqueue_commands( continue; }; + let Some(mesh) = assets.get(mesh_asset) else { + continue; + }; + debug_assert!(model_spec.material_names.len() <= 1); let model_material_asset = match model_spec.find_first_material(&assets) { @@ -405,7 +407,14 @@ pub fn enqueue_commands( )); } - command_queue.push(Command::DrawMesh { mesh_asset: mesh_asset.clone() }); + if !object_store.contains_with_id(&ObjectId::Asset(mesh_asset.id())) { + command_queue.push(Command::CreateMesh( + ObjectId::Asset(mesh_asset.id()), + mesh.clone(), + )); + } + + command_queue.push(Command::DrawMesh(ObjectId::Asset(mesh_asset.id()))); if let Some(draw_flags) = draw_flags.as_deref() && draw_flags.polygon_mode_config != PolygonModeConfig::default() |
