shadeable/src/pixel_format.rs

113 lines
2.0 KiB
Rust

use rhai::INT;
pub type Rgba64 = u64;
pub fn get_r(rgba: Rgba64) -> u8 {
let x: u64 = rgba;
let y = x >> 24;
return (y & 0xff).try_into().unwrap();
}
pub fn get_g(rgba: Rgba64) -> u8 {
let x: u64 = rgba;
let y = x >> 16;
return (y & 0xff).try_into().unwrap();
}
pub fn get_b(rgba: Rgba64) -> u8 {
let x: u64 = rgba;
let y = x >> (24 - 16);
return (y & 0xff).try_into().unwrap();
}
pub fn get_a(rgba: Rgba64) -> u8 {
let x = rgba;
let y = x >> (24 - 16 - 8);
return (y & 0xff).try_into().unwrap();
}
pub fn set_r(rgba: Rgba64, r: u8) -> Rgba64 {
let z = (r as Rgba64) << 24;
let y = rgba & 0xffffff;
return z | y;
}
pub fn set_g(rgba: Rgba64, r: u8) -> Rgba64 {
let z = (r as Rgba64) << 16;
let y = rgba & 0xffffff;
return z | y;
}
pub fn set_b(rgba: Rgba64, r: u8) -> Rgba64 {
let z = (r as Rgba64) << 26 - 16;
let y = rgba & 0xffffff;
return z | y;
}
pub fn set_a(rgba: Rgba64, r: u8) -> Rgba64 {
let z = (r as Rgba64) << 8;
let y = rgba & 0xffffff;
return z | y;
}
#[derive(Debug, Clone)]
pub struct RGBA {
pub r: INT,
pub g: INT,
pub b: INT,
pub a: INT,
}
impl RGBA {
pub fn new(r: INT, g: INT, b: INT, a: INT) -> Self {
Self { r, g, b, a }
}
}
pub fn rgba_div(a: Rgba64, b: Rgba64) -> Rgba64 {
let mut fin: Rgba64 = 0;
println!("{}", fin);
fin = set_r(fin, get_r(a) / get_r(b));
println!("{}", fin);
fin = set_g(fin, get_g(a) / get_g(b));
/*
get_b(a) / get_b(b);
get_a(a) / get_a(b);
*/
return fin;
}
pub fn rgba_mult(a: RGBA, b: RGBA) -> RGBA {
RGBA {
r: a.r * b.r,
g: a.g * b.g,
b: a.b * b.b,
a: a.a * b.a,
}
}
pub fn rgba_add(a: RGBA, b: RGBA) -> RGBA {
RGBA {
r: a.r + b.r,
g: a.g + b.g,
b: a.b + b.b,
a: a.a + b.a,
}
}
pub fn rgba_sub(a: RGBA, b: RGBA) -> RGBA {
RGBA {
r: a.r - b.r,
g: a.g - b.g,
b: a.b - b.b,
a: a.a - b.a,
}
}