[Bf-blender-cvs] [9147e573310] greasepencil-object: GPencil: Add Dot aspect support back

Clément Foucault noreply at git.blender.org
Wed Feb 12 16:19:05 CET 2020


Commit: 9147e573310c874697f933cc082b9bd767799adc
Author: Clément Foucault
Date:   Wed Feb 12 16:18:56 2020 +0100
Branches: greasepencil-object
https://developer.blender.org/rB9147e573310c874697f933cc082b9bd767799adc

GPencil: Add Dot aspect support back

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

M	source/blender/draw/engines/gpencil/shaders/gpencil_common_lib.glsl
M	source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl
M	source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl

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

diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_common_lib.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_common_lib.glsl
index 641322b09c0..d6da4d1cc7a 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_common_lib.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_common_lib.glsl
@@ -147,17 +147,18 @@ IN_OUT vec4 finalColorAdd;
 IN_OUT vec3 finalPos;
 IN_OUT vec2 finalUvs;
 noperspective IN_OUT float strokeThickness;
+noperspective IN_OUT float strokeHardeness;
+flat IN_OUT vec2 strokeAspect;
 flat IN_OUT vec2 strokePt1;
 flat IN_OUT vec2 strokePt2;
 flat IN_OUT int matFlag;
 flat IN_OUT float depth;
-noperspective IN_OUT float strokeHardeness;
 
 #ifdef GPU_FRAGMENT_SHADER
 
 #  define linearstep(p0, p1, v) (clamp(((v) - (p0)) / abs((p1) - (p0)), 0.0, 1.0))
 
-float stroke_round_cap_mask(vec2 p1, vec2 p2, float thickness, float hardfac)
+float stroke_round_cap_mask(vec2 p1, vec2 p2, vec2 aspect, float thickness, float hardfac)
 {
   /* We create our own uv space to avoid issues with triangulation and linear
    * interpolation artifacts. */
@@ -173,6 +174,7 @@ float stroke_round_cap_mask(vec2 p1, vec2 p2, float thickness, float hardfac)
   uv_end.y = dot(vec2(-line.y, line.x), pos);
   /* Divide by stroke radius. */
   uv_end /= thickness;
+  uv_end *= aspect;
 
   float dist = clamp(1.0 - length(uv_end) * 2.0, 0.0, 1.0);
   if (hardfac > 0.999) {
@@ -209,6 +211,14 @@ uniform vec4 layerTint;
 uniform float layerOpacity; /* Used for onion skin. */
 uniform float strokeIndexOffset = 0.0;
 
+/* All of these attribs are quad loaded the same way
+ * as GL_LINES_ADJACENCY would feed a geometry shader:
+ * - ma reference the previous adjacency point.
+ * - ma1 reference the current line first point.
+ * - ma2 reference the current line second point.
+ * - ma3 reference the next adjacency point.
+ * Note that we are rendering quad instances and not using any index buffer (except for fills).
+ */
 in vec4 ma;
 in vec4 ma1;
 in vec4 ma2;
@@ -233,10 +243,11 @@ in vec4 col2;
 
 in vec4 fcol1;
 
-in vec2 hard;
+/* hard.x is aspect. */
 in vec2 hard1;
 in vec2 hard2;
-in vec2 hard3;
+#  define aspect1 hard1.x
+#  define aspect2 hard2.x
 
 void discard_vert()
 {
@@ -420,10 +431,24 @@ void stroke_vertex()
 
     vec2 y_axis = rotate_90deg(x_axis);
 
+    strokeAspect.x = aspect1;
+
+    if (strokeAspect.x > 1.0) {
+      strokeAspect.y = strokeAspect.x;
+      strokeAspect.x = 1.0;
+    }
+    else {
+      strokeAspect.x = 1.0 / strokeAspect.x;
+      strokeAspect.y = 1.0;
+    }
+
+    x /= strokeAspect.x;
+    y /= strokeAspect.y;
+
     gl_Position.xy += (x * x_axis + y * y_axis) * sizeViewportInv.xy * thickness;
 
     strokePt1 = ss1;
-    strokePt2 = ss1 + vec2(0.5, 0.0);
+    strokePt2 = ss1 + x_axis * 0.5;
     strokeThickness = (is_squares) ? 1e18 : (thickness / gl_Position.w);
   }
   else {
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl
index 8f528dfb7db..8c2032f834a 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_frag.glsl
@@ -86,7 +86,8 @@ void main()
 
   fragColor.rgb *= gpencil_lighting();
 
-  fragColor *= stroke_round_cap_mask(strokePt1, strokePt2, strokeThickness, strokeHardeness);
+  fragColor *= stroke_round_cap_mask(
+      strokePt1, strokePt2, strokeAspect, strokeThickness, strokeHardeness);
 
   /* For compatibility with colored alpha buffer.
    * Note that we are limited to mono-chromatic alpha blending here
diff --git a/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl b/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl
index c8a0a9ac4b6..85f79e94263 100644
--- a/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl
+++ b/source/blender/draw/engines/overlay/shaders/outline_prepass_frag.glsl
@@ -18,7 +18,8 @@ vec3 ray_plane_intersection(vec3 ray_ori, vec3 ray_dir, vec4 plane)
 void main()
 {
 #ifdef USE_GPENCIL
-  if (stroke_round_cap_mask(strokePt1, strokePt2, strokeThickness, strokeHardeness) < 0.001) {
+  if (stroke_round_cap_mask(strokePt1, strokePt2, strokeAspect, strokeThickness, strokeHardeness) <
+      0.001) {
     discard;
   }



More information about the Bf-blender-cvs mailing list