[1f185740c46] greasepencil-refactor: GPencil: Refactor: Fix stroke end segment not drawn because of 180° angle

Clément Foucault noreply at git.blender.org
Tue Dec 10 02:27:36 CET 2019


Commit: 1f185740c46a258a263a42e46bc1163adc0a67b2
Author: Clément Foucault
Date:   Mon Dec 9 16:37:08 2019 +0100
Branches: greasepencil-refactor
https://developer.blender.org/rB1f185740c46a258a263a42e46bc1163adc0a67b2

GPencil: Refactor: Fix stroke end segment not drawn because of 180° angle

We just use safe normalize now. This just draw straight lines if the angle
is too sharp (or no lines at all if the line is parallel to the view).

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

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

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

diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
index a70929e235f..f9f6c55c104 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_vert.glsl
@@ -49,6 +49,17 @@ vec3 transform_point(mat4 m, vec3 v)
   return (m * vec4(v, 1.0)).xyz;
 }
 
+vec2 safe_normalize(vec2 v)
+{
+  float len_sqr = dot(v, v);
+  if (len_sqr > 0.0) {
+    return v / sqrt(len_sqr);
+  }
+  else {
+    return vec2(0.0);
+  }
+}
+
 void stroke_vertex()
 {
   /* Enpoints, we discard the vertices. */
@@ -78,10 +89,10 @@ void stroke_vertex()
   vec2 ss1 = project_to_screenspace(ndc1);
   vec2 ss2 = project_to_screenspace(ndc2);
   /* Screenspace Lines tangents. */
-  vec2 line = normalize(ss2 - ss1);
-  vec2 line_adj = normalize((x == 0.0) ? (ss1 - ss_adj) : (ss_adj - ss2));
+  vec2 line = safe_normalize(ss2 - ss1);
+  vec2 line_adj = safe_normalize((x == 0.0) ? (ss1 - ss_adj) : (ss_adj - ss2));
   /* Mitter tangent vector. */
-  vec2 miter_tan = normalize(line_adj + line);
+  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°) */



More information about the Bf-blender-cvs mailing list