[Bf-blender-cvs] [f2806a3b041] greasepencil-object: GP: Apply alpha to mix color

Antonioya noreply at git.blender.org
Fri Nov 23 20:18:18 CET 2018


Commit: f2806a3b0411378e5819ce56994d00bda69398d1
Author: Antonioya
Date:   Fri Nov 23 20:18:04 2018 +0100
Branches: greasepencil-object
https://developer.blender.org/rBf2806a3b0411378e5819ce56994d00bda69398d1

GP: Apply alpha to mix color

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

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 a9b6ce8c763..f6fd96051f9 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_blend_frag.glsl
@@ -27,20 +27,26 @@ float overlay_color(float a, float b)
 	return rtn;
 }
 
-vec4 get_blend_color(int mode, vec4 src_color, vec4 mix_color)
+vec4 get_blend_color(int mode, vec4 src_color, vec4 blend_color)
 {
+	vec4 mix_color = blend_color;
 	vec4 outcolor;
-	if (mode == MODE_NORMAL) {
+
+	if (mix_color.a == 0) {
+		outcolor = src_color;
+	}
+	else if (mode == MODE_NORMAL) {
 		outcolor = mix_color;
-		outcolor.a = src_color.a;
 	}
 	else if (mode == MODE_OVERLAY) {
+		mix_color.rgb = mix_color.rgb * mix_color.a;
 		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;
 		outcolor = src_color + mix_color;
 		outcolor.a = src_color.a;
 	}
@@ -49,10 +55,12 @@ vec4 get_blend_color(int mode, vec4 src_color, vec4 mix_color)
 		outcolor.a = clamp(src_color.a - mix_color.a, 0.0, 1.0);
 	}
 	else if (mode == MODE_MULTIPLY)	{
+		mix_color.rgb = mix_color.rgb * mix_color.a;
 		outcolor = src_color * mix_color;
 		outcolor.a = src_color.a;
 	}
 	else if (mode == MODE_DIVIDE) {
+		mix_color.rgb = mix_color.rgb * mix_color.a;
 		outcolor = src_color / mix_color;
 		outcolor.a = src_color.a;
 	}
@@ -61,10 +69,6 @@ vec4 get_blend_color(int mode, vec4 src_color, vec4 mix_color)
 		outcolor.a = src_color.a;
 	}
 	
-	if (mix_color.a == 0) {
-		outcolor = src_color;
-	}
-	
 	return outcolor;
 }



More information about the Bf-blender-cvs mailing list