Skip to main content

pebble/rendering/
active_frame.rs

1use crate::prelude::{Backend, ColorTarget, FrameOperations, Pass};
2
3pub struct ActiveFrame<'a, B: Backend> {
4    pub(crate) frame: &'a mut B::Frame,
5}
6
7impl<'a, B: Backend> ActiveFrame<'a, B> {
8    /// Begin a simple full-screen color pass, clearing to `clear`.
9    pub fn render_context(
10        &mut self,
11        clear: [f32; 4],
12    ) -> <B::Frame as FrameOperations>::Context<'_> {
13        self.begin_pass(Pass {
14            colors: &[ColorTarget::Default { clear: Some(clear) }],
15            depth: None,
16        })
17    }
18
19    /// Begin an arbitrary render pass described by `pass`.
20    pub fn begin_pass(
21        &mut self,
22        pass: Pass<B::Frame>,
23    ) -> <B::Frame as FrameOperations>::Context<'_> {
24        self.frame.begin(pass)
25    }
26}
27
28impl<'a, B: Backend> std::ops::Deref for ActiveFrame<'a, B> {
29    type Target = B::Frame;
30    fn deref(&self) -> &Self::Target {
31        self.frame
32    }
33}
34
35impl<'a, B: Backend> std::ops::DerefMut for ActiveFrame<'a, B> {
36    fn deref_mut(&mut self) -> &mut Self::Target {
37        self.frame
38    }
39}