1use crate::*;
2
3pub trait Glsl {
4 fn glsl_rgb (self) -> [f32; 3];
5 fn glsl_rgba (self) -> [f32; 4];
6}
7
8pub trait IntoArray <T, const N : usize> {
9 fn into_array (self) -> [T; N];
10}
11
12pub trait Normalize {
13 type Target;
14 fn normalize (self) -> Self::Target;
15}
16
17pub trait Quantize {
18 type Target;
19 fn quantize (self) -> Self::Target;
20}
21
22pub trait WithAlphaOpaque {
23 type Target;
24 fn rgba (self) -> Self::Target;
26}
27
28impl Glsl for Rgb <u8> {
29 fn glsl_rgb (self) -> [f32; 3] {
30 self.normalize().into()
31 }
32 fn glsl_rgba (self) -> [f32; 4] {
33 self.normalize().rgba().into()
34 }
35}
36impl Glsl for Rgba <u8> {
37 fn glsl_rgb (self) -> [f32; 3] {
38 self.rgb().normalize().into()
39 }
40 fn glsl_rgba (self) -> [f32; 4] {
41 self.normalize().into()
42 }
43}
44
45impl IntoArray <u8, 3> for Rgb <u8> {
46 fn into_array (self) -> [u8; 3] {
47 self.into()
48 }
49}
50impl IntoArray <u8, 4> for Rgba <u8> {
51 fn into_array (self) -> [u8; 4] {
52 self.into()
53 }
54}
55impl IntoArray <f32, 3> for Rgb <f32> {
56 fn into_array (self) -> [f32; 3] {
57 self.into()
58 }
59}
60impl IntoArray <f32, 4> for Rgba <f32> {
61 fn into_array (self) -> [f32; 4] {
62 self.into()
63 }
64}
65
66impl Normalize for Rgb <u8> {
67 type Target = Rgb <f32>;
68 fn normalize (self) -> Self::Target {
69 normalize_rgb (self)
70 }
71}
72impl Normalize for Rgba <u8> {
73 type Target = Rgba <f32>;
74 fn normalize (self) -> Self::Target {
75 normalize_rgba (self)
76 }
77}
78
79impl Quantize for Rgb <f32> {
80 type Target = Rgb <u8>;
81 fn quantize (self) -> Self::Target {
82 quantize_rgb (self)
83 }
84}
85impl Quantize for Rgba <f32> {
86 type Target = Rgba <u8>;
87 fn quantize (self) -> Self::Target {
88 quantize_rgba (self)
89 }
90}
91
92impl WithAlphaOpaque for Rgb <u8> {
93 type Target = Rgba <u8>;
94 fn rgba (self) -> Self::Target {
95 self.with_alpha (255)
96 }
97}
98impl WithAlphaOpaque for Rgb <f32> {
99 type Target = Rgba <f32>;
100 fn rgba (self) -> Self::Target {
101 self.with_alpha (1.0)
102 }
103}