ready-paint 0.2.2

A simple ready-paint schema using wgpu and winit.
Documentation
pub mod gfx;
pub mod multi;
pub mod scene;
pub mod time;
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
    }
}