From ad66f87ff691713d67984670804611ae332524a1 Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Fri, 15 May 2020 19:32:49 -0700 Subject: [PATCH] Entities wait for meshes to load --- crates/bevy_render/src/mesh.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/crates/bevy_render/src/mesh.rs b/crates/bevy_render/src/mesh.rs index 6bb3ed422c..41bd2356d9 100644 --- a/crates/bevy_render/src/mesh.rs +++ b/crates/bevy_render/src/mesh.rs @@ -3,7 +3,7 @@ use crate::{ state_descriptors::{IndexFormat, PrimitiveTopology}, VertexBufferDescriptor, VertexBufferDescriptors, VertexFormat, }, - render_resource::{BufferInfo, BufferUsage, RenderResourceAssignments}, + render_resource::{BufferInfo, BufferUsage, RenderResourceAssignments, EntitiesWaitingForAssets}, renderer::{RenderResourceContext, RenderResources}, shader::AsUniforms, Renderable, Vertex, @@ -333,6 +333,8 @@ fn setup_mesh_resource( render_resources: &dyn RenderResourceContext, render_resource_assignments: &mut RenderResourceAssignments, vertex_buffer_descriptor: &VertexBufferDescriptor, + entities_waiting_for_assets: &EntitiesWaitingForAssets, + entity: Entity, handle: Handle, meshes: &Assets, ) { @@ -372,6 +374,7 @@ fn setup_mesh_resource( (vertex_buffer, Some(index_buffer)) } else { // mesh doesn't exist. it probably hasn't loaded yet + entities_waiting_for_assets.add(entity); return; } }; @@ -387,16 +390,19 @@ pub fn mesh_resource_provider_system(resources: &mut Resources) -> Box() .read_resource::>() + .read_resource::() .with_query(<(Read>, Write)>::query()) .build( - move |_, world, (render_resource_context, meshes /* asset_batchers*/), query| { + move |_, world, (render_resource_context, meshes, entities_waiting_for_assets), query| { let render_resources = &*render_resource_context.context; // TODO: remove this once batches are pipeline specific and deprecate assigned_meshes draw target - for (handle, mut renderable) in query.iter_mut(world) { + for (entity, (handle, mut renderable)) in query.iter_entities_mut(world) { setup_mesh_resource( render_resources, &mut renderable.render_resource_assignments, &vertex_buffer_descriptor, + entities_waiting_for_assets, + entity, *handle, &meshes, );