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.as_mut().map(|f| f.begin(pass))
25        self.frame.begin(pass)
26    }
27}
28
29impl<'a, B: Backend> std::ops::Deref for ActiveFrame<'a, B> {
30    type Target = B::Frame;
31    fn deref(&self) -> &Self::Target {
32        self.frame
33    }
34}
35
36impl<'a, B: Backend> std::ops::DerefMut for ActiveFrame<'a, B> {
37    fn deref_mut(&mut self) -> &mut Self::Target {
38        self.frame
39    }
40}