summaryrefslogtreecommitdiff
path: root/engine/src/renderer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/renderer.rs')
-rw-r--r--engine/src/renderer.rs21
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()