From 4f06675fa051e4b2f54960f76b75060c27ea8b7d Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 21 Mar 2026 17:54:55 +0100 Subject: refactor(engine): add dedicated mesh creation renderer command --- engine/src/renderer.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'engine/src/renderer.rs') 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, - }, + 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() -- cgit v1.2.3-18-g5258