Polygon normals are already calculated at the end of the modifier
evaluation and are stored in the CustomData CD_NORMAL.
We also have a dirty flag to make sure they need to be recalculated:
mesh->runtime.cd_dirty_poly & CD_MASK_NORMAL
This patch proposes to call BKE_mesh_ensure_normals_for_display to
avoid recalculating poly_normals.
The downside is that vert_normals can be calculated too, but I haven't
found any cases where this happens.
Benchmark
| master: | PATCH: | |
|---|---|---|
| looptris_test: | Average: 3.995076 FPS | Average: 4.047470 FPS |
| rdata 11ms iter 91ms (frame 235ms) | rdata 11ms iter 86ms (frame 233ms) | |
| subdiv_mesh_cage_and_final: | Average: 1.884492 FPS | Average: 1.900114 FPS |
| rdata 7ms iter 42ms (frame 268ms) | rdata 7ms iter 39ms (frame 265ms) | |
| rdata 7ms iter 44ms (frame 259ms) | rdata 7ms iter 42ms (frame 257ms) | |
| subdiv_mesh_final_only: | Average: 6.245944 FPS | Average: 6.289000 FPS |
| rdata 3ms iter 23ms (frame 153ms) | rdata 3ms iter 21ms (frame 154ms) | |
| subdiv_mesh_final_only_ledge: | Average: 6.263482 FPS | Average: 6.187218 FPS |
| rdata 3ms iter 23ms (frame 156ms) | rdata 3ms iter 22ms (frame 154ms) |