#![allow(clippy::excessive_precision)]
pub trait TransferFunction: 'static {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Linear;
impl TransferFunction for Linear {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Srgb;
impl Srgb {
pub const ALPHA: f32 = 1.055;
pub const GAMMA: f32 = 2.4;
pub const LINEAR_SLOPE: f32 = 12.92;
pub const LINEAR_THRESHOLD: f32 = 0.0031308;
pub const ENCODED_THRESHOLD: f32 = 0.04045;
}
impl TransferFunction for Srgb {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Rec709;
impl Rec709 {
pub const ALPHA: f32 = 1.09929682680944;
pub const POWER: f32 = 0.45;
pub const LINEAR_SLOPE: f32 = 4.5;
pub const LINEAR_THRESHOLD: f32 = 0.018053968510807;
pub const ENCODED_THRESHOLD: f32 = 0.081242858298635;
}
impl TransferFunction for Rec709 {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Pq;
impl Pq {
pub const M1: f32 = 0.1593017578125;
pub const M2: f32 = 78.84375;
pub const C1: f32 = 0.8359375;
pub const C2: f32 = 18.8515625;
pub const C3: f32 = 18.6875;
}
impl TransferFunction for Pq {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Hlg;
impl Hlg {
pub const A: f32 = 0.17883277;
pub const B: f32 = 0.28466892;
pub const C: f32 = 0.5599107;
pub const LINEAR_THRESHOLD: f32 = 1.0 / 12.0;
pub const ENCODED_THRESHOLD: f32 = 0.5;
}
impl TransferFunction for Hlg {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct ProPhoto;
impl ProPhoto {
pub const GAMMA: f32 = 1.8;
pub const LINEAR_SLOPE: f32 = 16.0;
pub const LINEAR_THRESHOLD: f32 = 1.0 / 512.0;
pub const ENCODED_THRESHOLD: f32 = 1.0 / 32.0;
}
impl TransferFunction for ProPhoto {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct AcesCc;
impl AcesCc {
pub const CUT1: f32 = -0.30136986;
pub const LOG_SCALE: f32 = 17.52;
pub const LOG_OFFSET: f32 = 9.72;
pub const LOG2_RECIP: f32 = 1.0 / core::f32::consts::LN_2;
}
impl TransferFunction for AcesCc {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct AcesCct;
impl AcesCct {
pub const X_BRK: f32 = 0.0078125;
pub const Y_BRK: f32 = 0.15525115;
pub const A: f32 = 10.540237;
pub const B: f32 = 0.07290553;
pub const LOG_SCALE: f32 = 17.52;
pub const LOG_OFFSET: f32 = 9.72;
pub const LOG2_RECIP: f32 = 1.0 / core::f32::consts::LN_2;
}
impl TransferFunction for AcesCct {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct DciP3;
impl DciP3 {
pub const GAMMA: f32 = 2.6;
}
impl TransferFunction for DciP3 {}