pub struct MaterialBuilder<T> { /* private fields */ }Expand description
A builder struct used to create Materials
Implementations§
Source§impl<T> MaterialBuilder<T>
impl<T> MaterialBuilder<T>
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new MaterialBuilder, that contains no texture, custom shaders, or uniforms
Examples found in repository?
examples/debug_triangle.rs (line 15)
9fn main() {
10 let mut engine = EngineBuilder::new()
11 .with_resolution((400, 400))
12 .build()
13 .unwrap();
14
15 let material = MaterialBuilder::new().build(&mut engine);
16
17 let pos = DebugTriangle { material };
18
19 engine.run(pos);
20}More examples
examples/rectangles.rs (line 17)
12fn main() {
13 let mut engine = EngineBuilder::new().build().unwrap();
14
15 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
16
17 let texture_material = MaterialBuilder::new()
18 .add_texture(texture)
19 .build(&mut engine);
20 let regular_material = MaterialBuilder::new().build(&mut engine);
21
22 let pos = Position {
23 pos: vec2! { 0.0 },
24 regular_material,
25 texture_material,
26 state: false,
27 };
28
29 engine.run(pos);
30}examples/camera.rs (line 18)
13fn main() {
14 let mut engine = EngineBuilder::new().build().unwrap();
15
16 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
17
18 let material = MaterialBuilder::new()
19 .add_texture(texture)
20 .build(&mut engine);
21
22 let camera = Camera::default();
23
24 let text = TextMaterial::new(
25 "Mouse pos: 0,0 \n Mouse pos: 0, 0",
26 Colour::WHITE,
27 15.0,
28 20.0,
29 );
30
31 let game = CameraExample {
32 material,
33 text,
34 camera,
35 };
36
37 engine.run(game);
38}examples/texture.rs (line 21)
12fn main() {
13 let mut engine = EngineBuilder::new()
14 .set_window_title("Testing Triangle")
15 .with_resolution((400, 400))
16 .build()
17 .unwrap();
18
19 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
20
21 let texture = MaterialBuilder::new()
22 .add_texture(texture)
23 .build(&mut engine);
24 let defualt = MaterialBuilder::new().build(&mut engine);
25
26 let s = TextureExample {
27 current: texture,
28 other: defualt,
29 pos: vec2! { 0.0 },
30 };
31
32 engine.run(s);
33}examples/ngon.rs (line 39)
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}examples/shader.rs (line 43)
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}Additional examples can be found in:
Sourcepub fn add_texture(self, texture: ResourceId<Texture>) -> Self
pub fn add_texture(self, texture: ResourceId<Texture>) -> Self
Adds a Texture to the Material
Examples found in repository?
examples/rectangles.rs (line 18)
12fn main() {
13 let mut engine = EngineBuilder::new().build().unwrap();
14
15 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
16
17 let texture_material = MaterialBuilder::new()
18 .add_texture(texture)
19 .build(&mut engine);
20 let regular_material = MaterialBuilder::new().build(&mut engine);
21
22 let pos = Position {
23 pos: vec2! { 0.0 },
24 regular_material,
25 texture_material,
26 state: false,
27 };
28
29 engine.run(pos);
30}More examples
examples/camera.rs (line 19)
13fn main() {
14 let mut engine = EngineBuilder::new().build().unwrap();
15
16 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
17
18 let material = MaterialBuilder::new()
19 .add_texture(texture)
20 .build(&mut engine);
21
22 let camera = Camera::default();
23
24 let text = TextMaterial::new(
25 "Mouse pos: 0,0 \n Mouse pos: 0, 0",
26 Colour::WHITE,
27 15.0,
28 20.0,
29 );
30
31 let game = CameraExample {
32 material,
33 text,
34 camera,
35 };
36
37 engine.run(game);
38}examples/texture.rs (line 22)
12fn main() {
13 let mut engine = EngineBuilder::new()
14 .set_window_title("Testing Triangle")
15 .with_resolution((400, 400))
16 .build()
17 .unwrap();
18
19 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
20
21 let texture = MaterialBuilder::new()
22 .add_texture(texture)
23 .build(&mut engine);
24 let defualt = MaterialBuilder::new().build(&mut engine);
25
26 let s = TextureExample {
27 current: texture,
28 other: defualt,
29 pos: vec2! { 0.0 },
30 };
31
32 engine.run(s);
33}Sourcepub fn set_shader(self, shader: ResourceId<Shader>) -> Self
pub fn set_shader(self, shader: ResourceId<Shader>) -> Self
Sets the shader for the Material
Examples found in repository?
examples/ngon.rs (line 40)
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 44)
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 (line 43)
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}Sourcepub fn add_uniform_data<H: ShaderType + WriteInto>(
self,
_data: &UniformData<H>,
) -> MaterialBuilder<H>
pub fn add_uniform_data<H: ShaderType + WriteInto>( self, _data: &UniformData<H>, ) -> MaterialBuilder<H>
This is used to set the type of data used for the materials Uniform ensuring type saftey across the GPU
Sourcepub fn build(self, engine_handle: &mut Engine) -> Material<T>
pub fn build(self, engine_handle: &mut Engine) -> Material<T>
Turns the builder into a Material
Examples found in repository?
examples/debug_triangle.rs (line 15)
9fn main() {
10 let mut engine = EngineBuilder::new()
11 .with_resolution((400, 400))
12 .build()
13 .unwrap();
14
15 let material = MaterialBuilder::new().build(&mut engine);
16
17 let pos = DebugTriangle { material };
18
19 engine.run(pos);
20}More examples
examples/rectangles.rs (line 19)
12fn main() {
13 let mut engine = EngineBuilder::new().build().unwrap();
14
15 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
16
17 let texture_material = MaterialBuilder::new()
18 .add_texture(texture)
19 .build(&mut engine);
20 let regular_material = MaterialBuilder::new().build(&mut engine);
21
22 let pos = Position {
23 pos: vec2! { 0.0 },
24 regular_material,
25 texture_material,
26 state: false,
27 };
28
29 engine.run(pos);
30}examples/camera.rs (line 20)
13fn main() {
14 let mut engine = EngineBuilder::new().build().unwrap();
15
16 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
17
18 let material = MaterialBuilder::new()
19 .add_texture(texture)
20 .build(&mut engine);
21
22 let camera = Camera::default();
23
24 let text = TextMaterial::new(
25 "Mouse pos: 0,0 \n Mouse pos: 0, 0",
26 Colour::WHITE,
27 15.0,
28 20.0,
29 );
30
31 let game = CameraExample {
32 material,
33 text,
34 camera,
35 };
36
37 engine.run(game);
38}examples/texture.rs (line 23)
12fn main() {
13 let mut engine = EngineBuilder::new()
14 .set_window_title("Testing Triangle")
15 .with_resolution((400, 400))
16 .build()
17 .unwrap();
18
19 let texture = Texture::new(&mut engine, "examples/bplogo.png", LoadingOp::Blocking);
20
21 let texture = MaterialBuilder::new()
22 .add_texture(texture)
23 .build(&mut engine);
24 let defualt = MaterialBuilder::new().build(&mut engine);
25
26 let s = TextureExample {
27 current: texture,
28 other: defualt,
29 pos: vec2! { 0.0 },
30 };
31
32 engine.run(s);
33}examples/ngon.rs (line 41)
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}examples/shader.rs (line 45)
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}Additional examples can be found in:
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for MaterialBuilder<T>
impl<T> !RefUnwindSafe for MaterialBuilder<T>
impl<T> Send for MaterialBuilder<T>where
T: Send,
impl<T> Sync for MaterialBuilder<T>where
T: Sync,
impl<T> Unpin for MaterialBuilder<T>where
T: Unpin,
impl<T> !UnwindSafe for MaterialBuilder<T>
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