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:
authormano-wii <germano.costa@ig.com.br>2018-10-17 00:03:38 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-10-17 00:04:57 +0300
commit1f1da268402f241d83417ea0cc04ef74d0f9097f (patch)
treee172413cb90e1d7620afee17b1e32c69f2ec849b /source/blender/draw
parent2ab62722331b5e73c1af8e729d798c5e1bb7b436 (diff)
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
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl41
1 files changed, 25 insertions, 16 deletions
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();
+ }
}