ready_paint/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
pub mod scene;
pub mod gfx;
use crate::gfx::Gfx;
use crate::scene::{
     Queue, Scene,
};

#[derive(Default)]
pub enum RenderEntry {
    #[default]
    NotReady,
    Ready(Gfx),
}

#[derive(Default)]
pub struct Render {
    pub entry: RenderEntry,
    pub scenes: Vec<Scene>,
}

impl Render {
    pub fn new() -> Self {
        Render {
            entry:
                RenderEntry::NotReady,
            scenes: Vec::new(),
        }
    }

    pub fn ready(&mut self) {
        println!("Render::ready");
        match &self.entry {
            RenderEntry::Ready(ref gfx) => {
                for scene in
                    self.scenes.iter_mut()
                {
                    scene.ready(gfx);
                }
            },
            _ => panic!("Render::get_gfx called before gfx is ready"),
        }
    }

    pub fn paint(&mut self) {
        match &self.entry {
            RenderEntry::Ready(ref gfx) => {
                for scene in self.scenes.iter_mut() {
                    scene.paint(gfx);
                }
            },
            _ => panic!("Render::get_gfx called before gfx is ready"),
        }
    }

    pub fn add_scene<T: Queue>(
        &mut self,
        name: impl Into<String> + Clone,
    ) -> &mut Self {
        println!(
            "add_scene: {}",
            name.clone().into()
        );
        let mut s =
            Scene::new(name.into());
        T::introduce(&mut s);
        self.scenes.push(s);
        self
    }
}