diff options
Diffstat (limited to '')
-rw-r--r-- | graphics/src/layer.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/graphics/src/layer.rs b/graphics/src/layer.rs new file mode 100644 index 00000000..5b8aacab --- /dev/null +++ b/graphics/src/layer.rs @@ -0,0 +1,47 @@ +pub trait Layer { + type Cache; + + fn new() -> Self; + + fn clear(&mut self); +} + +pub struct Recorder<T: Layer> { + layers: Vec<T>, + caches: Vec<T::Cache>, + stack: Vec<Kind>, + current: usize, +} + +enum Kind { + Fresh(usize), + Cache(usize), +} + +impl<T: Layer> Recorder<T> { + pub fn new() -> Self { + Self { + layers: vec![Layer::new()], + caches: Vec::new(), + stack: Vec::new(), + current: 0, + } + } + + pub fn fill_quad(&mut self) {} + + pub fn push_cache(&mut self, cache: T::Cache) { + self.caches.push(cache); + } + + pub fn clear(&mut self) { + self.caches.clear(); + self.stack.clear(); + + for mut layer in self.layers { + layer.clear(); + } + + self.current = 0; + } +} |