diff --git a/source/blender/imbuf/opencolorio/intern/fallback/fallback_gpu_shader_binder.cc b/source/blender/imbuf/opencolorio/intern/fallback/fallback_gpu_shader_binder.cc index f0665e3f86e..f8a3566f1ae 100644 --- a/source/blender/imbuf/opencolorio/intern/fallback/fallback_gpu_shader_binder.cc +++ b/source/blender/imbuf/opencolorio/intern/fallback/fallback_gpu_shader_binder.cc @@ -93,7 +93,10 @@ void FallbackGPUShaderBinder::construct_scene_linear_shader( const std::string fragment_source = generate_scene_linear_fragment_source(display_shader); - if (!create_gpu_shader(display_shader, fragment_source, {{"USE_TO_SCENE_LINEAR_ONLY", ""}})) { + if (!create_gpu_shader(display_shader, + fragment_source, + {{"USE_TO_SCENE_LINEAR_ONLY", ""}, {"OUTPUT_PREMULTIPLIED", ""}})) + { display_shader.is_valid = false; } } diff --git a/source/blender/imbuf/opencolorio/intern/libocio/libocio_gpu_shader_binder.cc b/source/blender/imbuf/opencolorio/intern/libocio/libocio_gpu_shader_binder.cc index 55d4791307e..aeda6c58c67 100644 --- a/source/blender/imbuf/opencolorio/intern/libocio/libocio_gpu_shader_binder.cc +++ b/source/blender/imbuf/opencolorio/intern/libocio/libocio_gpu_shader_binder.cc @@ -261,7 +261,10 @@ void LibOCIOGPUShaderBinder::construct_scene_linear_shader( } construct_shader_for_processors( - display_shader, processor_to_scene_linear, nullptr, {{"USE_TO_SCENE_LINEAR_ONLY", ""}}); + display_shader, + processor_to_scene_linear, + nullptr, + {{"USE_TO_SCENE_LINEAR_ONLY", ""}, {"OUTPUT_PREMULTIPLIED", ""}}); } } // namespace blender::ocio diff --git a/source/blender/imbuf/opencolorio/shaders/gpu_shader_display_transform_frag.glsl b/source/blender/imbuf/opencolorio/shaders/gpu_shader_display_transform_frag.glsl index 9977d851f58..999a4a9b0dc 100644 --- a/source/blender/imbuf/opencolorio/shaders/gpu_shader_display_transform_frag.glsl +++ b/source/blender/imbuf/opencolorio/shaders/gpu_shader_display_transform_frag.glsl @@ -243,6 +243,12 @@ float4 OCIO_ProcessColor(float4 col, float4 col_overlay) } #endif +#ifdef OUTPUT_PREMULTIPLIED + if (col.a > 0.0 && col.a < 1.0) { + col.rgb *= col.a; + } +#endif + return col; }