Commit: 41ad845531b77f14c7836f5d09be50ea8b51c088
Author: mano-wii
Date:   Tue Oct 16 20:41:18 2018 -0300
Branches: blender2.8
https://developer.blender.org/rB41ad845531b77f14c7836f5d09be50ea8b51c088

Optimization: Edit Mesh Overlay: Avoid computing fixvec unnecessarily.

This brings a big difference to meshes with edit cage adjusted for modifiers.
In my tests, the suzanne with subdivision modifier level 3 went from 4.80ms to 
3.05ms.

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

M       source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl

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

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 6523d0d3898..71525040b94 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
@@ -79,7 +79,7 @@ void doVertexOfs(int v, vec2 fixvec)
 #ifdef VERTEX_FACING
        facing = v_facing[v];
 #endif
-       gl_Position = pPos[v] + vec4(fixvec, Z_OFFSET, 0.0);
+       gl_Position = pPos[v] + vec4(fixvec * pPos[v].w, Z_OFFSET, 0.0);
 
        EmitVertex();
 }
@@ -130,7 +130,7 @@ void main()
        /* Edge */
        ivec3 eflag;
        for (int v = 0; v < 3; ++v) {
-               flag[v] = eflag[v] = vData[v].y | (vData[v].x << 8);
+               eflag[v] = vData[v].y | (vData[v].x << 8);
                edgesCrease[v] = vData[v].z / 255.0;
                edgesBweight[v] = vData[v].w / 255.0;
        }
@@ -151,18 +151,6 @@ void main()
        ssPos[1] = proj(pPos[1]);
        ssPos[2] = proj(pPos[2]);
 
-       vec2 fixvec[3];
-       vec2 fixvecaf[3];
-
-       for (int i = 0; i < 3; ++i) {
-               fixvec[i] = fixvecaf[i] = compute_fixvec(i);
-               /* Perspective */
-               if (ProjectionMatrix[3][3] == 0.0) {
-                       fixvec[i] *= pPos[i].w;
-                       fixvecaf[i] *= pPos[(i + 1) % 3].w;
-               }
-       }
-
 #ifdef VERTEX_SELECTION
        vertex_color[0] = EDIT_MESH_vertex_color(vData[0].x).rgb;
        vertex_color[1] = EDIT_MESH_vertex_color(vData[1].x).rgb;
@@ -183,8 +171,10 @@ void main()
                /* Do 0 -> 1 edge strip */
                faceColor = vec4(fcol.rgb, 0.0);
                mask_edge_flag(0, eflag);
-               doVertexOfs(0, fixvec[0]);
-               doVertexOfs(1, fixvecaf[0]);
+
+               vec2 fixvec = compute_fixvec(0);
+               doVertexOfs(0, fixvec);
+               doVertexOfs(1, fixvec);
        }
        doVertex(0);
        doVertex(1);
@@ -198,8 +188,10 @@ void main()
        if ((eflag[0] & EDGE_EXISTS) != 0) {
                /* Do 1 -> 2 edge strip */
                mask_edge_flag(1, eflag);
-               doVertexOfs(1, fixvec[1]);
-               doVertexOfs(2, fixvecaf[1]);
+
+               vec2 fixvec = compute_fixvec(1);
+               doVertexOfs(1, fixvec);
+               doVertexOfs(2, fixvec);
        }
        EndPrimitive();
 
@@ -208,8 +200,10 @@ void main()
                mask_edge_flag(2, eflag);
                doVertex(2);
                doVertex(0);
-               doVertexOfs(2, fixvec[2]);
-               doVertexOfs(0, fixvecaf[2]);
+
+               vec2 fixvec = compute_fixvec(2);
+               doVertexOfs(2, fixvec);
+               doVertexOfs(0, fixvec);
                EndPrimitive();
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to