From f9f862268294ac132bd6c1bc40e4bc1683ec9696 Mon Sep 17 00:00:00 2001 From: Thomas Wilshaw Date: Wed, 27 Apr 2022 22:48:41 +0100 Subject: [PATCH] Add ability to set custom OCIO function names --- app/node/keying/chromakey/chromakey.cpp | 1 + app/render/job/colortransformjob.h | 5 +++++ app/render/renderer.cpp | 11 ++++++++--- app/shaders/chromakey.frag | 2 +- app/shaders/colormanage.frag | 2 +- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/node/keying/chromakey/chromakey.cpp b/app/node/keying/chromakey/chromakey.cpp index bf344f3ac..5c2ae1c7f 100644 --- a/app/node/keying/chromakey/chromakey.cpp +++ b/app/node/keying/chromakey/chromakey.cpp @@ -87,6 +87,7 @@ void ChromaKeyNode::Value(const NodeValueRow &value, const NodeGlobals &globals, job.SetColorProcessor(processor()); job.SetInputTexture(value[kTextureInput].data().value()); job.SetNeedsCustomShader(this); + job.SetFunctionName(QString("SceneLinearToCIEXYZ_d65")); table->Push(NodeValue::kColorTransformJob, QVariant::fromValue(job), this); } diff --git a/app/render/job/colortransformjob.h b/app/render/job/colortransformjob.h index dc7f7331e..879f5c88c 100644 --- a/app/render/job/colortransformjob.h +++ b/app/render/job/colortransformjob.h @@ -71,6 +71,9 @@ public: const QMatrix4x4 &GetCropMatrix() const { return crop_matrix_; } void SetCropMatrix(const QMatrix4x4 &m) { crop_matrix_ = m; } + const QString &FunctionName() const { return function_name_; } + void SetFunctionName(const QString &function_name = QString()) { function_name_ = function_name; }; + private: ColorProcessorPtr processor_; @@ -87,6 +90,8 @@ private: QMatrix4x4 crop_matrix_; + QString function_name_; + }; } diff --git a/app/render/renderer.cpp b/app/render/renderer.cpp index a4c0ae989..02cbb62a9 100644 --- a/app/render/renderer.cpp +++ b/app/render/renderer.cpp @@ -106,10 +106,15 @@ bool Renderer::GetColorContext(const ColorTransformJob &color_job, Renderer::Col return true; } else { // Create shader description - const char* ocio_func_name = "OCIODisplay"; + QString ocio_func_name; + if (color_job.FunctionName().isEmpty()) { + ocio_func_name = "OCIODisplay"; + } else { + ocio_func_name = color_job.FunctionName(); + } auto shader_desc = OCIO::GpuShaderDesc::CreateShaderDesc(); shader_desc->setLanguage(OCIO::GPU_LANGUAGE_GLSL_ES_3_0); - shader_desc->setFunctionName(ocio_func_name); + shader_desc->setFunctionName(ocio_func_name.toStdString().c_str()); shader_desc->setResourcePrefix("ocio_"); // Generate shader @@ -124,7 +129,7 @@ bool Renderer::GetColorContext(const ColorTransformJob &color_job, Renderer::Col code = FileFunctions::ReadFileAsString(QStringLiteral(":shaders/colormanage.frag")); } - code.set_frag_code(code.frag_code().arg(shader_desc->getShaderText(), ocio_func_name)); + code.set_frag_code(code.frag_code().arg(shader_desc->getShaderText())); // Try to compile shader color_ctx.compiled_shader = CreateNativeShader(code); diff --git a/app/shaders/chromakey.frag b/app/shaders/chromakey.frag index c6dfbdb19..cc767d9be 100644 --- a/app/shaders/chromakey.frag +++ b/app/shaders/chromakey.frag @@ -39,7 +39,7 @@ void main() { vec4 col = texture(tex_in, ove_texcoord); // Perform color conversion - vec4 cie_xyz = %2(col); + vec4 cie_xyz = SceneLinearToCIEXYZ_d65(col); vec4 lab = CIExyz_to_Lab(cie_xyz); frag_color = vec4(lab.r); diff --git a/app/shaders/colormanage.frag b/app/shaders/colormanage.frag index e9461e71e..25efe5b50 100644 --- a/app/shaders/colormanage.frag +++ b/app/shaders/colormanage.frag @@ -44,7 +44,7 @@ void main() { } // Perform color conversion - col = %2(col); + col = OCIODisplay(col); // Associate or re-associate here if (ove_maintex_alpha == ALPHA_ASSOC) {