pub struct RenderHandle<'a> { /* private fields */ }Expand description
The renderer is used to create render passes or Renderers
Implementations§
Source§impl<'a> RenderHandle<'a>
impl<'a> RenderHandle<'a>
Sourcepub fn begin_pass<'p>(&mut self, clear_colour: Colour) -> Renderer<'_, 'p>
pub fn begin_pass<'p>(&mut self, clear_colour: Colour) -> Renderer<'_, 'p>
Creates a render pass that will render onto the windows surface.
Examples found in repository?
More examples
examples/ngon.rs (line 66)
65 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
66 let mut render_handle = render.begin_pass(Colour::BLACK);
67
68 self.regular_material.add_regular_n_gon(
69 120,
70 200.0,
71 vec2! { 250.0 },
72 Colour::BLUE,
73 &render_handle,
74 );
75
76 self.regular_material.draw(&mut render_handle);
77 }examples/text.rs (line 34)
33 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
34 let mut render_handle = render.begin_pass(Colour::BLACK);
35
36 self.text_mat
37 .add_instance(vec2! { 0.0 }, Colour::WHITE, &render_handle);
38 self.text_mat.add_instance_with_rotation(
39 Vec2 { x: 100.0, y: 0.0 },
40 Colour::WHITE,
41 45.0,
42 &render_handle,
43 );
44
45 self.text_mat.draw(&mut render_handle);
46 }examples/lightmap.rs (line 83)
80 fn render<'o>(&'o mut self, mut render_handle: RenderHandle<'o>) {
81 self.create_shadow_map(&mut render_handle);
82
83 let mut p2 = render_handle.begin_pass(Colour::BLACK);
84 let size = p2.get_size();
85 let size = Vec2 {
86 x: size.x as f32,
87 y: size.y as f32,
88 };
89
90 self.material
91 .add_rectangle(Vec2 { x: 0.0, y: 0.0 }, size, Colour::WHITE, &p2);
92 self.material.draw(&mut p2);
93 }examples/line.rs (line 27)
26 fn render<'o>(&'o mut self, mut render: RenderHandle<'o>) {
27 let mut render_handle = render.begin_pass(Colour::BLACK);
28
29 self.material.add_line(
30 vec2! { 0.0, 0.0 },
31 vec2! { 100.0, 100.0 },
32 Colour::WHITE,
33 &render_handle,
34 );
35
36 self.material.add_screenspace_line(
37 vec2!(-1.0, 1.0),
38 vec2!(1.0, -1.0),
39 Colour::RED,
40 &render_handle,
41 );
42
43 self.material.draw(&mut render_handle);
44 }Additional examples can be found in:
Sourcepub fn begin_texture_pass<'o, 'p>(
&'o mut self,
texture: &'o mut UniformTexture,
clear_colour: Colour,
) -> Renderer<'o, 'p>
pub fn begin_texture_pass<'o, 'p>( &'o mut self, texture: &'o mut UniformTexture, clear_colour: Colour, ) -> Renderer<'o, 'p>
Creates a render pass that can be used to render to a texture. This is usefull for lightmaps, or generating heightmaps. Any advanced graphics techique that requires uniform textures.
Examples found in repository?
examples/lightmap.rs (line 140)
139 fn create_shadow_map<'o>(&mut self, render_handle: &mut RenderHandle<'o>) {
140 let mut p1 = render_handle.begin_texture_pass(&mut self.uniform_texture, Colour::WHITE);
141
142 let light_pos = self.mouse_pos;
143
144 for rect in self.rectangles.iter() {
145 for (segment_1, segment_2) in rect.create_segments() {
146 let vert_1 = segment_1;
147 let vert_2 = segment_1
148 + Vec2 {
149 x: 300.0 * (segment_1.x - light_pos.x),
150 y: 300.0 * (segment_1.y - light_pos.y),
151 };
152 let vert_3 = segment_2;
153 let vert_4 = segment_2
154 + Vec2 {
155 x: 300.0 * (segment_2.x - light_pos.x),
156 y: 300.0 * (segment_2.y - light_pos.y),
157 };
158
159 let mut arr = [vert_1, vert_2, vert_3, vert_4];
160
161 let center_point = Vec2 {
162 x: (vert_1.x + vert_2.x + vert_3.x + vert_4.x) / 4.0,
163 y: (vert_1.y + vert_2.y + vert_3.y + vert_4.y) / 4.0,
164 };
165
166 for point in arr.iter_mut() {
167 *point = *point - center_point;
168 }
169 arr.sort_by(|left, right| compare_points(left, right));
170 for point in arr.iter_mut() {
171 *point = *point + center_point;
172 }
173
174 self.ocluder_material
175 .add_custom(arr, [ZEROS; 4], 0.0, Colour::BLACK, &p1);
176 }
177 }
178
179 // makes sure there is not light in the squares
180 self.rectangles.iter().for_each(|rect| {
181 self.ocluder_material
182 .add_rectangle(rect.pos, rect.size, Colour::BLACK, &mut p1)
183 });
184
185 self.ocluder_material.draw(&mut p1);
186 }Trait Implementations§
Source§impl Drop for RenderHandle<'_>
impl Drop for RenderHandle<'_>
Auto Trait Implementations§
impl<'a> Freeze for RenderHandle<'a>
impl<'a> !RefUnwindSafe for RenderHandle<'a>
impl<'a> Send for RenderHandle<'a>
impl<'a> Sync for RenderHandle<'a>
impl<'a> Unpin for RenderHandle<'a>
impl<'a> !UnwindSafe for RenderHandle<'a>
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