[Bf-blender-cvs] [f139caa6322] master: Fix T65187: Overlay blend increase wrongly the opacity

Antonioya noreply at git.blender.org
Tue May 28 15:55:38 CEST 2019


Commit: f139caa6322fc71a16f9c22f4202d6dde42573a7
Author: Antonioya
Date:   Tue May 28 15:55:17 2019 +0200
Branches: master
https://developer.blender.org/rBf139caa6322fc71a16f9c22f4202d6dde42573a7

Fix T65187: Overlay blend increase wrongly the opacity

The calculation of the mix color was not using the bottom color when the alpha was lower than 1.0.

Also added clamp code to avoid values outside valid ranges.

===================================================================

M	source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl

===================================================================

diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl
index 0482ea50916..d415ce53137 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl
@@ -43,39 +43,38 @@ vec4 get_blend_color(int mode, vec4 src_color, vec4 blend_color)
     outcolor = src_color;
   }
   else if (mode == MODE_OVERLAY) {
-    mix_color.rgb = mix_color.rgb * mix_color.a * blend_opacity;
+    mix_color.rgb = mix(src_color.rgb, mix_color.rgb, mix_color.a * blend_opacity);
     outcolor.r = overlay_color(src_color.r, mix_color.r);
     outcolor.g = overlay_color(src_color.g, mix_color.g);
     outcolor.b = overlay_color(src_color.b, mix_color.b);
     outcolor.a = src_color.a;
   }
   else if (mode == MODE_ADD) {
-    mix_color.rgb = mix_color.rgb * mix_color.a * blend_opacity;
+    mix_color.rgb = mix(src_color.rgb, mix_color.rgb, mix_color.a * blend_opacity);
     outcolor = src_color + mix_color;
     outcolor.a = src_color.a;
   }
   else if (mode == MODE_SUB) {
+    mix_color.rgb = mix(src_color.rgb, mix_color.rgb, mix_color.a * blend_opacity);
     outcolor = src_color - mix_color;
     outcolor.a = clamp(src_color.a - (mix_color.a * blend_opacity), 0.0, 1.0);
   }
   else if (mode == MODE_MULTIPLY) {
-    /* interpolate between 1 and color using opacity */
-    mix_color.rgb = mix(vec3(1, 1, 1), mix_color.rgb * mix_color.a, blend_opacity);
+    mix_color.rgb = mix(src_color.rgb, mix_color.rgb, mix_color.a * blend_opacity);
     outcolor = src_color * mix_color;
     outcolor.a = src_color.a;
   }
   else if (mode == MODE_DIVIDE) {
-    mix_color.rgb = mix_color.rgb * mix_color.a * blend_opacity;
+    mix_color.rgb = mix(src_color.rgb, mix_color.rgb, mix_color.a * blend_opacity);
     outcolor = src_color / mix_color;
     outcolor.a = src_color.a;
   }
   else {
     outcolor = mix_color * blend_opacity;
-    ;
     outcolor.a = src_color.a;
   }
 
-  return outcolor;
+  return clamp(outcolor, 0.0, 1.0);
 }
 
 float linearrgb_to_srgb(float c)



More information about the Bf-blender-cvs mailing list