use glam::I16Vec2; #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct AbsRef { pub off: I16Vec2, pub frame: u64, } pub struct Frame(pub Vec); impl Frame { pub fn index(&self, res: I16Vec2, p: I16Vec2) -> [usize; 3] { let res = res.as_usizevec2(); let p = p.as_usizevec2(); let ystride = res.y; let ysize = res.x * ystride; let uvstride = res.x / 2; let usize = uvstride * (res.y / 2); let puv = p / 2; [ p.x + p.y * ystride, ysize + puv.x + puv.y * uvstride, ysize + usize + puv.x + puv.y * uvstride, ] } pub fn get(&self, res: I16Vec2, p: I16Vec2) -> [u8; 3] { self.index(res, p).map(|i| self.0[i]) } }