retro-pixel 0.3.2

Bitmaps types for getting that retro visual.
Documentation
#![feature(test)]
#![allow(non_snake_case)]

extern crate test;
use test::Bencher;

extern crate retro_pixel;
use retro_pixel::*;

#[bench]
fn bench_vga_u8_clear(b: &mut Bencher) {
  let mut dest: VecImage<u8> = VecImage::new(640, 480);
  let mut src: VecImage<u8> = VecImage::new(640, 480);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = 1;
    }
  }
  b.iter(|| dest.set_all(0));
}

#[bench]
fn bench_vga_u8_clear_blit1(b: &mut Bencher) {
  let mut dest: VecImage<u8> = VecImage::new(640, 480);
  let mut src: VecImage<u8> = VecImage::new(640, 480);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = 1;
    }
  }
  b.iter(|| {
    dest.set_all(0);
    dest.blit_generic(&src, (0, 0), |src, dest| if src > 0 { src } else { dest })
  });
}

#[bench]
fn bench_vga_u8_clear_blit2(b: &mut Bencher) {
  let mut dest: VecImage<u8> = VecImage::new(640, 480);
  let mut src: VecImage<u8> = VecImage::new(640, 480);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = 1u8;
    }
  }
  b.iter(|| {
    dest.set_all(0);
    dest.blit_generic(&src, (0, 0), |src, dest| if src > 0 { src } else { dest });
    dest.blit_generic(&src, (0, 0), |src, dest| if src > 0 { src } else { dest })
  });
}

#[bench]
fn bench_1080p_u8_clear_blit5(b: &mut Bencher) {
  let mut dest: VecImage<u8> = VecImage::new(1920, 1080);
  let mut src: VecImage<u8> = VecImage::new(1920, 1080);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = 1;
    }
  }
  b.iter(|| {
    dest.set_all(0);
    dest.blit_generic(&src, (0, 0), |src, dest| if src > 0 { src } else { dest });
    dest.blit_generic(&src, (0, 0), |src, dest| if src > 0 { src + 1 } else { dest });
    dest.blit_generic(&src, (0, 0), |src, dest| if src > 0 { src * 3 } else { dest });
    dest.blit_generic(&src, (0, 0), |src, dest| if src > 0 { 0 } else { dest });
    dest.blit_generic(&src, (0, 0), |src, dest| if src > 0 { src } else { dest })
  });
}

#[bench]
fn bench_1080p_u32_clear_blit5(b: &mut Bencher) {
  let mut dest: VecImage<u32> = VecImage::new(1920, 1080);
  let mut src: VecImage<u32> = VecImage::new(1920, 1080);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = 1;
    }
  }
  b.iter(|| {
    dest.set_all(0xff00ff00u32);
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0))
  });
}

#[bench]
fn bench_vga_u32_clear(b: &mut Bencher) {
  let mut dest: VecImage<u32> = VecImage::new(640, 480);
  b.iter(|| dest.set_all(0xff00ff00u32));
}

#[bench]
fn bench_vga_u32_clear_blit1(b: &mut Bencher) {
  let mut dest: VecImage<u32> = VecImage::new(640, 480);
  let mut src: VecImage<u32> = VecImage::new(640, 480);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = 1;
    }
  }
  b.iter(|| {
    dest.set_all(0xff00ff00);
    dest.blit_blend_rectilinear(&src, (0, 0))
  });
}

#[bench]
fn bench_vga_u32_clear_blit2(b: &mut Bencher) {
  let mut dest: VecImage<u32> = VecImage::new(640, 480);
  let mut src: VecImage<u32> = VecImage::new(640, 480);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = 1;
    }
  }
  b.iter(|| {
    dest.set_all(0xff00ff00u32);
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0))
  });
}

#[bench]
fn bench_vga_u32_clear_blit5(b: &mut Bencher) {
  let mut dest: VecImage<u32> = VecImage::new(640, 480);
  let mut src: VecImage<u32> = VecImage::new(640, 480);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = 1;
    }
  }
  b.iter(|| {
    dest.set_all(0xff00ff00u32);
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0));
    dest.blit_blend_rectilinear(&src, (1, 0))
  });
}

#[bench]
fn bench_gba_u16_clear_blit5(b: &mut Bencher) {
  let mut dest: VecImage<u16> = VecImage::new(240, 160);
  let mut src: VecImage<u16> = VecImage::new(240, 160);
  for (x, y, p_mut_ref) in src.iter_mut() {
    if x % 2 == 0 || y % 2 == 0 {
      *p_mut_ref = p_mut_ref.wrapping_neg();
    }
  }
  b.iter(|| {
    dest.set_all(0xff00u16);
    dest.blit_rgba16(&src, (0, 0));
    dest.blit_rgba16(&src, (0, 0));
    dest.blit_rgba16(&src, (0, 0));
    dest.blit_rgba16(&src, (0, 0));
    dest.blit_rgba16(&src, (0, 0))
  });
}