pub struct ShaderOptions<T> { /* private fields */ }Expand description
ShaderOptions controlls the layout of your shader and wether or not you want
extra uniforms like a texture or a uniform buffer
Implementations§
Source§impl<T> ShaderOptions<T>
impl<T> ShaderOptions<T>
pub const EMPTY: Self
Sourcepub fn with_uniform_data(data: &UniformData<T>) -> Self
pub fn with_uniform_data(data: &UniformData<T>) -> Self
This will create a shader with a layout of:
struct MousePos {
stuff: vec2<f32>,
_junk: vec2<f32>,
}
@group(2) @binding(0)
var<uniform> mouse: MousePos;Examples found in repository?
examples/ngon.rs (line 34)
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 (line 28)
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}Sourcepub fn with_uniform_texture(texture: &UniformTexture) -> Self
pub fn with_uniform_texture(texture: &UniformTexture) -> Self
This will create a shader with a layout of:
@group(2) @binding(0)
var light_map: texture_2d<f32>;
@group(2) @binding(1)
var light_map_sampler: sampler;Sourcepub fn with_all(data: &UniformData<T>, texture: &UniformTexture) -> Self
pub fn with_all(data: &UniformData<T>, texture: &UniformTexture) -> Self
This will create a shader with a layout of:
@group(2) binding(0)
var<uniform> value: SomeStruct;
@group(2) @binding(1)
var light_map: texture_2d<f32>;
@group(2) @binding(2)
var light_map_sampler: sampler;Examples found in repository?
examples/lightmap.rs (line 34)
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<T> Freeze for ShaderOptions<T>
impl<T> RefUnwindSafe for ShaderOptions<T>where
T: RefUnwindSafe,
impl<T> Send for ShaderOptions<T>where
T: Send,
impl<T> Sync for ShaderOptions<T>where
T: Sync,
impl<T> Unpin for ShaderOptions<T>where
T: Unpin,
impl<T> UnwindSafe for ShaderOptions<T>where
T: UnwindSafe,
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