color-management: implement bt1886 as pure gamma24
This commit is contained in:
parent
2dcc3806ad
commit
050515d2ed
3 changed files with 13 additions and 37 deletions
|
|
@ -6,7 +6,7 @@
|
|||
#define TF_SRGB 0
|
||||
#define TF_LINEAR 1
|
||||
#define TF_ST2084_PQ 2
|
||||
#define TF_BT1886 3
|
||||
#define TF_GAMMA24 3
|
||||
#define TF_GAMMA22 4
|
||||
#define TF_GAMMA28 5
|
||||
#define TF_ST240 6
|
||||
|
|
@ -72,22 +72,6 @@ vec3 oetf_st2084_pq(vec3 c) {
|
|||
return pow(num / den, vec3(78.84375));
|
||||
}
|
||||
|
||||
vec3 eotf_bt1886(vec3 c) {
|
||||
return mix(
|
||||
c * vec3(1.0 / 4.5),
|
||||
pow((c + vec3(0.099)) * vec3(1.0 / 1.099), vec3(1.0 / 0.45)),
|
||||
greaterThanEqual(c, vec3(0.081))
|
||||
);
|
||||
}
|
||||
|
||||
vec3 oetf_bt1886(vec3 c) {
|
||||
return mix(
|
||||
vec3(4.5) * c,
|
||||
vec3(1.099) * pow(c, vec3(0.45)) - vec3(0.099),
|
||||
greaterThanEqual(c, vec3(0.018))
|
||||
);
|
||||
}
|
||||
|
||||
vec3 eotf_st240(vec3 c) {
|
||||
return mix(
|
||||
c * vec3(1.0 / 4.0),
|
||||
|
|
@ -145,7 +129,7 @@ vec3 apply_eotf(vec3 c) {
|
|||
case TF_SRGB: return eotf_srgb(c);
|
||||
case TF_LINEAR: return c;
|
||||
case TF_ST2084_PQ: return eotf_st2084_pq(c);
|
||||
case TF_BT1886: return eotf_bt1886(c);
|
||||
case TF_GAMMA24: return pow(max(c, 0.0), vec3(2.4));
|
||||
case TF_GAMMA22: return pow(max(c, 0.0), vec3(2.2));
|
||||
case TF_GAMMA28: return pow(max(c, 0.0), vec3(2.8));
|
||||
case TF_ST240: return eotf_st240(c);
|
||||
|
|
@ -162,7 +146,7 @@ vec3 apply_oetf(vec3 c) {
|
|||
case TF_SRGB: return oetf_srgb(c);
|
||||
case TF_LINEAR: return c;
|
||||
case TF_ST2084_PQ: return oetf_st2084_pq(c);
|
||||
case TF_BT1886: return oetf_bt1886(c);
|
||||
case TF_GAMMA24: return pow(max(c, 0.0), vec3(1.0 / 2.4));
|
||||
case TF_GAMMA22: return pow(max(c, 0.0), vec3(1.0 / 2.2));
|
||||
case TF_GAMMA28: return pow(max(c, 0.0), vec3(1.0 / 2.8));
|
||||
case TF_ST240: return oetf_st240(c);
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ use crate::cmm::cmm_transfer_function::TransferFunction;
|
|||
pub const TF_SRGB: u32 = 0;
|
||||
pub const TF_LINEAR: u32 = 1;
|
||||
pub const TF_ST2084_PQ: u32 = 2;
|
||||
pub const TF_BT1887: u32 = 3;
|
||||
pub const TF_GAMMA24: u32 = 3;
|
||||
pub const TF_GAMMA22: u32 = 4;
|
||||
pub const TF_GAMMA28: u32 = 5;
|
||||
pub const TF_ST240: u32 = 6;
|
||||
|
|
@ -22,7 +22,7 @@ impl TransferFunctionExt for TransferFunction {
|
|||
TransferFunction::Srgb => TF_SRGB,
|
||||
TransferFunction::Linear => TF_LINEAR,
|
||||
TransferFunction::St2084Pq => TF_ST2084_PQ,
|
||||
TransferFunction::Bt1886 => TF_BT1887,
|
||||
TransferFunction::Bt1886 => TF_GAMMA24,
|
||||
TransferFunction::Gamma22 => TF_GAMMA22,
|
||||
TransferFunction::Gamma28 => TF_GAMMA28,
|
||||
TransferFunction::St240 => TF_ST240,
|
||||
|
|
|
|||
24
src/theme.rs
24
src/theme.rs
|
|
@ -96,13 +96,6 @@ impl Color {
|
|||
1.055 * c.powf(1.0 / 2.4) - 0.055
|
||||
}
|
||||
}
|
||||
fn bt1886(c: f32) -> f32 {
|
||||
if c < 0.081 {
|
||||
c / 4.5
|
||||
} else {
|
||||
((c + 0.099) / 1.099).powf(1.0 / 0.45)
|
||||
}
|
||||
}
|
||||
fn st240(c: f32) -> f32 {
|
||||
if c < 0.0913 {
|
||||
c / 4.0
|
||||
|
|
@ -122,6 +115,9 @@ impl Color {
|
|||
fn gamma22(c: f32) -> f32 {
|
||||
c.powf(2.2)
|
||||
}
|
||||
fn gamma24(c: f32) -> f32 {
|
||||
c.powf(2.4)
|
||||
}
|
||||
fn gamma28(c: f32) -> f32 {
|
||||
c.powf(2.8)
|
||||
}
|
||||
|
|
@ -136,7 +132,7 @@ impl Color {
|
|||
TransferFunction::Srgb => convert!(srgb),
|
||||
TransferFunction::Linear => convert!(linear),
|
||||
TransferFunction::St2084Pq => convert!(st2084_pq),
|
||||
TransferFunction::Bt1886 => convert!(bt1886),
|
||||
TransferFunction::Bt1886 => convert!(gamma24),
|
||||
TransferFunction::Gamma22 => convert!(gamma22),
|
||||
TransferFunction::Gamma28 => convert!(gamma28),
|
||||
TransferFunction::St240 => convert!(st240),
|
||||
|
|
@ -255,13 +251,6 @@ impl Color {
|
|||
((c + 0.055) / 1.055).powf(2.4)
|
||||
}
|
||||
}
|
||||
fn bt1886(c: f32) -> f32 {
|
||||
if c < 0.018 {
|
||||
4.5 * c
|
||||
} else {
|
||||
1.099 * c.powf(0.45) - 0.099
|
||||
}
|
||||
}
|
||||
fn st240(c: f32) -> f32 {
|
||||
if c < 0.0228 {
|
||||
4.0 * c
|
||||
|
|
@ -287,6 +276,9 @@ impl Color {
|
|||
fn gamma22(c: f32) -> f32 {
|
||||
c.powf(1.0 / 2.2)
|
||||
}
|
||||
fn gamma24(c: f32) -> f32 {
|
||||
c.powf(1.0 / 2.4)
|
||||
}
|
||||
fn gamma28(c: f32) -> f32 {
|
||||
c.powf(1.0 / 2.8)
|
||||
}
|
||||
|
|
@ -307,7 +299,7 @@ impl Color {
|
|||
TransferFunction::Srgb => convert!(srgb),
|
||||
TransferFunction::Linear => convert!(linear),
|
||||
TransferFunction::St2084Pq => convert!(st2084_pq),
|
||||
TransferFunction::Bt1886 => convert!(bt1886),
|
||||
TransferFunction::Bt1886 => convert!(gamma24),
|
||||
TransferFunction::Gamma22 => convert!(gamma22),
|
||||
TransferFunction::Gamma28 => convert!(gamma28),
|
||||
TransferFunction::St240 => convert!(st240),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue