crystal_api/
render_target.rs

1use std::sync::Arc;
2
3use crate::{debug::log, errors::GraphicsResult, proxies::RenderTargetProxy, texture::Texture};
4
5/// Used to render into
6pub struct RenderTarget {
7    pub(crate) inner: Arc<dyn RenderTargetProxy>,
8}
9
10impl RenderTarget {
11    pub(crate) fn new(proxy: Arc<dyn RenderTargetProxy>) -> Self {
12        Self { inner: proxy }
13    }
14
15    /// Inherits a new `RenderTarget` from current
16    pub fn inherit(
17        &self,
18        extent: [u32; 2],
19        anisotropy_texels: f32,
20        msaa_samples: u8,
21    ) -> GraphicsResult<(Self, Texture)> {
22        log!(
23            "creating render target [ extent: {}x{} ]",
24            extent[0],
25            extent[1]
26        );
27
28        let (render_target, texture) =
29            self.inner
30                .create_render_target(extent, anisotropy_texels, msaa_samples)?;
31
32        Ok((
33            Self {
34                inner: render_target,
35            },
36            Texture::new(texture),
37        ))
38    }
39}