pub struct RenderPass<'a> {
pub context: &'a mut FrameContext,
/* private fields */
}Expand description
A render pass wrapper that automatically returns the encoder to the frame context.
Fields§
§context: &'a mut FrameContextImplementations§
Source§impl<'a> RenderPass<'a>
impl<'a> RenderPass<'a>
Sourcepub fn descriptor(&mut self) -> &mut RenderPass<'static>
pub fn descriptor(&mut self) -> &mut RenderPass<'static>
Examples found in repository?
examples/image_blitting.rs (line 478)
444 fn render(
445 &mut self,
446 _ctx: &mut astrelis_winit::app::AppCtx,
447 window_id: WindowId,
448 events: &mut astrelis_winit::event::EventBatch,
449 ) {
450 let Some(window) = self.windows.get_mut(&window_id) else {
451 return;
452 };
453
454 // Handle resize
455 events.dispatch(|event| {
456 if let astrelis_winit::event::Event::WindowResized(size) = event {
457 window.resized(*size);
458 astrelis_winit::event::HandleStatus::consumed()
459 } else {
460 astrelis_winit::event::HandleStatus::ignored()
461 }
462 });
463
464 let mut frame = window.begin_drawing();
465
466 {
467 let mut render_pass = RenderPassBuilder::new()
468 .label("Blit Render Pass")
469 .target(RenderTarget::Surface)
470 .clear_color(wgpu::Color {
471 r: 0.05,
472 g: 0.05,
473 b: 0.08,
474 a: 1.0,
475 })
476 .build(&mut frame);
477
478 let pass = render_pass.descriptor();
479 pass.set_pipeline(&self.pipeline);
480 pass.set_bind_group(0, &self.bind_group, &[]);
481 pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
482 pass.draw(0..6, 0..1);
483 }
484
485 frame.finish();
486 }More examples
examples/sprite_sheet.rs (line 420)
386 fn render(
387 &mut self,
388 _ctx: &mut astrelis_winit::app::AppCtx,
389 window_id: WindowId,
390 events: &mut astrelis_winit::event::EventBatch,
391 ) {
392 let Some(window) = self.windows.get_mut(&window_id) else {
393 return;
394 };
395
396 // Handle resize
397 events.dispatch(|event| {
398 if let astrelis_winit::event::Event::WindowResized(size) = event {
399 window.resized(*size);
400 astrelis_winit::event::HandleStatus::consumed()
401 } else {
402 astrelis_winit::event::HandleStatus::ignored()
403 }
404 });
405
406 let mut frame = window.begin_drawing();
407
408 {
409 let mut render_pass = RenderPassBuilder::new()
410 .label("Sprite Render Pass")
411 .target(RenderTarget::Surface)
412 .clear_color(wgpu::Color {
413 r: 0.1,
414 g: 0.1,
415 b: 0.15,
416 a: 1.0,
417 })
418 .build(&mut frame);
419
420 let pass = render_pass.descriptor();
421 pass.set_pipeline(&self.pipeline);
422 pass.set_bind_group(0, &self.bind_group, &[]);
423 pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
424 pass.draw(0..6, 0..1);
425 }
426
427 frame.finish();
428 }examples/textured_window.rs (line 276)
241 fn render(
242 &mut self,
243 _ctx: &mut astrelis_winit::app::AppCtx,
244 window_id: WindowId,
245 events: &mut astrelis_winit::event::EventBatch,
246 ) {
247 if window_id != self.window_id {
248 return;
249 }
250
251 // Handle window resize events
252 events.dispatch(|event| {
253 if let astrelis_winit::event::Event::WindowResized(size) = event {
254 self.window.resized(*size);
255 astrelis_winit::event::HandleStatus::consumed()
256 } else {
257 astrelis_winit::event::HandleStatus::ignored()
258 }
259 });
260
261 let mut frame = self.window.begin_drawing();
262
263 // Using new simplified RenderPassBuilder API with RenderTarget
264 {
265 let mut render_pass = RenderPassBuilder::new()
266 .label("Render Pass")
267 .target(RenderTarget::Surface)
268 .clear_color(wgpu::Color {
269 r: 0.1,
270 g: 0.2,
271 b: 0.3,
272 a: 1.0,
273 })
274 .build(&mut frame);
275
276 let pass = render_pass.descriptor();
277 pass.set_pipeline(&self.pipeline);
278 pass.set_bind_group(0, &self.bind_group, &[]);
279 pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
280 pass.draw(0..6, 0..1);
281 }
282
283 frame.finish();
284 }examples/renderer_api.rs (line 306)
276 fn render(&mut self, _ctx: &mut AppCtx, window_id: WindowId, events: &mut EventBatch) {
277 if window_id != self.window_id {
278 return;
279 }
280
281 // Handle window-specific resize events
282 events.dispatch(|event| {
283 if let astrelis_winit::event::Event::WindowResized(size) = event {
284 self.window.resized(*size);
285 astrelis_winit::event::HandleStatus::consumed()
286 } else {
287 astrelis_winit::event::HandleStatus::ignored()
288 }
289 });
290
291 let mut frame = self.window.begin_drawing();
292
293 // Pass 1: Render to offscreen framebuffer using new simplified API
294 {
295 let mut render_pass = RenderPassBuilder::new()
296 .label("Offscreen Pass")
297 .target(RenderTarget::Framebuffer(&self.offscreen_fb))
298 .clear_color(wgpu::Color {
299 r: 0.2,
300 g: 0.1,
301 b: 0.3,
302 a: 1.0,
303 })
304 .build(&mut frame);
305
306 let pass = render_pass.descriptor();
307 pass.set_pipeline(&self.pipeline);
308 pass.set_bind_group(0, &self.bind_group, &[]);
309 pass.set_vertex_buffer(0, self.vertex_buffer.slice(..));
310 pass.draw(0..6, 0..1);
311 }
312
313 // Pass 2: Blit framebuffer to surface using new simplified API
314 {
315 let mut render_pass = RenderPassBuilder::new()
316 .label("Surface Pass")
317 .target(RenderTarget::Surface)
318 .clear_color(wgpu::Color {
319 r: 0.1,
320 g: 0.2,
321 b: 0.3,
322 a: 1.0,
323 })
324 .build(&mut frame);
325
326 let pass = render_pass.descriptor();
327 pass.set_pipeline(&self.blit_pipeline);
328 pass.set_bind_group(0, &self.blit_bind_group, &[]);
329 // Draw fullscreen triangle
330 pass.draw(0..3, 0..1);
331 }
332
333 frame.finish();
334 }pub fn finish(self)
Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for RenderPass<'a>
impl<'a> !RefUnwindSafe for RenderPass<'a>
impl<'a> Send for RenderPass<'a>
impl<'a> Sync for RenderPass<'a>
impl<'a> Unpin for RenderPass<'a>
impl<'a> !UnwindSafe for RenderPass<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§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> 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