1pub mod scene;
2pub mod gfx;
3pub mod multi;
4use crate::gfx::Gfx;
5use crate::scene::{
6 Queue, Scene,
7};
8
9#[derive(Default)]
10pub enum RenderEntry {
11 #[default]
12 NotReady,
13 Ready(Gfx),
14}
15
16#[derive(Default)]
17pub struct Render {
18 pub entry: RenderEntry,
19 pub scenes: Vec<Scene>,
20}
21
22impl Render {
23 pub fn new() -> Self {
24 Render {
25 entry:
26 RenderEntry::NotReady,
27 scenes: Vec::new(),
28 }
29 }
30
31 pub fn ready(&mut self) {
32 println!("Render::ready");
33 match &self.entry {
34 RenderEntry::Ready(ref gfx) => {
35 for scene in
36 self.scenes.iter_mut()
37 {
38 scene.ready(gfx);
39 }
40 },
41 _ => panic!("Render::get_gfx called before gfx is ready"),
42 }
43 }
44
45 pub fn paint(&mut self) {
46 match &self.entry {
47 RenderEntry::Ready(ref gfx) => {
48 for scene in self.scenes.iter_mut() {
49 scene.paint(gfx);
50 }
51 },
52 _ => panic!("Render::get_gfx called before gfx is ready"),
53 }
54 }
55
56 pub fn add_scene<T: Queue>(
57 &mut self,
58 name: impl Into<String> + Clone,
59 ) -> &mut Self {
60 println!(
61 "add_scene: {}",
62 name.clone().into()
63 );
64 let mut s =
65 Scene::new(name.into());
66 T::introduce(&mut s);
67 self.scenes.push(s);
68 self
69 }
70}