15static std::string generate_display_fragment_source(
21 if (display_shader.from_colorspace ==
"sRGB") {
25 "vec4 OCIO_to_scene_linear(vec4 pixel) {\n"
26 " return vec4(srgb_to_linear_rgb(pixel.rgb), pixel.a);\n"
31 source +=
"vec4 OCIO_to_scene_linear(vec4 pixel) { return pixel; }\n";
35 if (display_shader.display ==
"sRGB") {
37 "vec4 OCIO_to_display(vec4 pixel) {\n"
38 " return vec4(linear_rgb_to_srgb(pixel.rgb), pixel.a);\n"
43 source +=
"vec4 OCIO_to_display(vec4 pixel) { return pixel; }\n";
49static std::string generate_scene_linear_fragment_source(
55 if (display_shader.from_colorspace ==
"sRGB") {
59 "vec4 OCIO_to_scene_linear(vec4 pixel) {\n"
60 " return vec4(srgb_to_linear_rgb(pixel.rgb), pixel.a);\n"
65 source +=
"vec4 OCIO_to_scene_linear(vec4 pixel) { return pixel; }\n";
69 source +=
"vec4 OCIO_to_display(vec4 pixel) { return pixel; }\n";
79 const std::string fragment_source = generate_display_fragment_source(display_shader);
94 const std::string fragment_source = generate_scene_linear_fragment_source(display_shader);
98 {{
"USE_TO_SCENE_LINEAR_ONLY",
""}, {
"OUTPUT_PREMULTIPLIED",
""}}))
void construct_scene_linear_shader(internal::GPUDisplayShader &display_shader) const override
void construct_display_shader(internal::GPUDisplayShader &display_shader) const override
static bool create_gpu_shader(internal::GPUDisplayShader &display_shader, StringRefNull fragment_source, Span< std::array< StringRefNull, 2 > > additional_defines)