use bevy::{
asset::{
embedded_asset, load_internal_asset, uuid_handle,
},
prelude::*,
render::render_resource::AsBindGroup,
shader::ShaderRef,
};
const PERLIN_NOISE_2D: Handle<Shader> =
uuid_handle!("990ee5ac-3d4a-4593-841f-6b46f02abcb3");
pub const PERLIN_NOISE_3D: Handle<Shader> =
uuid_handle!("70568ff4-c5ca-4411-b099-692926332401");
pub const SIMPLEX_NOISE_2D: Handle<Shader> =
uuid_handle!("f6a37262-741d-442e-b990-fb2851253284");
pub const SIMPLEX_NOISE_3D: Handle<Shader> =
uuid_handle!("6239ad8c-41e1-4302-8f03-b2e41c154764");
pub const VORONOISE: Handle<Shader> =
uuid_handle!("06dc4bde-2702-4fe2-aff5-df69078c4b59");
pub const MOCK_FRESNEL: Handle<Shader> =
uuid_handle!("294d2ab5-554b-41f2-a1ca-95fb3689c1c3");
pub const PRISTINE_GRID: Handle<Shader> =
uuid_handle!("3511cc56-fc6c-44c6-bde3-1591164fbc79");
pub struct ShaderUtilsPlugin;
impl Plugin for ShaderUtilsPlugin {
fn build(&self, app: &mut App) {
embedded_asset!(
app,
"materials/pristine_grid.wgsl"
);
load_internal_asset!(
app,
PERLIN_NOISE_2D,
"shaders/perlin_noise_2d.wgsl",
Shader::from_wgsl
);
load_internal_asset!(
app,
PERLIN_NOISE_3D,
"shaders/perlin_noise_3d.wgsl",
Shader::from_wgsl
);
load_internal_asset!(
app,
SIMPLEX_NOISE_2D,
"shaders/simplex_noise_2d.wgsl",
Shader::from_wgsl
);
load_internal_asset!(
app,
SIMPLEX_NOISE_3D,
"shaders/simplex_noise_3d.wgsl",
Shader::from_wgsl
);
load_internal_asset!(
app,
VORONOISE,
"shaders/voronoise.wgsl",
Shader::from_wgsl
);
load_internal_asset!(
app,
MOCK_FRESNEL,
"shaders/mock_fresnel.wgsl",
Shader::from_wgsl
);
load_internal_asset!(
app,
PRISTINE_GRID,
"shaders/pristine_grid.wgsl",
Shader::from_wgsl
);
app.add_plugins(MaterialPlugin::<
PristineGridMaterial,
>::default());
}
}
impl Material for PristineGridMaterial {
fn fragment_shader() -> ShaderRef {
"embedded://bevy_shader_utils/materials/pristine_grid.wgsl".into()
}
}
#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
pub struct PristineGridMaterial {
#[uniform(0)]
pub color: LinearRgba,
#[uniform(0)]
pub cell_multiplier: Vec2,
#[uniform(0)]
pub line_size: Vec2,
}
impl Default for PristineGridMaterial {
fn default() -> Self {
Self {
color: LinearRgba::WHITE,
cell_multiplier: Vec2::splat(10.),
line_size: Vec2::splat(0.1),
}
}
}