default assets
This commit is contained in:
		
							parent
							
								
									f2b2065fbe
								
							
						
					
					
						commit
						89d72ae044
					
				| @ -11,6 +11,7 @@ use std::{any::TypeId, collections::HashMap, marker::PhantomData}; | |||||||
| 
 | 
 | ||||||
| // TODO: move these types to their own files
 | // TODO: move these types to their own files
 | ||||||
| pub type HandleId = usize; | pub type HandleId = usize; | ||||||
|  | pub const DEFAULT_HANDLE_ID: HandleId = 0; | ||||||
| 
 | 
 | ||||||
| pub struct Handle<T> { | pub struct Handle<T> { | ||||||
|     pub id: HandleId, |     pub id: HandleId, | ||||||
| @ -58,11 +59,10 @@ impl<T> Debug for Handle<T> { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // TODO: somehow handle this gracefully in asset managers. or alternatively remove Default
 |  | ||||||
| impl<T> Default for Handle<T> { | impl<T> Default for Handle<T> { | ||||||
|     fn default() -> Self { |     fn default() -> Self { | ||||||
|         Handle { |         Handle { | ||||||
|             id: std::usize::MAX, |             id: DEFAULT_HANDLE_ID, | ||||||
|             marker: PhantomData, |             marker: PhantomData, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @ -121,7 +121,7 @@ impl<T> AssetStorage<T> { | |||||||
|         AssetStorage { |         AssetStorage { | ||||||
|             assets: HashMap::new(), |             assets: HashMap::new(), | ||||||
|             names: HashMap::new(), |             names: HashMap::new(), | ||||||
|             current_index: 0, |             current_index: 1, | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -139,6 +139,11 @@ impl<T> AssetStorage<T> { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub fn add_default(&mut self, asset: T) -> Handle<T> { | ||||||
|  |         self.assets.insert(DEFAULT_HANDLE_ID, asset); | ||||||
|  |         Handle::default() | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn set_name(&mut self, name: &str, handle: Handle<T>) { |     pub fn set_name(&mut self, name: &str, handle: Handle<T>) { | ||||||
|         self.names.insert(name.to_string(), handle); |         self.names.insert(name.to_string(), handle); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -15,7 +15,7 @@ pub trait ForwardPipelineBuilder { | |||||||
| 
 | 
 | ||||||
| impl<'a, 'b, 'c> ForwardPipelineBuilder for RenderGraphBuilder<'a, 'b, 'c> { | impl<'a, 'b, 'c> ForwardPipelineBuilder for RenderGraphBuilder<'a, 'b, 'c> { | ||||||
|     fn add_forward_pipeline(&mut self) -> &mut Self { |     fn add_forward_pipeline(&mut self) -> &mut Self { | ||||||
|         self.add_pipeline(resource_name::pipeline::FORWARD, |builder| { |         self.add_default_pipeline(resource_name::pipeline::FORWARD, |builder| { | ||||||
|             builder |             builder | ||||||
|                 .with_vertex_shader(Shader::from_glsl( |                 .with_vertex_shader(Shader::from_glsl( | ||||||
|                     ShaderStage::Vertex, |                     ShaderStage::Vertex, | ||||||
|  | |||||||
| @ -40,6 +40,20 @@ impl<'a, 'b, 'c> RenderGraphBuilder<'a, 'b, 'c> { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub fn add_default_pipeline(&mut self, name: &str, build: impl Fn(&mut PipelineBuilder)) -> &mut Self { | ||||||
|  |         if let Some(ref pass) = self.current_pass { | ||||||
|  |             let mut builder = PipelineBuilder::new(name, &mut self.shaders); | ||||||
|  |             build(&mut builder); | ||||||
|  |             let pipeline = builder.finish(); | ||||||
|  |             let pipeline_descriptor_handle = self.pipelines.add_default(pipeline); | ||||||
|  |             self.pipelines.set_name(name, pipeline_descriptor_handle); | ||||||
|  |             self.render_graph | ||||||
|  |                 .add_pipeline(&pass, pipeline_descriptor_handle); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn add_pipeline_to_pass( |     pub fn add_pipeline_to_pass( | ||||||
|         &mut self, |         &mut self, | ||||||
|         pass: &str, |         pass: &str, | ||||||
| @ -59,6 +73,25 @@ impl<'a, 'b, 'c> RenderGraphBuilder<'a, 'b, 'c> { | |||||||
|         self |         self | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     pub fn add_default_pipeline_to_pass( | ||||||
|  |         &mut self, | ||||||
|  |         pass: &str, | ||||||
|  |         name: &str, | ||||||
|  |         build: impl Fn(&mut PipelineBuilder), | ||||||
|  |     ) -> &mut Self { | ||||||
|  |         { | ||||||
|  |             let mut builder = PipelineBuilder::new(name, &mut self.shaders); | ||||||
|  |             build(&mut builder); | ||||||
|  |             let pipeline = builder.finish(); | ||||||
|  |             let pipeline_descriptor_handle = self.pipelines.add_default(pipeline); | ||||||
|  |             self.pipelines.set_name(name, pipeline_descriptor_handle); | ||||||
|  |             self.render_graph | ||||||
|  |                 .add_pipeline(pass, pipeline_descriptor_handle); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         self | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     pub fn add_resource_provider<T>(&mut self, resource_provider: T) -> &mut Self |     pub fn add_resource_provider<T>(&mut self, resource_provider: T) -> &mut Self | ||||||
|     where |     where | ||||||
|         T: ResourceProvider + Send + Sync + 'static, |         T: ResourceProvider + Send + Sync + 'static, | ||||||
|  | |||||||
| @ -24,7 +24,7 @@ impl Default for Renderable { | |||||||
|         Renderable { |         Renderable { | ||||||
|             is_visible: true, |             is_visible: true, | ||||||
|             pipelines: vec![ |             pipelines: vec![ | ||||||
|                 Handle::new(0), // TODO: this could be better
 |                 Handle::default(), | ||||||
|             ], |             ], | ||||||
|             render_resource_assignments: RenderResourceAssignments::default(), |             render_resource_assignments: RenderResourceAssignments::default(), | ||||||
|             is_instanced: false, |             is_instanced: false, | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Carter Anderson
						Carter Anderson