Draw Cache: avoid recalculating 'poly_normals'
Call `BKE_mesh_ensure_normals_for_display` to avoid recalculating poly_normals. **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) Reviewed By: jbakker Differential Revision: https://developer.blender.org/D11527
This commit is contained in:
parent
71997921c4
commit
b3f0dc2907
Notes:
blender-bot
2023-05-03 10:14:48 +02:00
Referenced by issue #89194, Opening even remotely complex scenes with many objects takes much longer than before Referenced by issue #88550, Mesh Optimization Project Progress
|
@ -308,16 +308,8 @@ void mesh_render_data_update_normals(MeshRenderData *mr, const eMRDataType data_
|
|||
if (mr->extract_type != MR_EXTRACT_BMESH) {
|
||||
/* Mesh */
|
||||
if (data_flag & (MR_DATA_POLY_NOR | MR_DATA_LOOP_NOR | MR_DATA_TAN_LOOP_NOR)) {
|
||||
mr->poly_normals = MEM_mallocN(sizeof(*mr->poly_normals) * mr->poly_len, __func__);
|
||||
BKE_mesh_calc_normals_poly((MVert *)mr->mvert,
|
||||
NULL,
|
||||
mr->vert_len,
|
||||
mr->mloop,
|
||||
mr->mpoly,
|
||||
mr->loop_len,
|
||||
mr->poly_len,
|
||||
mr->poly_normals,
|
||||
true);
|
||||
BKE_mesh_ensure_normals_for_display(mr->me);
|
||||
mr->poly_normals = CustomData_get_layer(&mr->me->pdata, CD_NORMAL);
|
||||
}
|
||||
if (((data_flag & MR_DATA_LOOP_NOR) && is_auto_smooth) || (data_flag & MR_DATA_TAN_LOOP_NOR)) {
|
||||
mr->loop_normals = MEM_mallocN(sizeof(*mr->loop_normals) * mr->loop_len, __func__);
|
||||
|
@ -507,7 +499,6 @@ MeshRenderData *mesh_render_data_create(Mesh *me,
|
|||
void mesh_render_data_free(MeshRenderData *mr)
|
||||
{
|
||||
MEM_SAFE_FREE(mr->mlooptri);
|
||||
MEM_SAFE_FREE(mr->poly_normals);
|
||||
MEM_SAFE_FREE(mr->loop_normals);
|
||||
|
||||
/* Loose geometry are owned by MeshBufferExtractionCache. */
|
||||
|
|
Loading…
Reference in New Issue