start making ResourceProvider::update world read-only
This commit is contained in:
		
							parent
							
								
									78d1958090
								
							
						
					
					
						commit
						08abef1c75
					
				| @ -151,6 +151,7 @@ impl AppBuilder { | |||||||
|             .add_stage(stage::FIRST) |             .add_stage(stage::FIRST) | ||||||
|             .add_stage(stage::EVENT_UPDATE) |             .add_stage(stage::EVENT_UPDATE) | ||||||
|             .add_stage(stage::UPDATE) |             .add_stage(stage::UPDATE) | ||||||
|  |             .add_stage(stage::POST_UPDATE) | ||||||
|             .add_stage(stage::LAST) |             .add_stage(stage::LAST) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -162,6 +163,14 @@ impl AppBuilder { | |||||||
|         self.add_system(system) |         self.add_system(system) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub fn build_system_on_stage<F>(&mut self, stage_name: &str, build: F) -> &mut Self | ||||||
|  |     where | ||||||
|  |         F: Fn(&mut Resources) -> Box<dyn Schedulable>, | ||||||
|  |     { | ||||||
|  |         let system = build(self.resources_mut()); | ||||||
|  |         self.add_system_to_stage(stage_name, system) | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn add_system_to_stage( |     pub fn add_system_to_stage( | ||||||
|         &mut self, |         &mut self, | ||||||
|         stage_name: &str, |         stage_name: &str, | ||||||
|  | |||||||
| @ -1,4 +1,7 @@ | |||||||
|  | use bevy_app::{Events, GetEventReader}; | ||||||
|  | use bevy_window::WindowResized; | ||||||
| use glam::Mat4; | use glam::Mat4; | ||||||
|  | use legion::prelude::*; | ||||||
| 
 | 
 | ||||||
| #[derive(Default)] | #[derive(Default)] | ||||||
| pub struct ActiveCamera; | pub struct ActiveCamera; | ||||||
| @ -115,4 +118,27 @@ impl Camera { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | pub fn camera_update_system(resources: &mut Resources) -> Box<dyn Schedulable> { | ||||||
|  |     let mut window_resized_event_reader = resources.get_event_reader::<WindowResized>(); | ||||||
|  |     SystemBuilder::new("camera_update") | ||||||
|  |         .read_resource::<Events<WindowResized>>() | ||||||
|  |         .with_query(<Write<Camera>>::query()) | ||||||
|  |         .build(move |_, world, window_resized_events, query| { | ||||||
|  |             // TODO: refactor this to "window_resized_events.latest()"
 | ||||||
|  |             let primary_window_resized_event = window_resized_events | ||||||
|  |                 .iter(&mut window_resized_event_reader) | ||||||
|  |                 .rev() | ||||||
|  |                 .filter(|event| event.is_primary) | ||||||
|  |                 .next(); | ||||||
|  |             if let Some(primary_window_resized_event) = primary_window_resized_event { | ||||||
|  |                 for mut camera in query.iter_mut(world) { | ||||||
|  |                     camera.update( | ||||||
|  |                         primary_window_resized_event.width, | ||||||
|  |                         primary_window_resized_event.height, | ||||||
|  |                     ); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         }) | ||||||
|  | } | ||||||
|  | |||||||
| @ -83,8 +83,6 @@ impl RenderPlugin { | |||||||
|                 resources.get_event_reader::<WindowResized>(), |                 resources.get_event_reader::<WindowResized>(), | ||||||
|             )) |             )) | ||||||
|             .add_resource_provider(LightResourceProvider::new(10)) |             .add_resource_provider(LightResourceProvider::new(10)) | ||||||
|             // TODO: move me to ui crate
 |  | ||||||
|             // .add_resource_provider(UiResourceProvider::new())
 |  | ||||||
|             .add_resource_provider(MeshResourceProvider::new()) |             .add_resource_provider(MeshResourceProvider::new()) | ||||||
|             .add_resource_provider(UniformResourceProvider::<StandardMaterial>::new(true)) |             .add_resource_provider(UniformResourceProvider::<StandardMaterial>::new(true)) | ||||||
|             .add_resource_provider(UniformResourceProvider::<LocalToWorld>::new(true)) |             .add_resource_provider(UniformResourceProvider::<LocalToWorld>::new(true)) | ||||||
| @ -98,7 +96,9 @@ impl AppPlugin for RenderPlugin { | |||||||
|         let mut asset_batchers = AssetBatchers::default(); |         let mut asset_batchers = AssetBatchers::default(); | ||||||
|         asset_batchers.batch_types2::<Mesh, StandardMaterial>(); |         asset_batchers.batch_types2::<Mesh, StandardMaterial>(); | ||||||
|         app.add_system(build_entity_render_resource_assignments_system()) |         app.add_system(build_entity_render_resource_assignments_system()) | ||||||
|             .add_stage_after(stage::UPDATE, RENDER_STAGE) |             .build_system_on_stage(stage::POST_UPDATE, camera::camera_update_system) | ||||||
|  |             .add_system_to_stage(stage::POST_UPDATE, mesh::mesh_batcher_system()) | ||||||
|  |             .add_stage_after(stage::POST_UPDATE, RENDER_STAGE) | ||||||
|             .add_resource(RenderGraph::default()) |             .add_resource(RenderGraph::default()) | ||||||
|             .add_resource(AssetStorage::<Mesh>::new()) |             .add_resource(AssetStorage::<Mesh>::new()) | ||||||
|             .add_resource(AssetStorage::<Texture>::new()) |             .add_resource(AssetStorage::<Texture>::new()) | ||||||
|  | |||||||
| @ -1,6 +1,7 @@ | |||||||
| use crate::Vertex; | use crate::{render_resource::AssetBatchers, Vertex, Renderable}; | ||||||
| use bevy_asset::Asset; | use bevy_asset::{Handle, Asset}; | ||||||
| use glam::*; | use glam::*; | ||||||
|  | use legion::prelude::*; | ||||||
| 
 | 
 | ||||||
| pub enum MeshType { | pub enum MeshType { | ||||||
|     Cube, |     Cube, | ||||||
| @ -118,3 +119,15 @@ pub fn create_cube() -> (Vec<Vertex>, Vec<u16>) { | |||||||
| pub fn create_plane(size: f32) -> (Vec<Vertex>, Vec<u16>) { | pub fn create_plane(size: f32) -> (Vec<Vertex>, Vec<u16>) { | ||||||
|     create_quad(vec2(size, size)) |     create_quad(vec2(size, size)) | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | pub fn mesh_batcher_system() -> Box<dyn Schedulable> { | ||||||
|  |     SystemBuilder::new("mesh_batcher") | ||||||
|  |         .write_resource::<AssetBatchers>() | ||||||
|  |         .with_query(<(Read<Handle<Mesh>>, Read<Renderable>)>::query().filter(changed::<Handle<Mesh>>())) | ||||||
|  |         .build(|_, world, asset_batchers, query| { | ||||||
|  |             for (entity, (mesh_handle, _renderable)) in query.iter_entities(world) { | ||||||
|  |                 asset_batchers.set_entity_handle(entity, *mesh_handle); | ||||||
|  |             } | ||||||
|  |         }) | ||||||
|  | } | ||||||
| @ -9,8 +9,12 @@ pub trait ResourceProvider { | |||||||
|         _resources: &Resources, |         _resources: &Resources, | ||||||
|     ) { |     ) { | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     // TODO: make this read-only
 | ||||||
|     fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &mut World, _resources: &Resources) { |     fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &mut World, _resources: &Resources) { | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     // TODO: remove this
 | ||||||
|     fn finish_update( |     fn finish_update( | ||||||
|         &mut self, |         &mut self, | ||||||
|         _render_context: &mut dyn RenderContext, |         _render_context: &mut dyn RenderContext, | ||||||
| @ -18,4 +22,10 @@ pub trait ResourceProvider { | |||||||
|         _resources: &Resources, |         _resources: &Resources, | ||||||
|     ) { |     ) { | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     /// Runs after resources have been created on the gpu. In general systems here write gpu-related resources back to entities in this step  
 | ||||||
|  |     fn post_update(&mut self, _render_context: &dyn RenderContext, _world: &mut World, _resources: &Resources) { | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -27,31 +27,11 @@ impl Camera2dResourceProvider { | |||||||
|             window_resized_event_reader, |             window_resized_event_reader, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| impl ResourceProvider for Camera2dResourceProvider { |     fn update_read_only( | ||||||
|     fn initialize( |  | ||||||
|         &mut self, |         &mut self, | ||||||
|         render_context: &mut dyn RenderContext, |         render_context: &mut dyn RenderContext, | ||||||
|         _world: &mut World, |         world: &World, | ||||||
|         resources: &Resources, |  | ||||||
|     ) { |  | ||||||
|         let buffer = render_context.create_buffer(BufferInfo { |  | ||||||
|             size: std::mem::size_of::<[[f32; 4]; 4]>(), |  | ||||||
|             buffer_usage: BufferUsage::COPY_DST | BufferUsage::UNIFORM, |  | ||||||
|             ..Default::default() |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|         let mut render_resource_assignments = |  | ||||||
|             resources.get_mut::<RenderResourceAssignments>().unwrap(); |  | ||||||
|         render_resource_assignments.set(resource_name::uniform::CAMERA2D, buffer); |  | ||||||
|         self.camera_buffer = Some(buffer); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     fn update( |  | ||||||
|         &mut self, |  | ||||||
|         render_context: &mut dyn RenderContext, |  | ||||||
|         world: &mut World, |  | ||||||
|         resources: &Resources, |         resources: &Resources, | ||||||
|     ) { |     ) { | ||||||
|         let window_resized_events = resources.get::<Events<WindowResized>>().unwrap(); |         let window_resized_events = resources.get::<Events<WindowResized>>().unwrap(); | ||||||
| @ -61,14 +41,10 @@ impl ResourceProvider for Camera2dResourceProvider { | |||||||
|             .filter(|event| event.is_primary) |             .filter(|event| event.is_primary) | ||||||
|             .next(); |             .next(); | ||||||
| 
 | 
 | ||||||
|         if let Some(primary_window_resized_event) = primary_window_resized_event { |         if let Some(_) = primary_window_resized_event { | ||||||
|             let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>(); |             let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>(); | ||||||
|             for (mut camera, _) in <(Write<Camera>, Read<ActiveCamera2d>)>::query().iter_mut(world) |             for (camera, _) in <(Read<Camera>, Read<ActiveCamera2d>)>::query().iter(world) | ||||||
|             { |             { | ||||||
|                 camera.update( |  | ||||||
|                     primary_window_resized_event.width, |  | ||||||
|                     primary_window_resized_event.height, |  | ||||||
|                 ); |  | ||||||
|                 let camera_matrix: [[f32; 4]; 4] = camera.view_matrix.to_cols_array_2d(); |                 let camera_matrix: [[f32; 4]; 4] = camera.view_matrix.to_cols_array_2d(); | ||||||
| 
 | 
 | ||||||
|                 if let Some(old_tmp_buffer) = self.tmp_buffer { |                 if let Some(old_tmp_buffer) = self.tmp_buffer { | ||||||
| @ -97,3 +73,32 @@ impl ResourceProvider for Camera2dResourceProvider { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | impl ResourceProvider for Camera2dResourceProvider { | ||||||
|  |     fn initialize( | ||||||
|  |         &mut self, | ||||||
|  |         render_context: &mut dyn RenderContext, | ||||||
|  |         _world: &mut World, | ||||||
|  |         resources: &Resources, | ||||||
|  |     ) { | ||||||
|  |         let buffer = render_context.create_buffer(BufferInfo { | ||||||
|  |             size: std::mem::size_of::<[[f32; 4]; 4]>(), | ||||||
|  |             buffer_usage: BufferUsage::COPY_DST | BufferUsage::UNIFORM, | ||||||
|  |             ..Default::default() | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         let mut render_resource_assignments = | ||||||
|  |             resources.get_mut::<RenderResourceAssignments>().unwrap(); | ||||||
|  |         render_resource_assignments.set(resource_name::uniform::CAMERA2D, buffer); | ||||||
|  |         self.camera_buffer = Some(buffer); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn update( | ||||||
|  |         &mut self, | ||||||
|  |         render_context: &mut dyn RenderContext, | ||||||
|  |         world: &mut World, | ||||||
|  |         resources: &Resources, | ||||||
|  |     ) { | ||||||
|  |         self.update_read_only(render_context, world, resources); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
| @ -5,7 +5,8 @@ use crate::{ | |||||||
|         resource_name, BufferInfo, BufferUsage, RenderResource, RenderResourceAssignments, |         resource_name, BufferInfo, BufferUsage, RenderResource, RenderResourceAssignments, | ||||||
|         ResourceProvider, |         ResourceProvider, | ||||||
|     }, |     }, | ||||||
|     ActiveCamera, Camera, renderer_2::RenderContext, |     renderer_2::RenderContext, | ||||||
|  |     ActiveCamera, Camera, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| use bevy_app::{EventReader, Events}; | use bevy_app::{EventReader, Events}; | ||||||
| @ -27,43 +28,19 @@ impl CameraResourceProvider { | |||||||
|             window_resized_event_reader, |             window_resized_event_reader, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } |  | ||||||
| 
 | 
 | ||||||
| impl ResourceProvider for CameraResourceProvider { |     pub fn update_read_only(&mut self, world: &World, resources: &Resources, render_context: &mut dyn RenderContext) { | ||||||
|     fn initialize( |  | ||||||
|         &mut self, |  | ||||||
|         render_context: &mut dyn RenderContext, |  | ||||||
|         _world: &mut World, |  | ||||||
|         resources: &Resources, |  | ||||||
|     ) { |  | ||||||
|         let buffer = render_context.create_buffer(BufferInfo { |  | ||||||
|             size: std::mem::size_of::<[[f32; 4]; 4]>(), |  | ||||||
|             buffer_usage: BufferUsage::COPY_DST | BufferUsage::UNIFORM, |  | ||||||
|             ..Default::default() |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|         let mut render_resource_assignments = |  | ||||||
|             resources.get_mut::<RenderResourceAssignments>().unwrap(); |  | ||||||
|         render_resource_assignments.set(resource_name::uniform::CAMERA, buffer); |  | ||||||
|         self.camera_buffer = Some(buffer); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     fn update(&mut self, render_context: &mut dyn RenderContext, world: &mut World, resources: &Resources) { |  | ||||||
|         let window_resized_events = resources.get::<Events<WindowResized>>().unwrap(); |         let window_resized_events = resources.get::<Events<WindowResized>>().unwrap(); | ||||||
|         let primary_window_resized_event = window_resized_events |         let primary_window_resized_event = window_resized_events | ||||||
|             .iter(&mut self.window_resized_event_reader) |             .iter(&mut self.window_resized_event_reader) | ||||||
|             .rev() |             .rev() | ||||||
|             .filter(|event| event.is_primary) |             .filter(|event| event.is_primary) | ||||||
|             .next(); |             .next(); | ||||||
|         if let Some(primary_window_resized_event) = primary_window_resized_event { |         if let Some(_) = primary_window_resized_event { | ||||||
|             let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>(); |             let matrix_size = std::mem::size_of::<[[f32; 4]; 4]>(); | ||||||
|             for (mut camera, local_to_world, _) in |             for (camera, local_to_world, _) in | ||||||
|                 <(Write<Camera>, Read<LocalToWorld>, Read<ActiveCamera>)>::query().iter_mut(world) |                 <(Read<Camera>, Read<LocalToWorld>, Read<ActiveCamera>)>::query().iter(world) | ||||||
|             { |             { | ||||||
|                 camera.update( |  | ||||||
|                     primary_window_resized_event.width, |  | ||||||
|                     primary_window_resized_event.height, |  | ||||||
|                 ); |  | ||||||
|                 let camera_matrix: [[f32; 4]; 4] = |                 let camera_matrix: [[f32; 4]; 4] = | ||||||
|                     (camera.view_matrix * local_to_world.0).to_cols_array_2d(); |                     (camera.view_matrix * local_to_world.0).to_cols_array_2d(); | ||||||
| 
 | 
 | ||||||
| @ -93,3 +70,32 @@ impl ResourceProvider for CameraResourceProvider { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | impl ResourceProvider for CameraResourceProvider { | ||||||
|  |     fn initialize( | ||||||
|  |         &mut self, | ||||||
|  |         render_context: &mut dyn RenderContext, | ||||||
|  |         _world: &mut World, | ||||||
|  |         resources: &Resources, | ||||||
|  |     ) { | ||||||
|  |         let buffer = render_context.create_buffer(BufferInfo { | ||||||
|  |             size: std::mem::size_of::<[[f32; 4]; 4]>(), | ||||||
|  |             buffer_usage: BufferUsage::COPY_DST | BufferUsage::UNIFORM, | ||||||
|  |             ..Default::default() | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         let mut render_resource_assignments = | ||||||
|  |             resources.get_mut::<RenderResourceAssignments>().unwrap(); | ||||||
|  |         render_resource_assignments.set(resource_name::uniform::CAMERA, buffer); | ||||||
|  |         self.camera_buffer = Some(buffer); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn update( | ||||||
|  |         &mut self, | ||||||
|  |         render_context: &mut dyn RenderContext, | ||||||
|  |         world: &mut World, | ||||||
|  |         resources: &Resources, | ||||||
|  |     ) { | ||||||
|  |         self.update_read_only(world, resources, render_context); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
| @ -33,30 +33,7 @@ impl LightResourceProvider { | |||||||
|             tmp_count_buffer: None, |             tmp_count_buffer: None, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } |     fn update_read_only(&mut self, render_context: &mut dyn RenderContext, world: &World) { | ||||||
| 
 |  | ||||||
| impl ResourceProvider for LightResourceProvider { |  | ||||||
|     fn initialize( |  | ||||||
|         &mut self, |  | ||||||
|         render_context: &mut dyn RenderContext, |  | ||||||
|         _world: &mut World, |  | ||||||
|         resources: &Resources, |  | ||||||
|     ) { |  | ||||||
|         let light_uniform_size = |  | ||||||
|             std::mem::size_of::<LightCount>() + self.max_lights * std::mem::size_of::<LightRaw>(); |  | ||||||
| 
 |  | ||||||
|         let buffer = render_context.create_buffer(BufferInfo { |  | ||||||
|             size: light_uniform_size, |  | ||||||
|             buffer_usage: BufferUsage::UNIFORM | BufferUsage::COPY_SRC | BufferUsage::COPY_DST, |  | ||||||
|             ..Default::default() |  | ||||||
|         }); |  | ||||||
|         let mut render_resource_assignments = |  | ||||||
|             resources.get_mut::<RenderResourceAssignments>().unwrap(); |  | ||||||
|         render_resource_assignments.set(resource_name::uniform::LIGHTS, buffer); |  | ||||||
|         self.light_buffer = Some(buffer); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     fn update(&mut self, render_context: &mut dyn RenderContext, world: &mut World, _resources: &Resources) { |  | ||||||
|         if self.lights_are_dirty { |         if self.lights_are_dirty { | ||||||
|             let light_query = <(Read<Light>, Read<LocalToWorld>, Read<Translation>)>::query(); |             let light_query = <(Read<Light>, Read<LocalToWorld>, Read<Translation>)>::query(); | ||||||
|             let light_count = light_query.iter(world).count(); |             let light_count = light_query.iter(world).count(); | ||||||
| @ -123,3 +100,29 @@ impl ResourceProvider for LightResourceProvider { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | impl ResourceProvider for LightResourceProvider { | ||||||
|  |     fn initialize( | ||||||
|  |         &mut self, | ||||||
|  |         render_context: &mut dyn RenderContext, | ||||||
|  |         _world: &mut World, | ||||||
|  |         resources: &Resources, | ||||||
|  |     ) { | ||||||
|  |         let light_uniform_size = | ||||||
|  |             std::mem::size_of::<LightCount>() + self.max_lights * std::mem::size_of::<LightRaw>(); | ||||||
|  | 
 | ||||||
|  |         let buffer = render_context.create_buffer(BufferInfo { | ||||||
|  |             size: light_uniform_size, | ||||||
|  |             buffer_usage: BufferUsage::UNIFORM | BufferUsage::COPY_SRC | BufferUsage::COPY_DST, | ||||||
|  |             ..Default::default() | ||||||
|  |         }); | ||||||
|  |         let mut render_resource_assignments = | ||||||
|  |             resources.get_mut::<RenderResourceAssignments>().unwrap(); | ||||||
|  |         render_resource_assignments.set(resource_name::uniform::LIGHTS, buffer); | ||||||
|  |         self.light_buffer = Some(buffer); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     fn update(&mut self, render_context: &mut dyn RenderContext, world: &mut World, _resources: &Resources) { | ||||||
|  |         self.update_read_only(render_context, world); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | |||||||
| @ -40,7 +40,7 @@ impl MeshResourceProvider { | |||||||
| 
 | 
 | ||||||
|     fn setup_mesh_resources( |     fn setup_mesh_resources( | ||||||
|         render_context: &mut dyn RenderContext, |         render_context: &mut dyn RenderContext, | ||||||
|         mesh_storage: &mut AssetStorage<Mesh>, |         mesh_storage: &AssetStorage<Mesh>, | ||||||
|         handle: Handle<Mesh>, |         handle: Handle<Mesh>, | ||||||
|         render_resource_assignments: &mut RenderResourceAssignments, |         render_resource_assignments: &mut RenderResourceAssignments, | ||||||
|     ) { |     ) { | ||||||
| @ -91,10 +91,6 @@ impl ResourceProvider for MeshResourceProvider { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn update(&mut self, _render_context: &mut dyn RenderContext, world: &mut World, resources: &Resources) { |     fn update(&mut self, _render_context: &mut dyn RenderContext, world: &mut World, resources: &Resources) { | ||||||
|         let mut asset_batchers = resources.get_mut::<AssetBatchers>().unwrap(); |  | ||||||
|         for (entity, (mesh_handle, _renderable)) in self.mesh_query.iter_entities_mut(world) { |  | ||||||
|             asset_batchers.set_entity_handle(entity, *mesh_handle); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn finish_update( |     fn finish_update( | ||||||
| @ -103,7 +99,7 @@ impl ResourceProvider for MeshResourceProvider { | |||||||
|         _world: &mut World, |         _world: &mut World, | ||||||
|         resources: &Resources, |         resources: &Resources, | ||||||
|     ) { |     ) { | ||||||
|         let mut mesh_storage = resources.get_mut::<AssetStorage<Mesh>>().unwrap(); |         let mut mesh_storage = resources.get::<AssetStorage<Mesh>>().unwrap(); | ||||||
|         let mut asset_batchers = resources.get_mut::<AssetBatchers>().unwrap(); |         let mut asset_batchers = resources.get_mut::<AssetBatchers>().unwrap(); | ||||||
| 
 | 
 | ||||||
|         // this scope is necessary because the Fetch<AssetBatchers> pointer behaves weirdly
 |         // this scope is necessary because the Fetch<AssetBatchers> pointer behaves weirdly
 | ||||||
| @ -114,7 +110,7 @@ impl ResourceProvider for MeshResourceProvider { | |||||||
|                     log::trace!("setup mesh for {:?}", batch.render_resource_assignments.id); |                     log::trace!("setup mesh for {:?}", batch.render_resource_assignments.id); | ||||||
|                     Self::setup_mesh_resources( |                     Self::setup_mesh_resources( | ||||||
|                         render_context, |                         render_context, | ||||||
|                         &mut mesh_storage, |                         &mesh_storage, | ||||||
|                         handle, |                         handle, | ||||||
|                         &mut batch.render_resource_assignments, |                         &mut batch.render_resource_assignments, | ||||||
|                     ); |                     ); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Carter Anderson
						Carter Anderson