[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