Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2018-12-04 03:16:13 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-12-04 19:52:32 +0300
commit89ef69d23c079d1006fdffc9fb63199eabc257a7 (patch)
tree67f8d6aca6639d0587a4f10e98e7362315bc85f0 /source/blender/draw
parent6a0c25b44721715574759bd0455ba1f33b3f3dae (diff)
Wireframe: Optimization: Output degenerate triangles if no edges
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/modes/shaders/overlay_face_wireframe_geom.glsl6
-rw-r--r--source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl8
2 files changed, 12 insertions, 2 deletions
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