[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