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 02:41:18 +0300
committermano-wii <germano.costa@ig.com.br>2018-10-17 02:42:50 +0300
commit41ad845531b77f14c7836f5d09be50ea8b51c088 (patch)
tree59cbf35983005a61f6f34302a06fe253ecac9abb /source/blender/draw
parent418c16bd3b799a95f9dc4d458213c60fba42626c (diff)
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.
Diffstat (limited to 'source/blender/draw')
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl34
1 files changed, 14 insertions, 20 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 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();
}
}