[Bf-blender-cvs] [95dcd183fe8] greasepencil-object: New rounded end caps

Antonio Vazquez noreply at git.blender.org
Sun Dec 17 16:18:34 CET 2017


Commit: 95dcd183fe8e8335c016a71ce905ed97a73ebf81
Author: Antonio Vazquez
Date:   Sun Dec 17 16:18:16 2017 +0100
Branches: greasepencil-object
https://developer.blender.org/rB95dcd183fe8e8335c016a71ce905ed97a73ebf81

New rounded end caps

Now the stroke ends are rounded to get more artistic look.

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

M	source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
M	source/blender/draw/engines/gpencil/shaders/gpencil_stroke_geom.glsl

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

diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
index 224adf23893..1eec39dd97b 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_frag.glsl
@@ -3,6 +3,7 @@ uniform sampler2D myTexture;
 
 in vec4 mColor;
 in vec2 mTexCoord;
+
 out vec4 fragColor;
 
 #define texture2D texture
@@ -14,9 +15,19 @@ out vec4 fragColor;
 
 void main()
 {
+	const vec2 center = vec2(0, 0.5);
+	vec4 tColor = vec4(mColor);
+	/* if alpha < 0, then encap */
+	if (mColor.a < 0) {
+		tColor.a = tColor.a * -1.0;
+		float dist = length(mTexCoord - center);
+		if (dist > 0.25) {
+			discard;
+		}
+	}
 	/* Solid */
 	if (color_type == GPENCIL_COLOR_SOLID) {
-		fragColor = mColor;
+		fragColor = tColor;
 	}
 	/* texture */
 	if (color_type == GPENCIL_COLOR_TEXTURE) {
@@ -27,6 +38,6 @@ void main()
 		vec4 text_color = texture2D(myTexture, mTexCoord);
 		/* normalize texture color */
 		float nvalue = 1.0 - ((text_color.x + text_color.y + text_color.z) / 3.0);
-		fragColor = mix(vec4(0.0, 0.0, 0.0, 0.0), mColor, nvalue);
+		fragColor = mix(vec4(0.0, 0.0, 0.0, 0.0), tColor, nvalue);
 	}
 }
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_geom.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_geom.glsl
index 9d8604253ae..09b63793adb 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_geom.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_stroke_geom.glsl
@@ -3,7 +3,7 @@ uniform vec2 Viewport;
 uniform int xraymode;
 
 layout(lines_adjacency) in;
-layout(triangle_strip, max_vertices = 7) out;
+layout(triangle_strip, max_vertices = 13) out;
 
 in vec4 finalColor[4];
 in float finalThickness[4];
@@ -133,6 +133,25 @@ void main(void)
 		length_b = finalThickness[2];
 	}
 
+	/* generate the start endcap (alpha < 0 used as endcap flag)*/
+	if (P0 == P2) {
+		mTexCoord = vec2(1, 0.5);
+		mColor = vec4(finalColor[1].rgb, finalColor[1].a * -1.0) ;
+		vec2 svn1 =  normalize(sp1 - sp2) * length_a * 5.0;
+		gl_Position = vec4((sp1 + svn1) / Viewport, getZdepth(P1), 1.0);
+		EmitVertex();	
+
+		mTexCoord = vec2(0, 0);
+		mColor = vec4(finalColor[1].rgb, finalColor[1].a * -1.0) ;
+		gl_Position = vec4((sp1 - (length_a * 2.0) * miter_a) / Viewport, getZdepth(P1), 1.0);
+		EmitVertex();
+
+		mTexCoord = vec2(0, 1);
+		mColor = vec4(finalColor[1].rgb, finalColor[1].a * -1.0) ;
+		gl_Position = vec4((sp1 + (length_a * 2.0) * miter_a) / Viewport, getZdepth(P1), 1.0);
+		EmitVertex();
+	}
+
 	/* generate the triangle strip */
 	mTexCoord = vec2(0, 0);
 	mColor = finalColor[1];
@@ -154,5 +173,24 @@ void main(void)
 	gl_Position = vec4((sp2 - length_b * miter_b) / Viewport, getZdepth(P2), 1.0);
 	EmitVertex();
 
+	/* generate the end endcap (alpha < 0 used as endcap flag)*/
+	if (P1 == P3) {
+		mTexCoord = vec2(0, 1);
+		mColor = vec4(finalColor[2].rgb, finalColor[2].a * -1.0) ;
+		gl_Position = vec4((sp2 + (length_b * 2.0) * miter_b) / Viewport, getZdepth(P2), 1.0);
+		EmitVertex();
+
+		mTexCoord = vec2(0, 0);
+		mColor = vec4(finalColor[2].rgb, finalColor[2].a * -1.0) ;
+		gl_Position = vec4((sp2 - (length_b * 2.0) * miter_b) / Viewport, getZdepth(P2), 1.0);
+		EmitVertex();
+
+		mTexCoord = vec2(1, 0.5);
+		mColor = vec4(finalColor[2].rgb, finalColor[2].a * -1.0) ;
+		vec2 svn2 =  normalize(sp2 - sp1) * length_b * 5.0;
+		gl_Position = vec4((sp2 + svn2) / Viewport, getZdepth(P2), 1.0);
+		EmitVertex();	
+	}
+	
 	EndPrimitive();
 }



More information about the Bf-blender-cvs mailing list