[Bf-blender-cvs] [0c394530718] blender2.8: Cleanup: Edit Mesh shader: Remove unecessary varying

Clément Foucault noreply at git.blender.org
Mon Oct 15 10:44:38 CEST 2018


Commit: 0c394530718880064b04e53032dd9cce0cbc31e7
Author: Clément Foucault
Date:   Mon Oct 15 10:43:49 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB0c394530718880064b04e53032dd9cce0cbc31e7

Cleanup: Edit Mesh shader: Remove unecessary varying

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

M	source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
M	source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl

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

diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
index 13591cea8fb..d8b54168f09 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_edge.glsl
@@ -8,7 +8,6 @@ layout(triangle_strip, max_vertices=4) out;
 uniform mat4 ProjectionMatrix;
 uniform vec2 viewportSize;
 
-in vec4 vPos[];
 in vec4 pPos[];
 in ivec4 vData[];
 #ifdef VERTEX_FACING
@@ -77,10 +76,8 @@ void main()
 
 	/* Perspective */
 	if (ProjectionMatrix[3][3] == 0.0) {
-		/* vPos[i].z is negative and we don't want
-		 * our fixvec to be flipped */
-		dirs1 *= -vPos[0].z;
-		dirs2 *= -vPos[1].z;
+		dirs1 *= pPos[0].w;
+		dirs2 *= pPos[1].w;
 	}
 
 	/* Edge / Vert data */
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
index 3b7af9108e2..9e56a1f2b3c 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
@@ -14,7 +14,6 @@ layout(triangle_strip, max_vertices=12) out;
 uniform mat4 ProjectionMatrix;
 uniform vec2 viewportSize;
 
-in vec4 vPos[];
 in vec4 pPos[];
 in ivec4 vData[];
 #ifdef VERTEX_FACING
@@ -79,9 +78,7 @@ void doVertexOfs(int v, vec2 fixvec)
 #ifdef VERTEX_FACING
 	facing = v_facing[v];
 #endif
-	gl_Position = pPos[v];
-
-	gl_Position.xyz += vec3(fixvec, Z_OFFSET);
+	gl_Position = pPos[v] + vec4(fixvec, Z_OFFSET, 0.0);
 
 	EmitVertex();
 }
@@ -98,6 +95,35 @@ void mask_edge_flag(int v, ivec3 eflag)
 	flag[v]   &= ~EDGE_EXISTS;
 }
 
+vec2 compute_fixvec(int i)
+{
+	int i1 = (i + 1) % 3;
+	int i2 = (i + 2) % 3;
+	/* This fix the case when 2 vertices are perfectly aligned
+	 * and corner vectors have nowhere to go.
+	 * ie: length(cornervec[i]) == 0 */
+	const float epsilon = 1e-2; /* in pixel so not that much */
+	const vec2 bias[3] = vec2[3](
+		vec2( epsilon,  epsilon),
+		vec2(-epsilon,  epsilon),
+		vec2(     0.0, -epsilon)
+	);
+	vec2 v1 = ssPos[i] + bias[i];
+	vec2 v2 = ssPos[i1] + bias[i1];
+	vec2 v3 = ssPos[i2] + bias[i2];
+	/* Edge normalized vector */
+	vec2 dir = normalize(v2 - v1);
+	vec2 dir2 = normalize(v3 - v1);
+	/* perpendicular to dir */
+	vec2 perp = vec2(-dir.y, dir.x);
+	/* Backface case */
+	if (dot(perp, dir2) > 0.0) {
+		perp = -perp;
+	}
+	/* Make it view independent */
+	return perp * sizeEdgeFix / viewportSize;;
+}
+
 void main()
 {
 	/* Edge */
@@ -127,46 +153,12 @@ void main()
 	vec2 fixvec[3];
 	vec2 fixvecaf[3];
 
-	/* This fix the case when 2 vertices are perfectly aligned
-	 * and corner vectors have nowhere to go.
-	 * ie: length(cornervec[i]) == 0 */
-	const float epsilon = 1e-2; /* in pixel so not that much */
-	const vec2 bias[3] = vec2[3](
-		vec2( epsilon,  epsilon),
-		vec2(-epsilon,  epsilon),
-		vec2(     0.0, -epsilon)
-	);
-
 	for (int i = 0; i < 3; ++i) {
-		int i1 = (i + 1) % 3;
-		int i2 = (i + 2) % 3;
-
-		vec2 v1 = ssPos[i] + bias[i];
-		vec2 v2 = ssPos[i1] + bias[i1];
-		vec2 v3 = ssPos[i2] + bias[i2];
-
-		/* Edge normalized vector */
-		vec2 dir = normalize(v2 - v1);
-		vec2 dir2 = normalize(v3 - v1);
-
-		/* perpendicular to dir */
-		vec2 perp = vec2(-dir.y, dir.x);
-
-		/* Backface case */
-		if (dot(perp, dir2) > 0) {
-			perp = -perp;
-		}
-
-		/* Make it view independent */
-		perp *= sizeEdgeFix / viewportSize;
-		fixvec[i] = fixvecaf[i] = perp;
-
+		fixvec[i] = fixvecaf[i] = compute_fixvec(i);
 		/* Perspective */
 		if (ProjectionMatrix[3][3] == 0.0) {
-			/* vPos[i].z is negative and we don't want
-			 * our fixvec to be flipped */
-			fixvec[i] *= -vPos[i].z;
-			fixvecaf[i] *= -vPos[i1].z;
+			fixvec[i] *= pPos[i].w;
+			fixvecaf[i] *= pPos[(i + 1) % 3].w;
 		}
 	}
 
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
index 8715ab69181..8b1ffb5199d 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
@@ -20,7 +20,6 @@ in vec3 vnor;
 #ifdef EDGE_FIX
 in ivec4 data;
 
-out vec4 vPos;
 out vec4 pPos;
 out ivec4 vData;
 #  ifdef VERTEX_FACING
@@ -29,14 +28,14 @@ out float vFacing;
 
 void main()
 {
-	vPos = ModelViewMatrix * vec4(pos, 1.0);
 	pPos = ModelViewProjectionMatrix * vec4(pos, 1.0);
 	pPos.z -= ofs;
 	vData = data & dataMask;
 #  ifdef VERTEX_FACING
+	vec4 vpos = ModelViewMatrix * vec4(pos, 1.0);
 	vec3 view_normal = normalize(NormalMatrix * vnor);
 	vec3 view_vec = (ProjectionMatrix[3][3] == 0.0)
-		? normalize(vPos.xyz)
+		? normalize(vpos.xyz)
 		: vec3(0.0, 0.0, 1.0);
 	vFacing = dot(view_vec, view_normal);
 #  endif



More information about the Bf-blender-cvs mailing list