[Bf-blender-cvs] [8beb7c838fc] greasepencil-refactor: GPencil: Refactor: Stroke Caps: Fix a few issues

Clément Foucault noreply at git.blender.org
Mon Dec 23 01:24:47 CET 2019


Commit: 8beb7c838fc6aa7912556f618cbab3334b3c9321
Author: Clément Foucault
Date:   Mon Dec 23 01:56:43 2019 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB8beb7c838fc6aa7912556f618cbab3334b3c9321

GPencil: Refactor: Stroke Caps: Fix a few issues

- Fix stroke cap flickering
- Fix broken cyclic strokes
- Increase corner split angle from 45° to 60°.

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

M	source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl
M	source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl

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

diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl
index da144894698..fe15a603455 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl
@@ -74,7 +74,7 @@ float stroke_round_cap_mask()
   float line_len = sqrt(length_squared(line));
   float half_line_len = line_len * 0.5;
   /* Normalize */
-  line /= line_len;
+  line = (line_len > 0.0) ? (line / line_len) : vec2(1.0, 0.0);
   /* Create a uv space that englobe the whole segment into a capsule. */
   vec2 uv_end;
   uv_end.x = max(abs(dot(line, pos) - half_line_len) - half_line_len, 0.0);
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
index 6dc667230b2..187e13da1d3 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
@@ -214,7 +214,7 @@ void stroke_vertex()
     vec2 miter_tan = safe_normalize(line_adj + line);
     float miter_dot = dot(miter_tan, line_adj);
     /* Break corners after a certain angle to avoid really thick corners. */
-    const float miter_limit = 0.7071; /* cos(45°) */
+    const float miter_limit = 0.5; /* cos(60°) */
     miter_tan = (miter_dot < miter_limit) ? line : (miter_tan / miter_dot);
 
     vec2 miter = rotate_90deg(miter_tan);
@@ -230,7 +230,7 @@ void stroke_vertex()
     vec2 screen_ofs = miter * y;
 
     if (is_stroke_start || is_stroke_end) {
-      screen_ofs += miter_tan * x * 2.0;
+      screen_ofs += line * x * 2.0;
     }
 
     gl_Position.xy += screen_ofs * sizeViewportInv.xy * thickness;



More information about the Bf-blender-cvs mailing list