renderer: move ocio code to separate file

This commit is contained in:
itsmattkc
2021-09-01 15:02:07 -07:00
parent eddf69caec
commit cf1cb5e0a9
2 changed files with 61 additions and 56 deletions
+5 -56
View File
@@ -123,62 +123,11 @@ bool Renderer::GetColorContext(ColorProcessorPtr color_processor, Renderer::Colo
// Generate shader
color_processor->GetProcessor()->getDefaultGPUProcessor()->extractGpuShaderInfo(shader_desc);
QString shader_frag;
shader_frag.append(QStringLiteral("// Main texture input\n"
"uniform sampler2D ove_maintex;\n"
"uniform int ove_maintex_alpha;\n"
"uniform mat4 ove_cropmatrix;\n"
"\n"
"// Macros defining `ove_maintex_alpha` state\n"
"// Matches `AlphaAssociated` C++ enum\n"
"#define ALPHA_NONE 0\n"
"#define ALPHA_UNASSOC 1\n"
"#define ALPHA_ASSOC 2\n"
"\n"
"// Main texture coordinate\n"
"varying vec2 ove_texcoord;\n"
"\n"));
shader_frag.append(shader_desc->getShaderText());
shader_frag.append(QStringLiteral("\n"
"// Alpha association functions\n"
"vec4 assoc(vec4 c) {\n"
" return vec4(c.rgb * c.a, c.a);\n"
"}\n"
"\n"
"vec4 reassoc(vec4 c) {\n"
" return (c.a == 0.0) ? c : assoc(c);\n"
"}\n"
"\n"
"vec4 deassoc(vec4 c) {\n"
" return (c.a == 0.0) ? c : vec4(c.rgb / c.a, c.a);\n"
"}\n"
"\n"
"void main() {\n"
" vec2 cropped_coord = (vec4(ove_texcoord-vec2(0.5, 0.5), 0.0, 1.0)*ove_cropmatrix).xy + vec2(0.5, 0.5);\n"
" if (cropped_coord.x < 0.0 || cropped_coord.x >= 1.0 || cropped_coord.y < 0.0 || cropped_coord.y >= 1.0) {\n"
" gl_FragColor = vec4(0.0);\n"
" return;\n"
" }\n"
" \n"
" vec4 col = texture2D(ove_maintex, cropped_coord);\n"
"\n"
" // If alpha is associated, de-associate now\n"
" if (ove_maintex_alpha == ALPHA_ASSOC) {\n"
" col = deassoc(col);\n"
" }\n"
"\n"
" // Perform color conversion\n"
" col = %1(col);\n"
"\n"
" // Associate or re-associate here\n"
" if (ove_maintex_alpha == ALPHA_ASSOC) {\n"
" col = reassoc(col);\n"
" } else if (ove_maintex_alpha == ALPHA_UNASSOC) {\n"
" col = assoc(col);\n"
" }\n"
"\n"
" gl_FragColor = col;\n"
"}\n").arg(ocio_func_name));
// Generate shader code using OCIO stub and our auto-generated name
QString shader_frag = FileFunctions::ReadFileAsString(QStringLiteral(":shaders/colormanage.frag")).arg(
shader_desc->getShaderText(),
ocio_func_name
);
// Try to compile shader
color_ctx.compiled_shader = CreateNativeShader(ShaderCode(shader_frag,
+56
View File
@@ -0,0 +1,56 @@
// Main texture input
uniform sampler2D ove_maintex;
uniform int ove_maintex_alpha;
uniform mat4 ove_cropmatrix;
// Macros defining `ove_maintex_alpha` state
// Matches `AlphaAssociated` C++ enum
#define ALPHA_NONE 0
#define ALPHA_UNASSOC 1
#define ALPHA_ASSOC 2
// Main texture coordinate
varying vec2 ove_texcoord;
// Program will replace this with OCIO's auto-generated shader code
%1
// Alpha association functions
vec4 assoc(vec4 c) {
return vec4(c.rgb * c.a, c.a);
}
vec4 reassoc(vec4 c) {
return (c.a == 0.0) ? c : assoc(c);
}
vec4 deassoc(vec4 c) {
return (c.a == 0.0) ? c : vec4(c.rgb / c.a, c.a);
}
void main() {
vec2 cropped_coord = (vec4(ove_texcoord-vec2(0.5, 0.5), 0.0, 1.0)*ove_cropmatrix).xy + vec2(0.5, 0.5);
if (cropped_coord.x < 0.0 || cropped_coord.x >= 1.0 || cropped_coord.y < 0.0 || cropped_coord.y >= 1.0) {
gl_FragColor = vec4(0.0);
return;
}
vec4 col = texture2D(ove_maintex, cropped_coord);
// If alpha is associated, de-associate now
if (ove_maintex_alpha == ALPHA_ASSOC) {
col = deassoc(col);
}
// Perform color conversion
col = %2(col);
// Associate or re-associate here
if (ove_maintex_alpha == ALPHA_ASSOC) {
col = reassoc(col);
} else if (ove_maintex_alpha == ALPHA_UNASSOC) {
col = assoc(col);
}
gl_FragColor = col;
}