Entities wait for meshes to load
This commit is contained in:
		
							parent
							
								
									bf7f222318
								
							
						
					
					
						commit
						ad66f87ff6
					
				@ -3,7 +3,7 @@ use crate::{
 | 
				
			|||||||
        state_descriptors::{IndexFormat, PrimitiveTopology},
 | 
					        state_descriptors::{IndexFormat, PrimitiveTopology},
 | 
				
			||||||
        VertexBufferDescriptor, VertexBufferDescriptors, VertexFormat,
 | 
					        VertexBufferDescriptor, VertexBufferDescriptors, VertexFormat,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    render_resource::{BufferInfo, BufferUsage, RenderResourceAssignments},
 | 
					    render_resource::{BufferInfo, BufferUsage, RenderResourceAssignments, EntitiesWaitingForAssets},
 | 
				
			||||||
    renderer::{RenderResourceContext, RenderResources},
 | 
					    renderer::{RenderResourceContext, RenderResources},
 | 
				
			||||||
    shader::AsUniforms,
 | 
					    shader::AsUniforms,
 | 
				
			||||||
    Renderable, Vertex,
 | 
					    Renderable, Vertex,
 | 
				
			||||||
@ -333,6 +333,8 @@ fn setup_mesh_resource(
 | 
				
			|||||||
    render_resources: &dyn RenderResourceContext,
 | 
					    render_resources: &dyn RenderResourceContext,
 | 
				
			||||||
    render_resource_assignments: &mut RenderResourceAssignments,
 | 
					    render_resource_assignments: &mut RenderResourceAssignments,
 | 
				
			||||||
    vertex_buffer_descriptor: &VertexBufferDescriptor,
 | 
					    vertex_buffer_descriptor: &VertexBufferDescriptor,
 | 
				
			||||||
 | 
					    entities_waiting_for_assets: &EntitiesWaitingForAssets,
 | 
				
			||||||
 | 
					    entity: Entity,
 | 
				
			||||||
    handle: Handle<Mesh>,
 | 
					    handle: Handle<Mesh>,
 | 
				
			||||||
    meshes: &Assets<Mesh>,
 | 
					    meshes: &Assets<Mesh>,
 | 
				
			||||||
) {
 | 
					) {
 | 
				
			||||||
@ -372,6 +374,7 @@ fn setup_mesh_resource(
 | 
				
			|||||||
            (vertex_buffer, Some(index_buffer))
 | 
					            (vertex_buffer, Some(index_buffer))
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            // mesh doesn't exist. it probably hasn't loaded yet
 | 
					            // mesh doesn't exist. it probably hasn't loaded yet
 | 
				
			||||||
 | 
					            entities_waiting_for_assets.add(entity);
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@ -387,16 +390,19 @@ pub fn mesh_resource_provider_system(resources: &mut Resources) -> Box<dyn Sched
 | 
				
			|||||||
    SystemBuilder::new("mesh_resource_provider")
 | 
					    SystemBuilder::new("mesh_resource_provider")
 | 
				
			||||||
        .read_resource::<RenderResources>()
 | 
					        .read_resource::<RenderResources>()
 | 
				
			||||||
        .read_resource::<Assets<Mesh>>()
 | 
					        .read_resource::<Assets<Mesh>>()
 | 
				
			||||||
 | 
					        .read_resource::<EntitiesWaitingForAssets>()
 | 
				
			||||||
        .with_query(<(Read<Handle<Mesh>>, Write<Renderable>)>::query())
 | 
					        .with_query(<(Read<Handle<Mesh>>, Write<Renderable>)>::query())
 | 
				
			||||||
        .build(
 | 
					        .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;
 | 
					                let render_resources = &*render_resource_context.context;
 | 
				
			||||||
                // TODO: remove this once batches are pipeline specific and deprecate assigned_meshes draw target
 | 
					                // 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(
 | 
					                    setup_mesh_resource(
 | 
				
			||||||
                        render_resources,
 | 
					                        render_resources,
 | 
				
			||||||
                        &mut renderable.render_resource_assignments,
 | 
					                        &mut renderable.render_resource_assignments,
 | 
				
			||||||
                        &vertex_buffer_descriptor,
 | 
					                        &vertex_buffer_descriptor,
 | 
				
			||||||
 | 
					                        entities_waiting_for_assets,
 | 
				
			||||||
 | 
					                        entity,
 | 
				
			||||||
                        *handle,
 | 
					                        *handle,
 | 
				
			||||||
                        &meshes,
 | 
					                        &meshes,
 | 
				
			||||||
                    );
 | 
					                    );
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user