renderer: move ocio code to separate file
This commit is contained in:
+5
-56
@@ -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,
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user