X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=gamma_compression_effect.cpp;fp=gamma_compression_effect.cpp;h=b0f6372d4b9560ac9fb59c8c438feb022974189e;hp=079f849e16a62445c6862f6477fa84a511f920be;hb=9c12e38b7cd88a77ef297d080b7c41e6bd6326fb;hpb=1ec439c7fb975c09029adaa9090e7f35ce6484b8 diff --git a/gamma_compression_effect.cpp b/gamma_compression_effect.cpp index 079f849..b0f6372 100644 --- a/gamma_compression_effect.cpp +++ b/gamma_compression_effect.cpp @@ -12,6 +12,13 @@ GammaCompressionEffect::GammaCompressionEffect() : destination_curve(GAMMA_LINEAR) { register_int("destination_curve", (int *)&destination_curve); + register_uniform_float("linear_scale", &uniform_linear_scale); + register_uniform_float("c0", &uniform_c0); + register_uniform_float("c1", &uniform_c1); + register_uniform_float("c2", &uniform_c2); + register_uniform_float("c3", &uniform_c3); + register_uniform_float("c4", &uniform_c4); + register_uniform_float("beta", &uniform_beta); } string GammaCompressionEffect::output_fragment_shader() @@ -73,25 +80,25 @@ void GammaCompressionEffect::set_gl_state(GLuint glsl_program_num, const string // β = 0.0031308, ɣ = 1/2.4. // maxerror = 0.000785 = 0.200 * 255 // error at 1.0 = 0.000078 = 0.020 * 255 - set_uniform_float(glsl_program_num, prefix, "linear_scale", 12.92); - set_uniform_float(glsl_program_num, prefix, "c0", -0.03679675939); - set_uniform_float(glsl_program_num, prefix, "c1", 1.443803073); - set_uniform_float(glsl_program_num, prefix, "c2", -0.9239780987); - set_uniform_float(glsl_program_num, prefix, "c3", 0.8060491596); - set_uniform_float(glsl_program_num, prefix, "c4", -0.2891558568); - set_uniform_float(glsl_program_num, prefix, "beta", 0.0031308); + uniform_linear_scale = 12.92; + uniform_c0 = -0.03679675939; + uniform_c1 = 1.443803073; + uniform_c2 = -0.9239780987; + uniform_c3 = 0.8060491596; + uniform_c4 = -0.2891558568; + uniform_beta = 0.0031308; } if (destination_curve == GAMMA_REC_709) { // Also includes Rec. 601, and 10-bit Rec. 2020. // Rec. 2020, page 3; ɑ = 1.099, β = 0.018, ɣ = 0.45. // maxerror = 0.000131 = 0.033 * 255 = 0.134 * 1023 // error at 1.0 = 0.000013 = 0.003 * 255 = 0.013 * 1023 - set_uniform_float(glsl_program_num, prefix, "linear_scale", 4.5); - set_uniform_float(glsl_program_num, prefix, "c0", -0.08541688528); - set_uniform_float(glsl_program_num, prefix, "c1", 1.292793370); - set_uniform_float(glsl_program_num, prefix, "c2", -0.4070417645); - set_uniform_float(glsl_program_num, prefix, "c3", 0.2923891828); - set_uniform_float(glsl_program_num, prefix, "c4", -0.09273699351); - set_uniform_float(glsl_program_num, prefix, "beta", 0.018); + uniform_linear_scale = 4.5; + uniform_c0 = -0.08541688528; + uniform_c1 = 1.292793370; + uniform_c2 = -0.4070417645; + uniform_c3 = 0.2923891828; + uniform_c4 = -0.09273699351; + uniform_beta = 0.018; } if (destination_curve == GAMMA_REC_2020_12_BIT) { // Rec. 2020, page 3; ɑ = 1.0993, β = 0.0181, ɣ = 0.45. @@ -103,13 +110,13 @@ void GammaCompressionEffect::set_gl_state(GLuint glsl_program_num, const string // bit. (Removing the constraint for x=1 will only take this down // from 0.553 to 0.501; adding a fifth order can get it down to // 0.167, although this assumes working in fp64 and not fp32.) - set_uniform_float(glsl_program_num, prefix, "linear_scale", 4.5); - set_uniform_float(glsl_program_num, prefix, "c0", -0.08569685663); - set_uniform_float(glsl_program_num, prefix, "c1", 1.293000900); - set_uniform_float(glsl_program_num, prefix, "c2", -0.4067291321); - set_uniform_float(glsl_program_num, prefix, "c3", 0.2919741179); - set_uniform_float(glsl_program_num, prefix, "c4", -0.09256205770); - set_uniform_float(glsl_program_num, prefix, "beta", 0.0181); + uniform_linear_scale = 4.5; + uniform_c0 = -0.08569685663; + uniform_c1 = 1.293000900; + uniform_c2 = -0.4067291321; + uniform_c3 = 0.2919741179; + uniform_c4 = -0.09256205770; + uniform_beta = 0.0181; } }