- fn put_clr8(&self, dst: &mut [u16], dstride: usize) {
- for i in 0..4 {
- let off = (i & 1) * 2 + (i & 2) * dstride;
- let cur_flg = (self.clr8_flags >> (i * 4)) & 0xF;
- dst[off] = self.clr8[i][( !cur_flg & 1) as usize];
- dst[off + 1] = self.clr8[i][((!cur_flg >> 1) & 1) as usize];
- dst[off + dstride] = self.clr8[i][((!cur_flg >> 2) & 1) as usize];
- dst[off + 1 + dstride] = self.clr8[i][((!cur_flg >> 3) & 1) as usize];
+ fn put_clr8(&self, bstate: &BlockState, dst: &mut [u16], dstride: usize) -> [[u16; 4]; 4] {
+ let mut clr8 = [[0; 4]; 4];
+ for (dst, src) in clr8.iter_mut().zip(bstate.clr8.iter()) {
+ for (dst, &src) in dst.iter_mut().zip(src.iter()) {
+ *dst = pack_rgb555(src);
+ }
+ }
+ let mut clr8_flags = bstate.clr8_flags;
+ for (j, line) in dst.chunks_mut(dstride).take(4).enumerate() {
+ for (i, el) in line.iter_mut().take(4).enumerate() {
+ let blk_no = (i >> 1) + (j & 2);
+ *el = clr8[blk_no][(!clr8_flags & 1) as usize];
+ clr8_flags >>= 1;
+ }