use crate::core::*;
#[derive(Clone, Debug, Copy, PartialEq, Eq, PartialOrd, Ord, Default)]
pub enum ColorMapping {
None = 0,
#[default]
ComputeToSrgb = 1,
}
impl ColorMapping {
pub fn fragment_shader_source() -> &'static str {
"
uniform uint ColorMappingType;
vec3 color_mapping(vec3 color) {
if (ColorMappingType == 1u) {
vec3 a = vec3(0.055, 0.055, 0.055);
vec3 ap1 = vec3(1.0, 1.0, 1.0) + a;
vec3 g = vec3(2.4, 2.4, 2.4);
vec3 ginv = 1.0 / g;
vec3 select = step(vec3(0.0031308, 0.0031308, 0.0031308), color);
vec3 lo = color * 12.92;
vec3 hi = ap1 * pow(color, ginv) - a;
color = mix(lo, hi, select);
}
return color;
}
"
}
pub fn use_uniforms(&self, program: &Program) {
program.use_uniform("ColorMappingType", *self as u32);
}
}