From ad7acb111ab31dfb3e02b8e8888503648aa4daa1 Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Mon, 17 Feb 2020 20:23:00 -0800 Subject: [PATCH] fix custom_shader example --- bevy_derive/src/lib.rs | 5 ++++- examples/custom_shader.rs | 38 +++++++++++++++++++++++------------ src/ecs/default_archetypes.rs | 9 +++++++++ src/prelude.rs | 2 +- 4 files changed, 39 insertions(+), 15 deletions(-) diff --git a/bevy_derive/src/lib.rs b/bevy_derive/src/lib.rs index dc5ee617ed..fe3204f344 100644 --- a/bevy_derive/src/lib.rs +++ b/bevy_derive/src/lib.rs @@ -17,11 +17,14 @@ pub fn derive_entity_archetype(input: TokenStream) -> TokenStream { _ => panic!("expected a struct with named fields"), }; + let generics = ast.generics; + let (impl_generics, ty_generics, _where_clause) = generics.split_for_impl(); + let struct_name = &ast.ident; let field_name = fields.iter().map(|field| &field.ident); TokenStream::from(quote! { - impl bevy::prelude::EntityArchetype for #struct_name { + impl #impl_generics bevy::prelude::EntityArchetype for #struct_name#ty_generics { fn insert(self, world: &mut bevy::prelude::World) -> Entity { *world.insert((), vec![( #(self.#field_name,)* diff --git a/examples/custom_shader.rs b/examples/custom_shader.rs index b88fc52396..4e41b2a0b2 100644 --- a/examples/custom_shader.rs +++ b/examples/custom_shader.rs @@ -1,16 +1,18 @@ use bevy::{ prelude::*, render::{ - render_graph::{PipelineDescriptor, resource_name, resource_providers::UniformResourceProvider}, + render_graph::{ + resource_name, resource_providers::UniformResourceProvider, PipelineDescriptor, + }, Shader, ShaderStage, Vertex, }, }; use bevy_derive::Uniforms; -#[derive(Uniforms)] +#[derive(Uniforms, Default)] struct MyMaterial { - pub color: Vec4 + pub color: Vec4, } fn main() { @@ -24,8 +26,10 @@ fn main() { resource_name::pass::MAIN, pipeline_storage, PipelineDescriptor::build( - shader_storage, Shader::from_glsl( - ShaderStage::Vertex,r#" + shader_storage, + Shader::from_glsl( + ShaderStage::Vertex, + r#" #version 450 layout(location = 0) in vec4 a_Pos; layout(location = 0) out vec4 v_Position; @@ -39,11 +43,12 @@ fn main() { v_Position = Model * vec4(a_Pos); gl_Position = ViewProj * v_Position; } - "#), + "#, + ), ) - .with_fragment_shader( - Shader::from_glsl( - ShaderStage::Fragment, r#" + .with_fragment_shader(Shader::from_glsl( + ShaderStage::Fragment, + r#" #version 450 layout(location = 0) in vec4 v_Position; layout(location = 0) out vec4 o_Target; @@ -53,8 +58,8 @@ fn main() { void main() { o_Target = color; } - "#) - ) + "#, + )) .with_depth_stencil_state(wgpu::DepthStencilStateDescriptor { format: wgpu::TextureFormat::Depth32Float, depth_write_enabled: true, @@ -86,9 +91,16 @@ fn setup(world: &mut World) { world .build() - // red cube - .add_archetype(MeshEntity { + // cube + .add_archetype(MeshMaterialEntity:: { mesh: cube_handle, + renderable: Renderable { + pipelines: vec![Handle::new(2)], + ..Default::default() + }, + material: MyMaterial { + color: Vec4::new(1.0, 0.0, 0.0, 1.0), + }, ..Default::default() }) // camera diff --git a/src/ecs/default_archetypes.rs b/src/ecs/default_archetypes.rs index d9d46833cb..6b5b75d554 100644 --- a/src/ecs/default_archetypes.rs +++ b/src/ecs/default_archetypes.rs @@ -15,6 +15,15 @@ pub struct MeshEntity { pub translation: Translation, } +#[derive(EntityArchetype, Default)] +pub struct MeshMaterialEntity { + pub mesh: Handle, + pub material: T, + pub renderable: Renderable, + pub local_to_world: LocalToWorld, + pub translation: Translation, +} + #[derive(EntityArchetype, Default)] pub struct LightEntity { pub light: Light, diff --git a/src/prelude.rs b/src/prelude.rs index 7742bf1f69..2edd7286b1 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -6,7 +6,7 @@ pub use crate::{ ecs::{default_archetypes::*, EntityArchetype, WorldBuilder, WorldBuilderSource}, render::{ ActiveCamera, ActiveCamera2d, Camera, CameraType, Instanced, Light, - render_graph::StandardMaterial, + render_graph::{StandardMaterial, Renderable}, }, ui::{Anchors, Margins, Node}, };