1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use crate::prelude::*;
pub struct ColorBuffer {
pub width : usize,
pub height : usize,
pub pixels : Vec<F>,
pub frames : usize,
}
impl ColorBuffer {
pub fn new(width: usize, height: usize) -> Self {
Self {
width,
height,
pixels : vec![0.0; width * height * 4],
frames : 0,
}
}
pub fn to_u8_vec(&self) -> Vec<u8> {
let source = &self.pixels[..];
let mut out : Vec<u8> = vec![0; self.width * self.height * 4];
for y in 0..self.height {
for x in 0..self.width {
let d = x * 4 + y * self.width * 4;
let c = [(source[d].powf(0.4545) * 255.0) as u8, (source[d+1].powf(0.4545) * 255.0) as u8, (source[d+2].powf(0.4545) * 255.0) as u8, (source[d+3] * 255.0) as u8];
out[d..d + 4].copy_from_slice(&c);
}
}
out
}
pub fn convert_to_u8(&self, frame: &mut [u8]) {
for y in 0..self.height {
for x in 0..self.width {
let o = x * 4 + y * self.width * 4;
let c = [(self.pixels[o].powf(0.4545) * 255.0) as u8, (self.pixels[o+1].powf(0.4545) * 255.0) as u8, (self.pixels[o+2].powf(0.4545) * 255.0) as u8, (self.pixels[o+3] * 255.0) as u8];
frame[o..o + 4].copy_from_slice(&c);
}
}
}
}