use crate::util::vertex_3d::{Vertex3D}; use std::sync::Arc; use std::collections::HashMap; use crate::canvas::canvas_state::{Drawable, CanvasTextureHandle, CanvasImageHandle}; use crate::canvas::canvas_text::CanvasFontHandle; use crate::canvas::shader::text_shader::GlyphInstance; /// pub struct CanvasFrame { pub colored_drawables: Vec, pub textured_drawables: HashMap, Vec>>, pub image_drawables: HashMap, Vec>>, pub text_drawables: HashMap, Vec> } impl CanvasFrame { /// Creates a bare canvas frame with empty accumulators pub fn new() -> CanvasFrame { CanvasFrame { colored_drawables: vec![], textured_drawables: Default::default(), image_drawables: Default::default(), text_drawables: Default::default() } } // TODO: Fix this for text and fonts /// Accumulates the drawables collected Vertex2D's pub fn draw(&mut self, drawable: &dyn Drawable) { match drawable.get_texture_handle() { Some(handle) => { self.textured_drawables .entry(handle.clone()) .or_insert(Vec::new()) .push(drawable.collect()); } None => { match drawable.get_image_handle() { Some(handle) => { self.image_drawables .entry(handle.clone()) .or_insert(Vec::new()) .push(drawable.collect()); } None => { self.colored_drawables.extend(drawable.collect()); } } } } } }