diff --git a/src/gfx_apis/vulkan/shaders/transfer_functions.glsl b/src/gfx_apis/vulkan/shaders/transfer_functions.glsl index 7f9937e3..88236152 100644 --- a/src/gfx_apis/vulkan/shaders/transfer_functions.glsl +++ b/src/gfx_apis/vulkan/shaders/transfer_functions.glsl @@ -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); diff --git a/src/gfx_apis/vulkan/transfer_functions.rs b/src/gfx_apis/vulkan/transfer_functions.rs index c1354d67..7853ed8c 100644 --- a/src/gfx_apis/vulkan/transfer_functions.rs +++ b/src/gfx_apis/vulkan/transfer_functions.rs @@ -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, diff --git a/src/theme.rs b/src/theme.rs index 3fba81b1..23ff6cf2 100644 --- a/src/theme.rs +++ b/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),