diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-12-04 03:16:13 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-12-04 19:52:32 +0300 |
commit | 89ef69d23c079d1006fdffc9fb63199eabc257a7 (patch) | |
tree | 67f8d6aca6639d0587a4f10e98e7362315bc85f0 /source/blender/draw | |
parent | 6a0c25b44721715574759bd0455ba1f33b3f3dae (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.glsl | 6 | ||||
-rw-r--r-- | source/blender/draw/modes/shaders/overlay_face_wireframe_vert.glsl | 8 |
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 |