[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