use super::{Index, TextureArray};
use crate::graphics::{gpu, IntoQuad, Target};
#[derive(Debug)]
pub struct Batch {
texture_array: TextureArray,
instances: Vec<gpu::Quad>,
}
impl Batch {
pub fn new(texture_array: TextureArray) -> Batch {
Batch {
texture_array,
instances: Vec::new(),
}
}
#[inline]
pub fn add<Q: IntoQuad>(&mut self, index: &Index, quad: Q) {
let mut quad = quad
.into_quad(self.texture_array.x_unit, self.texture_array.y_unit);
quad.source.x += index.offset.x;
quad.source.y += index.offset.y;
let mut instance = gpu::Quad::from(quad);
instance.layer = index.layer.into();
self.instances.push(instance);
}
pub fn draw(&self, target: &mut Target<'_>) {
target.draw_texture_quads(
&self.texture_array.texture,
&self.instances[..],
);
}
}