update ResourceProvider::update to actually use read-only world
This commit is contained in:
		
							parent
							
								
									b9f4c0a53b
								
							
						
					
					
						commit
						77a6619bf4
					
				| @ -10,8 +10,7 @@ pub trait ResourceProvider { | |||||||
|     ) { |     ) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // TODO: make this read-only
 |     fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &World, _resources: &Resources) { | ||||||
|     fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &mut World, _resources: &Resources) { |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // TODO: remove this
 |     // TODO: remove this
 | ||||||
|  | |||||||
| @ -27,8 +27,28 @@ impl Camera2dResourceProvider { | |||||||
|             window_resized_event_reader, |             window_resized_event_reader, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|     fn update_read_only( | impl ResourceProvider for Camera2dResourceProvider { | ||||||
|  |     fn initialize( | ||||||
|  |         &mut self, | ||||||
|  |         render_context: &mut dyn RenderContext, | ||||||
|  |         _world: &mut World, | ||||||
|  |         resources: &Resources, | ||||||
|  |     ) { | ||||||
|  |         let buffer = render_context.resources_mut().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, |         &mut self, | ||||||
|         render_context: &mut dyn RenderContext, |         render_context: &mut dyn RenderContext, | ||||||
|         world: &World, |         world: &World, | ||||||
| @ -43,8 +63,7 @@ impl Camera2dResourceProvider { | |||||||
| 
 | 
 | ||||||
|         if let Some(_) = 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 (camera, _) in <(Read<Camera>, Read<ActiveCamera2d>)>::query().iter(world) |             for (camera, _) in <(Read<Camera>, Read<ActiveCamera2d>)>::query().iter(world) { | ||||||
|             { |  | ||||||
|                 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 { | ||||||
| @ -73,32 +92,3 @@ impl Camera2dResourceProvider { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 |  | ||||||
| impl ResourceProvider for Camera2dResourceProvider { |  | ||||||
|     fn initialize( |  | ||||||
|         &mut self, |  | ||||||
|         render_context: &mut dyn RenderContext, |  | ||||||
|         _world: &mut World, |  | ||||||
|         resources: &Resources, |  | ||||||
|     ) { |  | ||||||
|         let buffer = render_context.resources_mut().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); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -28,8 +28,33 @@ impl CameraResourceProvider { | |||||||
|             window_resized_event_reader, |             window_resized_event_reader, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|     pub fn update_read_only(&mut self, world: &World, resources: &Resources, render_context: &mut dyn RenderContext) { | impl ResourceProvider for CameraResourceProvider { | ||||||
|  |     fn initialize( | ||||||
|  |         &mut self, | ||||||
|  |         render_context: &mut dyn RenderContext, | ||||||
|  |         _world: &mut World, | ||||||
|  |         resources: &Resources, | ||||||
|  |     ) { | ||||||
|  |         let buffer = render_context.resources_mut().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: &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) | ||||||
| @ -70,32 +95,3 @@ impl CameraResourceProvider { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 |  | ||||||
| impl ResourceProvider for CameraResourceProvider { |  | ||||||
|     fn initialize( |  | ||||||
|         &mut self, |  | ||||||
|         render_context: &mut dyn RenderContext, |  | ||||||
|         _world: &mut World, |  | ||||||
|         resources: &Resources, |  | ||||||
|     ) { |  | ||||||
|         let buffer = render_context.resources_mut().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); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -21,8 +21,10 @@ impl FrameTextureResourceProvider { | |||||||
|             height: 0, |             height: 0, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|     pub fn update(&mut self, render_context: &mut dyn RenderContext, resources: &Resources) { | impl ResourceProvider for FrameTextureResourceProvider { | ||||||
|  |     fn update(&mut self, render_context: &mut dyn RenderContext, _world: &World, resources: &Resources) { | ||||||
|         let windows = resources.get::<Windows>().unwrap(); |         let windows = resources.get::<Windows>().unwrap(); | ||||||
|         let window = windows.get_primary().unwrap(); |         let window = windows.get_primary().unwrap(); | ||||||
| 
 | 
 | ||||||
| @ -44,9 +46,3 @@ impl FrameTextureResourceProvider { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 |  | ||||||
| impl ResourceProvider for FrameTextureResourceProvider { |  | ||||||
|     fn update(&mut self, render_context: &mut dyn RenderContext, _world: &mut World, resources: &Resources) { |  | ||||||
|         self.update(render_context, resources) |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -3,7 +3,8 @@ use crate::{ | |||||||
|         resource_name, BufferInfo, BufferUsage, RenderResource, RenderResourceAssignments, |         resource_name, BufferInfo, BufferUsage, RenderResource, RenderResourceAssignments, | ||||||
|         ResourceProvider, |         ResourceProvider, | ||||||
|     }, |     }, | ||||||
|     Light, LightRaw, renderer_2::RenderContext, |     renderer_2::RenderContext, | ||||||
|  |     Light, LightRaw, | ||||||
| }; | }; | ||||||
| use bevy_transform::prelude::{LocalToWorld, Translation}; | use bevy_transform::prelude::{LocalToWorld, Translation}; | ||||||
| use legion::prelude::*; | use legion::prelude::*; | ||||||
| @ -33,7 +34,35 @@ 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.resources_mut().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: &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(); | ||||||
| @ -101,29 +130,3 @@ impl 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.resources_mut().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); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
|  | |||||||
| @ -91,7 +91,7 @@ impl ResourceProvider for MeshResourceProvider { | |||||||
|         vertex_buffer_descriptors.set(Vertex::get_vertex_buffer_descriptor().cloned().unwrap()); |         vertex_buffer_descriptors.set(Vertex::get_vertex_buffer_descriptor().cloned().unwrap()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &mut World, _resources: &Resources) { |     fn update(&mut self, _render_context: &mut dyn RenderContext, _world: &World, _resources: &Resources) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn finish_update( |     fn finish_update( | ||||||
|  | |||||||
| @ -128,18 +128,6 @@ where | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn update_readonly( |  | ||||||
|         &mut self, |  | ||||||
|         _render_context: &mut dyn RenderContext, |  | ||||||
|         world: &World, |  | ||||||
|         resources: &Resources, |  | ||||||
|     ) { |  | ||||||
|         self.reset_buffer_array_status_counts(); |  | ||||||
|         self.update_uniforms_info(world); |  | ||||||
|         self.update_uniform_handles_info(world, resources); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     fn reset_buffer_array_status_counts(&mut self) { |     fn reset_buffer_array_status_counts(&mut self) { | ||||||
|         for buffer_status in self.uniform_buffer_status.iter_mut() { |         for buffer_status in self.uniform_buffer_status.iter_mut() { | ||||||
|             if let Some((_name, buffer_status)) = buffer_status { |             if let Some((_name, buffer_status)) = buffer_status { | ||||||
| @ -734,10 +722,12 @@ where | |||||||
|     fn update( |     fn update( | ||||||
|         &mut self, |         &mut self, | ||||||
|         _render_context: &mut dyn RenderContext, |         _render_context: &mut dyn RenderContext, | ||||||
|         world: &mut World, |         world: &World, | ||||||
|         resources: &Resources, |         resources: &Resources, | ||||||
|     ) { |     ) { | ||||||
|         self.update_readonly(_render_context, world, resources); |         self.reset_buffer_array_status_counts(); | ||||||
|  |         self.update_uniforms_info(world); | ||||||
|  |         self.update_uniform_handles_info(world, resources); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn finish_update( |     fn finish_update( | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Carter Anderson
						Carter Anderson