pub struct Shader { /* private fields */ }Expand description
An internal representation of an WGSL Shader. Under the hood this creates a new pipeline with or without the support for any extra uniforms. To be utilze the shader it must be added to a material
Implementations§
Source§impl Shader
impl Shader
Sourcepub fn new<P: AsRef<Path>, T>(
path: P,
options: ShaderOptions<T>,
engine: &mut Engine,
loading_op: LoadingOp,
) -> ResourceId<Shader>
pub fn new<P: AsRef<Path>, T>( path: P, options: ShaderOptions<T>, engine: &mut Engine, loading_op: LoadingOp, ) -> ResourceId<Shader>
Attempts to create a shader from a file. Requires ShaderOptions which implents Defualt for quick and easy creation.
Examples found in repository?
examples/ngon.rs (lines 32-37)
16fn main() {
17 let mut engine = EngineBuilder::new()
18 .with_resolution((500, 500))
19 .remove_vsync()
20 .build()
21 .unwrap();
22
23 let data = Time {
24 time: 0.0,
25 _pading: 0.0,
26 _padding2: 0.0,
27 _padding4: 0.0,
28 };
29
30 let uniform_data = UniformData::new(&data);
31
32 let mouse_shader = Shader::new(
33 "examples/sinewaves.wgsl",
34 ShaderOptions::with_uniform_data(&uniform_data),
35 &mut engine,
36 LoadingOp::Blocking,
37 );
38
39 let regular_material = MaterialBuilder::new()
40 .set_shader(mouse_shader)
41 .build(&mut engine);
42
43 let pos = Position {
44 regular_material,
45 time: data,
46 };
47
48 engine.run(pos);
49}More examples
examples/shader.rs (lines 26-31)
15fn main() {
16 let mut engine = EngineBuilder::new().build().unwrap();
17
18 let data = MousePos {
19 x: 0.0,
20 y: 0.0,
21 _junk: 0.0,
22 _padding2: 0.0,
23 };
24
25 let mouse_uniform_data = UniformData::new(&data);
26 let mouse_shader = Shader::new(
27 "examples/mouse.wgsl",
28 ShaderOptions::with_uniform_data(&mouse_uniform_data),
29 &mut engine,
30 LoadingOp::Blocking,
31 );
32
33 // On wasm we need this to be 16 bytes aligned so we have added this instead of
34 // a 0.0_f32
35 let circle_uniform_data = UniformData::new(&data);
36 let circle_shader = Shader::new(
37 "examples/movement.wgsl",
38 ShaderOptions::with_uniform_data(&circle_uniform_data),
39 &mut engine,
40 LoadingOp::Blocking,
41 );
42
43 let mouse_material = MaterialBuilder::new()
44 .set_shader(mouse_shader)
45 .build(&mut engine);
46
47 let circle_material = MaterialBuilder::new()
48 .set_shader(circle_shader)
49 .build(&mut engine);
50
51 let defualt_material = MaterialBuilder::new().build(&mut engine);
52
53 let game = ShaderExample {
54 data,
55 mouse_material,
56 circle_material,
57 defualt_material,
58 theta: data,
59 };
60
61 engine.run(game);
62}examples/lightmap.rs (lines 35-40)
15fn main() {
16 let mut engine = EngineBuilder::new()
17 .set_window_title("Lightmap")
18 .with_resolution((800, 800))
19 .build()
20 .unwrap();
21
22 let uniform_texture = UniformTexture::new(&engine, engine.get_window_size());
23
24 let light = Light {
25 colour: Colour::ORANGE,
26 pos_x: 0.0,
27 pos_y: 0.0,
28 brightness: 0.75,
29 aspect_ratio: 1.0,
30 };
31
32 let light_data = UniformData::new(&light);
33
34 let shader_options = ShaderOptions::with_all(&light_data, &uniform_texture);
35 let light_shader = Shader::new(
36 "examples/light.wgsl",
37 shader_options,
38 &mut engine,
39 LoadingOp::Blocking,
40 );
41
42 let material = MaterialBuilder::new()
43 .set_shader(light_shader)
44 .build(&mut engine);
45
46 let ocluder_material = MaterialBuilder::new().build(&mut engine);
47
48 let rectangles = vec![
49 Rectangle::new(Vec2 { x: 120.0, y: 20.0 }, Vec2 { x: 50.0, y: 50.0 }),
50 Rectangle::new(Vec2 { x: 270.0, y: 70.0 }, Vec2 { x: 50.0, y: 50.0 }),
51 Rectangle::new(Vec2 { x: 130.0, y: 280.0 }, Vec2 { x: 50.0, y: 50.0 }),
52 Rectangle::new(Vec2 { x: 220.0, y: 300.0 }, Vec2 { x: 50.0, y: 50.0 }),
53 Rectangle::new(Vec2 { x: 350.0, y: 350.0 }, Vec2 { x: 100.0, y: 100.0 }),
54 ];
55
56 let s = TextureExample {
57 material,
58 ocluder_material,
59 light,
60 uniform_texture,
61 rectangles,
62 mouse_pos: ZEROS,
63 };
64
65 engine.run(s);
66}Trait Implementations§
Auto Trait Implementations§
impl !Freeze for Shader
impl !RefUnwindSafe for Shader
impl Send for Shader
impl Sync for Shader
impl Unpin for Shader
impl !UnwindSafe for Shader
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
impl<T, W> HasTypeWitness<W> for Twhere
W: MakeTypeWitness<Arg = T>,
T: ?Sized,
Source§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more