lambda/render/
render_pass.rs

1//! Render pass builders and definitions for lambda runtimes and applications.
2use std::rc::Rc;
3
4use lambda_platform::gfx::render_pass;
5
6use super::RenderContext;
7
8#[derive(Debug)]
9pub struct RenderPass {
10  render_pass: Rc<render_pass::RenderPass<super::internal::RenderBackend>>,
11}
12
13impl RenderPass {
14  /// Destroy the render pass with the render context that created it.
15  pub fn destroy(self, render_context: &RenderContext) {
16    Rc::try_unwrap(self.render_pass)
17      .expect("Failed to destroy render pass. Is something holding a reference to it?")
18      .destroy(render_context.internal_gpu());
19    logging::debug!("Render pass destroyed");
20  }
21}
22
23/// Internal Renderpass functions for lambda.
24impl RenderPass {
25  /// Retrieve a reference to the lower level render pass.
26  pub(super) fn internal_render_pass(
27    &self,
28  ) -> &Rc<render_pass::RenderPass<super::internal::RenderBackend>> {
29    return &self.render_pass;
30  }
31
32  /// Converts
33  pub(super) fn into_gfx_render_pass(
34    &self,
35  ) -> Rc<render_pass::RenderPass<super::internal::RenderBackend>> {
36    return self.render_pass.clone();
37  }
38}
39
40pub struct RenderPassBuilder {}
41
42impl RenderPassBuilder {
43  /// Creates a new render pass builder.
44  pub fn new() -> Self {
45    return Self {};
46  }
47
48  /// Builds a render pass that can be used for defining
49  pub fn build(self, render_context: &RenderContext) -> RenderPass {
50    let render_pass =
51      lambda_platform::gfx::render_pass::RenderPassBuilder::new()
52        .build(render_context.internal_gpu());
53    return RenderPass {
54      render_pass: Rc::new(render_pass),
55    };
56  }
57}