1use bevy::{
2 asset::{
3 embedded_asset, load_internal_asset, weak_handle,
4 },
5 prelude::*,
6 render::render_resource::{AsBindGroup, ShaderRef},
7};
8
9const PERLIN_NOISE_2D: Handle<Shader> =
14 weak_handle!("990ee5ac-3d4a-4593-841f-6b46f02abcb3");
15pub const PERLIN_NOISE_3D: Handle<Shader> =
16 weak_handle!("70568ff4-c5ca-4411-b099-692926332401");
17pub const SIMPLEX_NOISE_2D: Handle<Shader> =
18 weak_handle!("f6a37262-741d-442e-b990-fb2851253284");
19pub const SIMPLEX_NOISE_3D: Handle<Shader> =
20 weak_handle!("6239ad8c-41e1-4302-8f03-b2e41c154764");
21pub const VORONOISE: Handle<Shader> =
24 weak_handle!("06dc4bde-2702-4fe2-aff5-df69078c4b59");
25pub const MOCK_FRESNEL: Handle<Shader> =
27 weak_handle!("294d2ab5-554b-41f2-a1ca-95fb3689c1c3");
28pub const PRISTINE_GRID: Handle<Shader> =
29 weak_handle!("3511cc56-fc6c-44c6-bde3-1591164fbc79");
30
31pub struct ShaderUtilsPlugin;
51
52impl Plugin for ShaderUtilsPlugin {
53 fn build(&self, app: &mut App) {
54 embedded_asset!(
77 app,
78 "materials/pristine_grid.wgsl"
79 );
80
81 load_internal_asset!(
82 app,
83 PERLIN_NOISE_2D,
84 "shaders/perlin_noise_2d.wgsl",
85 Shader::from_wgsl
86 );
87 load_internal_asset!(
88 app,
89 PERLIN_NOISE_3D,
90 "shaders/perlin_noise_3d.wgsl",
91 Shader::from_wgsl
92 );
93 load_internal_asset!(
94 app,
95 SIMPLEX_NOISE_2D,
96 "shaders/simplex_noise_2d.wgsl",
97 Shader::from_wgsl
98 );
99 load_internal_asset!(
100 app,
101 SIMPLEX_NOISE_3D,
102 "shaders/simplex_noise_3d.wgsl",
103 Shader::from_wgsl
104 );
105 load_internal_asset!(
106 app,
107 VORONOISE,
108 "shaders/voronoise.wgsl",
109 Shader::from_wgsl
110 );
111 load_internal_asset!(
112 app,
113 MOCK_FRESNEL,
114 "shaders/mock_fresnel.wgsl",
115 Shader::from_wgsl
116 );
117 load_internal_asset!(
118 app,
119 PRISTINE_GRID,
120 "shaders/pristine_grid.wgsl",
121 Shader::from_wgsl
122 );
123
124 app.add_plugins(MaterialPlugin::<
125 PristineGridMaterial,
126 >::default());
127 }
128}
129
130impl Material for PristineGridMaterial {
131 fn fragment_shader() -> ShaderRef {
132 "embedded://bevy_shader_utils/materials/pristine_grid.wgsl".into()
133 }
134}
135
136#[derive(Asset, TypePath, AsBindGroup, Debug, Clone)]
139pub struct PristineGridMaterial {
140 #[uniform(0)]
141 pub color: LinearRgba,
142 #[uniform(0)]
143 pub cell_multiplier: Vec2,
144 #[uniform(0)]
145 pub line_size: Vec2,
146}
147
148impl Default for PristineGridMaterial {
149 fn default() -> Self {
150 Self {
151 color: LinearRgba::WHITE,
152 cell_multiplier: Vec2::splat(10.),
153 line_size: Vec2::splat(0.1),
154 }
155 }
156}