add ColorSource and remove test macro from StandardMaterial
This commit is contained in:
		
							parent
							
								
									f820e4207c
								
							
						
					
					
						commit
						b809b22589
					
				| @ -19,8 +19,7 @@ fn create_entities_insert_vec( | |||||||
|         vec![( |         vec![( | ||||||
|             plane_handle.clone(), |             plane_handle.clone(), | ||||||
|             StandardMaterial { |             StandardMaterial { | ||||||
|                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0), |                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             LocalToWorld::identity(), |             LocalToWorld::identity(), | ||||||
|             Translation::new(0.0, 0.0, 0.0), |             Translation::new(0.0, 0.0, 0.0), | ||||||
| @ -33,8 +32,7 @@ fn create_entities_insert_vec( | |||||||
|         vec![( |         vec![( | ||||||
|             cube_handle, |             cube_handle, | ||||||
|             StandardMaterial { |             StandardMaterial { | ||||||
|                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0), |                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             LocalToWorld::identity(), |             LocalToWorld::identity(), | ||||||
|             Translation::new(0.0, 0.0, 1.0), |             Translation::new(0.0, 0.0, 1.0), | ||||||
| @ -84,8 +82,7 @@ fn create_entities_builder_add_component( | |||||||
|         .build_entity() |         .build_entity() | ||||||
|         .add(plane_handle.clone()) |         .add(plane_handle.clone()) | ||||||
|         .add(StandardMaterial { |         .add(StandardMaterial { | ||||||
|             albedo: math::vec4(0.1, 0.2, 0.1, 1.0), |             albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(), | ||||||
|             everything_is_red: false, |  | ||||||
|         }) |         }) | ||||||
|         .add(LocalToWorld::identity()) |         .add(LocalToWorld::identity()) | ||||||
|         .add(Translation::new(0.0, 0.0, 0.0)) |         .add(Translation::new(0.0, 0.0, 0.0)) | ||||||
| @ -93,8 +90,7 @@ fn create_entities_builder_add_component( | |||||||
|         .build_entity() |         .build_entity() | ||||||
|         .add(cube_handle) |         .add(cube_handle) | ||||||
|         .add(StandardMaterial { |         .add(StandardMaterial { | ||||||
|             albedo: math::vec4(0.5, 0.3, 0.3, 1.0), |             albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(), | ||||||
|             everything_is_red: false, |  | ||||||
|         }) |         }) | ||||||
|         .add(LocalToWorld::identity()) |         .add(LocalToWorld::identity()) | ||||||
|         .add(Translation::new(0.0, 0.0, 1.0)) |         .add(Translation::new(0.0, 0.0, 1.0)) | ||||||
| @ -132,8 +128,7 @@ fn create_entities_builder_archetype( | |||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: plane_handle.clone(), |             mesh: plane_handle.clone(), | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0), |                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(), | ||||||
|                 everything_is_red: false |  | ||||||
|             }, |             }, | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }) | ||||||
| @ -141,8 +136,7 @@ fn create_entities_builder_archetype( | |||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: cube_handle, |             mesh: cube_handle, | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0), |                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(), | ||||||
|                 everything_is_red: false |  | ||||||
|             }, |             }, | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }) | ||||||
|  | |||||||
| @ -194,8 +194,7 @@ fn create_person(world: &mut World, mesh_handle: Handle<Mesh>, translation: Tran | |||||||
|             }, |             }, | ||||||
|             Instanced, |             Instanced, | ||||||
|             StandardMaterial { |             StandardMaterial { | ||||||
|                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0) * random::<f32>(), |                 albedo: (math::vec4(0.5, 0.3, 0.3, 1.0) * random::<f32>()).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             mesh_handle, |             mesh_handle, | ||||||
|             LocalToWorld::identity(), |             LocalToWorld::identity(), | ||||||
|  | |||||||
| @ -36,8 +36,7 @@ fn setup(world: &mut World) { | |||||||
|         vec![( |         vec![( | ||||||
|             plane_handle.clone(), |             plane_handle.clone(), | ||||||
|             StandardMaterial { |             StandardMaterial { | ||||||
|                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0), |                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             LocalToWorld::identity(), |             LocalToWorld::identity(), | ||||||
|             Translation::new(0.0, 0.0, -5.0), |             Translation::new(0.0, 0.0, -5.0), | ||||||
| @ -51,8 +50,7 @@ fn setup(world: &mut World) { | |||||||
|             vec![( |             vec![( | ||||||
|                 cube_handle.clone(), |                 cube_handle.clone(), | ||||||
|                 StandardMaterial { |                 StandardMaterial { | ||||||
|                     albedo: math::vec4(0.5, 0.3, 0.3, 1.0), |                     albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(), | ||||||
|                     everything_is_red: false, |  | ||||||
|                 }, |                 }, | ||||||
|                 LocalToWorld::identity(), |                 LocalToWorld::identity(), | ||||||
|                 Translation::new(0.0, 0.0, 1.0), |                 Translation::new(0.0, 0.0, 1.0), | ||||||
| @ -69,8 +67,7 @@ fn setup(world: &mut World) { | |||||||
|         vec![( |         vec![( | ||||||
|             cube_handle, |             cube_handle, | ||||||
|             StandardMaterial { |             StandardMaterial { | ||||||
|                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0), |                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             LocalToWorld::identity(), |             LocalToWorld::identity(), | ||||||
|             Translation::new(0.0, 0.0, 3.0), |             Translation::new(0.0, 0.0, 3.0), | ||||||
|  | |||||||
| @ -19,31 +19,19 @@ fn setup(world: &mut World) { | |||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: plane_handle.clone(), |             mesh: plane_handle.clone(), | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0), |                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }) | ||||||
|         // tan cube
 |         // cube
 | ||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: cube_handle.clone(), |             mesh: cube_handle.clone(), | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(0.5, 0.4, 0.3, 1.0), |                 albedo: math::vec4(0.5, 0.4, 0.3, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             translation: Translation::new(0.0, 0.0, 1.0), |             translation: Translation::new(0.0, 0.0, 1.0), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }) | ||||||
|         // red cube
 |  | ||||||
|         .add_archetype(MeshEntity { |  | ||||||
|             mesh: cube_handle.clone(), |  | ||||||
|             material: StandardMaterial { |  | ||||||
|                 albedo: math::vec4(0.5, 0.4, 0.3, 1.0), |  | ||||||
|                 everything_is_red: true, |  | ||||||
|             }, |  | ||||||
|             translation: Translation::new(3.0, 0.0, 1.0), |  | ||||||
|             ..Default::default() |  | ||||||
|         }) |  | ||||||
|         // light
 |         // light
 | ||||||
|         .add_archetype(LightEntity { |         .add_archetype(LightEntity { | ||||||
|             translation: Translation::new(4.0, -4.0, 5.0), |             translation: Translation::new(4.0, -4.0, 5.0), | ||||||
|  | |||||||
| @ -18,13 +18,15 @@ fn build_move_system() -> Box<dyn Schedulable> { | |||||||
|         .build(move |_, world, time, person_query| { |         .build(move |_, world, time, person_query| { | ||||||
|             for (mut translation, mut material) in person_query.iter_mut(world) { |             for (mut translation, mut material) in person_query.iter_mut(world) { | ||||||
|                 translation.0 += math::vec3(1.0, 0.0, 0.0) * time.delta_seconds; |                 translation.0 += math::vec3(1.0, 0.0, 0.0) * time.delta_seconds; | ||||||
|                 material.albedo = material.albedo |                 if let ColorSource::Color(color) = material.albedo { | ||||||
|  |                     material.albedo = (color | ||||||
|                         + math::vec4( |                         + math::vec4( | ||||||
|                             -time.delta_seconds, |                             -time.delta_seconds, | ||||||
|                             -time.delta_seconds, |                             -time.delta_seconds, | ||||||
|                             time.delta_seconds, |                             time.delta_seconds, | ||||||
|                             0.0, |                             0.0, | ||||||
|                     ); |                         )).into(); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         }) |         }) | ||||||
| } | } | ||||||
| @ -73,8 +75,7 @@ fn setup(world: &mut World) { | |||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: plane_handle.clone(), |             mesh: plane_handle.clone(), | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0), |                 albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|         }) |         }) | ||||||
| @ -82,8 +83,7 @@ fn setup(world: &mut World) { | |||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: cube_handle.clone(), |             mesh: cube_handle.clone(), | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(1.0, 1.0, 1.0, 1.0), |                 albedo: math::vec4(1.0, 1.0, 1.0, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             translation: Translation::new(0.0, 0.0, 1.0), |             translation: Translation::new(0.0, 0.0, 1.0), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
| @ -91,8 +91,7 @@ fn setup(world: &mut World) { | |||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: cube_handle.clone(), |             mesh: cube_handle.clone(), | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(0.0, 1.0, 0.0, 1.0), |                 albedo: math::vec4(0.0, 1.0, 0.0, 1.0).into(), | ||||||
|                 everything_is_red: true, |  | ||||||
|             }, |             }, | ||||||
|             translation: Translation::new(-2.0, 0.0, 1.0), |             translation: Translation::new(-2.0, 0.0, 1.0), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
| @ -128,8 +127,7 @@ fn setup(world: &mut World) { | |||||||
|                     rng.gen_range(0.0, 1.0), |                     rng.gen_range(0.0, 1.0), | ||||||
|                     rng.gen_range(0.0, 1.0), |                     rng.gen_range(0.0, 1.0), | ||||||
|                     1.0, |                     1.0, | ||||||
|                 ), |                 ).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             translation: Translation::new( |             translation: Translation::new( | ||||||
|                 rng.gen_range(-50.0, 50.0), |                 rng.gen_range(-50.0, 50.0), | ||||||
|  | |||||||
| @ -22,8 +22,7 @@ fn setup(world: &mut World) { | |||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: cube_handle.clone(), |             mesh: cube_handle.clone(), | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0), |                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             translation: Translation::new(0.0, 0.0, 1.0), |             translation: Translation::new(0.0, 0.0, 1.0), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|  | |||||||
| @ -17,8 +17,7 @@ fn setup(world: &mut World) { | |||||||
|         .add_archetype(MeshEntity { |         .add_archetype(MeshEntity { | ||||||
|             mesh: cube_handle.clone(), |             mesh: cube_handle.clone(), | ||||||
|             material: StandardMaterial { |             material: StandardMaterial { | ||||||
|                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0), |                 albedo: math::vec4(0.5, 0.3, 0.3, 1.0).into(), | ||||||
|                 everything_is_red: false, |  | ||||||
|             }, |             }, | ||||||
|             translation: Translation::new(0.0, 0.0, 1.0), |             translation: Translation::new(0.0, 0.0, 1.0), | ||||||
|             ..Default::default() |             ..Default::default() | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ pub use crate::{ | |||||||
|     ecs::{default_archetypes::*, EntityArchetype, WorldBuilder, WorldBuilderSource}, |     ecs::{default_archetypes::*, EntityArchetype, WorldBuilder, WorldBuilderSource}, | ||||||
|     render::{ |     render::{ | ||||||
|         ActiveCamera, ActiveCamera2d, Camera, CameraType, Instanced, Light, |         ActiveCamera, ActiveCamera2d, Camera, CameraType, Instanced, Light, | ||||||
|         render_graph::{StandardMaterial, Renderable, ShaderDefSuffixProvider}, |         render_graph::{StandardMaterial, Renderable, ShaderDefSuffixProvider}, ColorSource | ||||||
|     }, |     }, | ||||||
|     ui::{Anchors, Margins, Node}, |     ui::{Anchors, Margins, Node}, | ||||||
| }; | }; | ||||||
|  | |||||||
							
								
								
									
										38
									
								
								src/render/color.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/render/color.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | use crate::{ | ||||||
|  |     asset::{Handle, Texture}, | ||||||
|  |     math::Vec4, | ||||||
|  |     render::render_graph::ShaderDefSuffixProvider, core::GetBytes, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | pub enum ColorSource { | ||||||
|  |     Color(Vec4), | ||||||
|  |     Texture(Handle<Texture>), | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl From<Vec4> for ColorSource { | ||||||
|  |     fn from(vec4: Vec4) -> Self { | ||||||
|  |         ColorSource::Color(vec4) | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | impl ShaderDefSuffixProvider for ColorSource { | ||||||
|  |     fn get_shader_def(&self) -> Option<&'static str> { | ||||||
|  |         match *self { | ||||||
|  |             ColorSource::Color(_) => Some("_color"), | ||||||
|  |             ColorSource::Texture(_) => Some("_texture"), | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | impl GetBytes for ColorSource { | ||||||
|  |     fn get_bytes(&self) -> Vec<u8> { | ||||||
|  |         match *self { | ||||||
|  |             ColorSource::Color(color) => color.get_bytes(), | ||||||
|  |             ColorSource::Texture(_) => Vec::new(), // Texture is not a uniform
 | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     fn get_bytes_ref(&self) -> Option<&[u8]> { | ||||||
|  |         None | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -3,12 +3,14 @@ pub mod render_graph; | |||||||
| pub mod shader; | pub mod shader; | ||||||
| pub mod shader_reflect; | pub mod shader_reflect; | ||||||
| 
 | 
 | ||||||
|  | mod color; | ||||||
| mod light; | mod light; | ||||||
| mod vertex; | mod vertex; | ||||||
| 
 | 
 | ||||||
| pub use camera::*; | pub use camera::*; | ||||||
| pub use light::*; | pub use light::*; | ||||||
| pub use shader::*; | pub use shader::*; | ||||||
|  | pub use color::*; | ||||||
| 
 | 
 | ||||||
| pub use vertex::Vertex; | pub use vertex::Vertex; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -43,8 +43,4 @@ void main() { | |||||||
|     } |     } | ||||||
|     // multiply the light by material color |     // multiply the light by material color | ||||||
|     o_Target = vec4(color, 1.0) * Albedo; |     o_Target = vec4(color, 1.0) * Albedo; | ||||||
| 
 |  | ||||||
| # ifdef everything_is_red |  | ||||||
|     o_Target = vec4(1.0, 0.0, 0.0, 1.0); |  | ||||||
| # endif |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,20 +1,17 @@ | |||||||
| use crate::{math, math::Vec4, render::render_graph::ShaderDefSuffixProvider}; | use crate::{math::Vec4, render::ColorSource}; | ||||||
| 
 | 
 | ||||||
| use crate as bevy; // for macro imports
 | use crate as bevy; // for macro imports
 | ||||||
| use bevy_derive::Uniforms; | use bevy_derive::Uniforms; | ||||||
| 
 | 
 | ||||||
| #[derive(Uniforms)] | #[derive(Uniforms)] | ||||||
| pub struct StandardMaterial { | pub struct StandardMaterial { | ||||||
|     pub albedo: Vec4, |     pub albedo: ColorSource, | ||||||
|     #[uniform(ignore, shader_def)] |  | ||||||
|     pub everything_is_red: bool, |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl Default for StandardMaterial { | impl Default for StandardMaterial { | ||||||
|     fn default() -> Self { |     fn default() -> Self { | ||||||
|         StandardMaterial { |         StandardMaterial { | ||||||
|             albedo: math::vec4(0.3, 0.3, 0.3, 1.0), |             albedo: ColorSource::Color(Vec4::new(0.3, 0.3, 0.3, 1.0)), | ||||||
|             everything_is_red: false, |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Carter Anderson
						Carter Anderson