[Bf-blender-cvs] [89ef69d23c0] blender2.8: Wireframe: Optimization: Output degenerate triangles if no edges

Clément Foucault noreply at git.blender.org
Tue Dec 4 17:52:36 CET 2018


Commit: 89ef69d23c079d1006fdffc9fb63199eabc257a7
Author: Clément Foucault
Date:   Tue Dec 4 01:16:13 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB89ef69d23c079d1006fdffc9fb63199eabc257a7

Wireframe: Optimization: Output degenerate triangles if no edges

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

M	source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
M	source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl

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

diff --git a/source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl b/source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
index 8abb6ecc737..e0ec9563ef4 100644
--- a/source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
+++ b/source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl
@@ -80,6 +80,12 @@ void main(void)
 	edgeSharpness.x = (forceEdge[0] == 1.0) ? 1.0 : edgeSharpness.x;
 	edgeSharpness.y = (forceEdge[1] == 1.0) ? 1.0 : edgeSharpness.y;
 	edgeSharpness.z = (forceEdge[2] == 1.0) ? 1.0 : edgeSharpness.z;
+
+	do_edge = greaterThan(edgeSharpness, vec3(0.005));
+	if (!any(do_edge)) {
+		/* Don't generate any fragment. */
+		return;
+	}
 #endif
 
 #ifdef SELECT_EDGES
diff --git a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
index 828bc551cad..ca077f29abd 100644
--- a/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
+++ b/source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl
@@ -145,8 +145,6 @@ void main()
 #  ifndef LIGHT_EDGES
 	vec3 nor = get_vertex_nor(v_id[v_n]);
 #  else
-	p_pos[v_n1] = ModelViewProjectionMatrix * vec4(pos[v_n1], 1.0);
-	p_pos[v_n2] = ModelViewProjectionMatrix * vec4(pos[v_n2], 1.0);
 
 	pos[v_n1] = get_vertex_pos(v_id[v_n1]);
 	pos[v_n2] = get_vertex_pos(v_id[v_n2]);
@@ -168,6 +166,12 @@ void main()
 	edgeSharpness.y = force_edge.y ? 1.0 : edgeSharpness.y;
 	edgeSharpness.z = force_edge.z ? 1.0 : edgeSharpness.z;
 
+	do_edge = greaterThan(edgeSharpness, vec3(0.01));
+	if (!any(do_edge)) {
+		/* Don't generate any fragment. */
+		gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
+	}
+
 	vec3 nor = nors[v_n];
 #  endif



More information about the Bf-blender-cvs mailing list