[Bf-blender-cvs] [b810e9ffc4b] blender2.8: Fix: Mesh Edit Mode Shader: Correct artifacts that appeared on edges of edit mode with some AMD GPUs

Germano noreply at git.blender.org
Mon Jan 15 19:29:54 CET 2018


Commit: b810e9ffc4bb03bdf7773b4311ac841b00af80d1
Author: Germano
Date:   Mon Jan 15 16:29:41 2018 -0200
Branches: blender2.8
https://developer.blender.org/rBb810e9ffc4bb03bdf7773b4311ac841b00af80d1

Fix: Mesh Edit Mode Shader: Correct artifacts that appeared on edges of edit mode with some AMD GPUs

In case the problem appeared with the `AMD Radeon HD 7570M`

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

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

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

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 65b1baff37a..d9c902697b6 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
@@ -106,7 +106,7 @@ vec4 getClipData(vec2 pos[3], ivec2 vidx)
 	return vec4(A, Adir);
 }
 
-void doVertex(int v, vec4 pos)
+void doVertex(int v)
 {
 #ifdef VERTEX_SELECTION
 	vertexColor = getVertexColor(v);
@@ -116,7 +116,16 @@ void doVertex(int v, vec4 pos)
 	facing = vFacing[v];
 #endif
 
-	gl_Position = pos;
+	gl_Position = pPos[v];
+
+	EmitVertex();
+}
+
+void doLoopStrip(int v, vec3 offset)
+{
+	doVertex(v);
+
+	gl_Position.xyz += offset;
 
 	EmitVertex();
 }
@@ -174,12 +183,12 @@ void main()
 		/* Only pass the first 2 distances */
 		for (int v = 0; v < 2; ++v) {
 			eData1[v] = dist(pos, pos[v], v);
-			doVertex(v, pPos[v]);
+			doVertex(v);
 			eData1[v] = 0.0;
 		}
 
 		/* and the last vertex */
-		doVertex(2, pPos[2]);
+		doVertex(2);
 
 #ifdef EDGE_FIX
 		vec2 fixvec[6];
@@ -250,8 +259,7 @@ void main()
 
 			/* Position of the "hidden" third vertex */
 			eData2[0] = pos[vbe];
-			doVertex(v, pPos[v]);
-			doVertex(v, pPos[v] + vec4(fixvec[v], Z_OFFSET, 0.0));
+			doLoopStrip(v, vec3(fixvec[v], Z_OFFSET));
 
 			/* Now one triangle only shade one edge
 			 * so we use the edge distance calculated
@@ -266,20 +274,17 @@ void main()
 			edgesCrease[2] = ecrease[vbe];
 			edgesBweight[2] = ebweight[vbe];
 
-			doVertex(vaf, pPos[vaf]);
-			doVertex(vaf, pPos[vaf] + vec4(fixvecaf[v], Z_OFFSET, 0.0));
+			doLoopStrip(vaf, vec3(fixvecaf[v], Z_OFFSET));
 
 			/* corner vertices should not draw edges but draw point only */
 			flag[2] = (vData[vbe].x << 8);
 #ifdef VERTEX_SELECTION
-			doVertex(vaf, pPos[vaf]);
-			doVertex(vaf, pPos[vaf] + vec4(cornervec[vaf], Z_OFFSET, 0.0));
+			doLoopStrip(vaf, vec3(cornervec[vaf], Z_OFFSET));
 #endif
 		}
 
 		/* finish the loop strip */
-		doVertex(2, pPos[2]);
-		doVertex(2, pPos[2] + vec4(fixvec[2], Z_OFFSET, 0.0));
+		doLoopStrip(2, vec3(fixvec[2], Z_OFFSET));
 #endif
 	}
 	/* Harder case : compute visible edges vectors */
@@ -295,7 +300,7 @@ void main()
 		eData2[2] = tmp.zw;
 
 		for (int v = 0; v < 3; ++v)
-			doVertex(v, pPos[v]);
+			doVertex(v);
 	}
 
 	EndPrimitive();



More information about the Bf-blender-cvs mailing list