diff --git a/src/main.rs b/src/main.rs index da5b1fa..669eea0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,16 +1,8 @@ mod materials; -use bevy::{ - pbr::{MaterialPipeline, MaterialPipelineKey}, - prelude::*, - reflect::TypeUuid, - render::{ - mesh::MeshVertexBufferLayout, - render_resource::{ - AsBindGroup, RenderPipelineDescriptor, ShaderRef, SpecializedMeshPipelineError, - }, - }, -}; +use bevy::prelude::*; + +use materials::{RepeatMaterial, SolidMaterial}; fn startup( mut commands: Commands, @@ -18,7 +10,7 @@ fn startup( mut meshes: ResMut>, mut materials: ResMut>, mut tiled_materials: ResMut>, - mut solid_materials: ResMut>, + mut solid_materials: ResMut>, ) { let grid_texture = assets.load("grid-texture.png"); @@ -28,7 +20,7 @@ fn startup( alpha_mode: AlphaMode::Blend, }); - let solid_material = solid_materials.add(materials::SolidMaterial{}); + let solid_material = solid_materials.add(materials::SolidMaterial {}); // a ground plane commands.spawn(MaterialMeshBundle { @@ -80,48 +72,6 @@ fn startup( }); } -#[derive(AsBindGroup, Clone, TypeUuid)] -#[uuid = "d57ae039-8c67-4004-9370-5c522e256515"] -pub struct RepeatMaterial { - #[uniform(0)] - color: Color, - - #[texture(1)] - #[sampler(2)] - color_texture: Option>, - - alpha_mode: AlphaMode, -} - -impl Material for RepeatMaterial { - fn vertex_shader() -> ShaderRef { - "shaders/repeat.vert".into() - } - - fn fragment_shader() -> ShaderRef { - "shaders/repeat.frag".into() - } - - fn alpha_mode(&self) -> AlphaMode { - self.alpha_mode - } - - fn specialize( - _: &MaterialPipeline, - descriptor: &mut RenderPipelineDescriptor, - _: &MeshVertexBufferLayout, - _: MaterialPipelineKey, - ) -> Result<(), SpecializedMeshPipelineError> { - descriptor.vertex.entry_point = "main".into(); - let mut frag = descriptor - .fragment - .as_mut() - .expect("should have a fragment entry point here"); - frag.entry_point = "main".into(); - Ok(()) - } -} - fn main() { App::new() .add_plugins(DefaultPlugins) diff --git a/src/materials.rs b/src/materials.rs index 4f42d1f..f560f01 100644 --- a/src/materials.rs +++ b/src/materials.rs @@ -1,3 +1,6 @@ mod solid; +mod repeat; pub use solid::SolidMaterial; +pub use repeat::RepeatMaterial; + diff --git a/src/materials/repeat.rs b/src/materials/repeat.rs new file mode 100644 index 0000000..61b0a14 --- /dev/null +++ b/src/materials/repeat.rs @@ -0,0 +1,55 @@ +use bevy::{ + asset::Handle, + pbr::{AlphaMode, Material, MaterialPipeline, MaterialPipelineKey}, + reflect::TypeUuid, + render::{ + color::Color, + mesh::MeshVertexBufferLayout, + render_resource::{ + AsBindGroup, RenderPipelineDescriptor, ShaderRef, SpecializedMeshPipelineError, + }, + texture::Image, + }, +}; + +#[derive(AsBindGroup, Clone, TypeUuid)] +#[uuid = "d57ae039-8c67-4004-9370-5c522e256515"] +pub struct RepeatMaterial { + #[uniform(0)] + pub color: Color, + + #[texture(1)] + #[sampler(2)] + pub color_texture: Option>, + + pub alpha_mode: AlphaMode, +} + +impl Material for RepeatMaterial { + fn vertex_shader() -> ShaderRef { + "shaders/repeat.vert".into() + } + + fn fragment_shader() -> ShaderRef { + "shaders/repeat.frag".into() + } + + fn alpha_mode(&self) -> AlphaMode { + self.alpha_mode + } + + fn specialize( + _: &MaterialPipeline, + descriptor: &mut RenderPipelineDescriptor, + _: &MeshVertexBufferLayout, + _: MaterialPipelineKey, + ) -> Result<(), SpecializedMeshPipelineError> { + descriptor.vertex.entry_point = "main".into(); + let mut frag = descriptor + .fragment + .as_mut() + .expect("should have a fragment entry point here"); + frag.entry_point = "main".into(); + Ok(()) + } +}