Advertisement
Guest User

Untitled

a guest
Mar 18th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.04 KB | None | 0 0
  1. //------------------------------------------
  2. // Pixel
  3. //------------------------------------------
  4. pub trait Pixel {
  5.   fn to_u32(&self) -> u32;
  6. }
  7.  
  8. impl Pixel for u32 {
  9.   fn to_u32(&self) -> u32 {
  10.     *self
  11.   }
  12. }
  13.  
  14. //------------------------------------------
  15. // Rgb
  16. //------------------------------------------
  17. pub struct Rgb {
  18.   r: u8,
  19.   g: u8,
  20.   b: u8
  21. }
  22. impl Rgb {
  23.   pub fn new(r: u8, g: u8, b: u8) -> Rgb {
  24.     Rgb {
  25.       r: r,
  26.       g: g,
  27.       b: b
  28.     }
  29.   }
  30. }
  31. impl Pixel for Rgb {
  32.   fn to_u32(&self) -> u32 {
  33.     ((self.r as u32) << 24) +
  34.     ((self.g as u32) << 16) +
  35.     ((self.b as u32) << 8)
  36.   }
  37. }
  38. //------------------------------------------
  39. // Rgba
  40. //------------------------------------------
  41. pub struct Rgba {
  42.   r: u8,
  43.   g: u8,
  44.   b: u8,
  45.   a: u8
  46. }
  47. impl Rgba {
  48.   pub fn new(r: u8, g: u8, b: u8, a: u8) -> Rgba {
  49.     Rgba {
  50.       r: r,
  51.       g: g,
  52.       b: b,
  53.       a: a
  54.     }
  55.   }
  56. }
  57. impl Pixel for Rgba {
  58.   fn to_u32(&self) -> u32 {
  59.     ((self.r as u32) << 24) +
  60.     ((self.g as u32) << 16) +
  61.     ((self.b as u32) << 8)  +
  62.       self.a as u32
  63.   }
  64. }
  65. //------------------------------------------
  66. // PixelBuffer
  67. //------------------------------------------
  68. pub struct PixelBuffer {
  69.   pub _width    : usize,
  70.   pub _height   : usize,
  71.   pub _pixels   : Vec<u32>,
  72.   pub _depth    : Vec<f32>,
  73.   pub _stencil  : Vec<u8>
  74. }
  75. impl PixelBuffer {
  76.   pub fn new(width: usize, height: usize) -> PixelBuffer {
  77.     PixelBuffer {
  78.       _width    : width,
  79.       _height   : height,
  80.       _pixels   : vec![0_u32; width * height],
  81.       _depth    : vec![0_f32; width * height],
  82.       _stencil  : vec![0_u8;  width * height]
  83.     }
  84.   }
  85.  
  86.   pub fn width(&self) -> usize {
  87.     self._width
  88.   }
  89.  
  90.   pub fn height(&self) -> usize {
  91.     self._height
  92.   }
  93.  
  94.   pub fn clear<P: Pixel> (&mut self, p: P) {
  95.     for i in 0..self._pixels.len() {
  96.       self._pixels[i] = p.to_u32()
  97.     }
  98.   }
  99.   pub fn set<P: Pixel>(&mut self, x: usize, y: usize, p: P) {
  100.     self._pixels[x + self._width * y] = p.to_u32();
  101.   }
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement