[Bf-blender-cvs] [1f1da268402] blender2.8: Edit Mesh Overlay Geometry Shader: Ignore correction geometry for loops that are not part of an edge.

mano-wii noreply at git.blender.org
Tue Oct 16 23:05:00 CEST 2018


Commit: 1f1da268402f241d83417ea0cc04ef74d0f9097f
Author: mano-wii
Date:   Tue Oct 16 23:03:38 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB1f1da268402f241d83417ea0cc04ef74d0f9097f

Edit Mesh Overlay Geometry Shader: Ignore correction geometry for loops that are not part of an edge.

By the tests I could only observe a considerable difference in the peformanse when the vertex size is 30.
Vertice 3 showed no difference in a suzzane with subdivision modifier level 3 + show-on-cage.

Point Size 30: 7.29ms vs 2.55ms

Reviewers: fclem

Reviewed By: fclem

Differential Revision: https://developer.blender.org/D3805

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

M	release/scripts/addons
M	source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl

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

diff --git a/release/scripts/addons b/release/scripts/addons
index 2d1a067b12a..5f7fba0565a 160000
--- a/release/scripts/addons
+++ b/release/scripts/addons
@@ -1 +1 @@
-Subproject commit 2d1a067b12aa1c43e7935c09e424808ec78dccb2
+Subproject commit 5f7fba0565a7c9ae93eae31a08fc9bbbd16d333a
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 a2f91381d57..6523d0d3898 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
@@ -179,28 +179,37 @@ void main()
 	/* Remember that we are assuming the last vertex
 	 * of a triangle is the provoking vertex (decide what flat attribs are). */
 
-	/* Do 0 -> 1 edge strip */
-	faceColor = vec4(fcol.rgb, 0.0);
-	mask_edge_flag(0, eflag);
-	doVertexOfs(0, fixvec[0]);
-	doVertexOfs(1, fixvecaf[0]);
+	if ((eflag[2] & EDGE_EXISTS) != 0) {
+		/* Do 0 -> 1 edge strip */
+		faceColor = vec4(fcol.rgb, 0.0);
+		mask_edge_flag(0, eflag);
+		doVertexOfs(0, fixvec[0]);
+		doVertexOfs(1, fixvecaf[0]);
+	}
 	doVertex(0);
 	doVertex(1);
+
 	/* Do face triangle */
 	faceColor = fcol;
 	flag = eflag;
 	doVertex(2);
 	faceColor.a = 0.0; /* to not let face color bleed */
-	/* Do 1 -> 2 edge strip */
-	mask_edge_flag(1, eflag);
-	doVertexOfs(1, fixvec[1]);
-	doVertexOfs(2, fixvecaf[1]);
-	EndPrimitive();
-	/* Do 2 -> 0 edge strip */
-	mask_edge_flag(2, eflag);
-	doVertex(2);
-	doVertex(0);
-	doVertexOfs(2, fixvec[2]);
-	doVertexOfs(0, fixvecaf[2]);
+
+	if ((eflag[0] & EDGE_EXISTS) != 0) {
+		/* Do 1 -> 2 edge strip */
+		mask_edge_flag(1, eflag);
+		doVertexOfs(1, fixvec[1]);
+		doVertexOfs(2, fixvecaf[1]);
+	}
 	EndPrimitive();
+
+	if ((eflag[1] & EDGE_EXISTS) != 0) {
+		/* Do 2 -> 0 edge strip */
+		mask_edge_flag(2, eflag);
+		doVertex(2);
+		doVertex(0);
+		doVertexOfs(2, fixvec[2]);
+		doVertexOfs(0, fixvecaf[2]);
+		EndPrimitive();
+	}
 }



More information about the Bf-blender-cvs mailing list