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:
authorHans Goudey <h.goudey@me.com>2022-02-22 19:14:50 +0300
committerHans Goudey <h.goudey@me.com>2022-02-22 19:14:50 +0300
commit353fe610ed2d31bda2da93f59a174fe1642d96ad (patch)
tree948717682555db289b343ee0dc1fc92919eb39be /source/blender/editors/mesh
parentca991e3012854ce53d8c78c537910d3f858a9d28 (diff)
Fix: Clear mesh runtime cache when adding elements
Currently the RNA functions to add mesh elements like vertices don't clear the runtime cache of things like triangulation, BVH trees, etc. This is important, since they might be accessed with incorrect sizes. This is split from a fix for T95839.
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r--source/blender/editors/mesh/mesh_data.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c
index 0f58752f323..7a089d7101e 100644
--- a/source/blender/editors/mesh/mesh_data.c
+++ b/source/blender/editors/mesh/mesh_data.c
@@ -37,6 +37,7 @@
#include "BKE_customdata.h"
#include "BKE_editmesh.h"
#include "BKE_mesh.h"
+#include "BKE_mesh_runtime.h"
#include "BKE_report.h"
#include "DEG_depsgraph.h"
@@ -1126,6 +1127,8 @@ static void mesh_add_verts(Mesh *mesh, int len)
mesh->vdata = vdata;
BKE_mesh_update_customdata_pointers(mesh, false);
+ BKE_mesh_runtime_clear_cache(mesh);
+
/* scan the input list and insert the new vertices */
/* set default flags */
@@ -1162,6 +1165,8 @@ static void mesh_add_edges(Mesh *mesh, int len)
mesh->edata = edata;
BKE_mesh_update_customdata_pointers(mesh, false); /* new edges don't change tessellation */
+ BKE_mesh_runtime_clear_cache(mesh);
+
/* set default flags */
medge = &mesh->medge[mesh->totedge];
for (i = 0; i < len; i++, medge++) {
@@ -1190,6 +1195,8 @@ static void mesh_add_loops(Mesh *mesh, int len)
CustomData_add_layer(&ldata, CD_MLOOP, CD_CALLOC, NULL, totloop);
}
+ BKE_mesh_runtime_clear_cache(mesh);
+
CustomData_free(&mesh->ldata, mesh->totloop);
mesh->ldata = ldata;
BKE_mesh_update_customdata_pointers(mesh, true);
@@ -1221,6 +1228,8 @@ static void mesh_add_polys(Mesh *mesh, int len)
mesh->pdata = pdata;
BKE_mesh_update_customdata_pointers(mesh, true);
+ BKE_mesh_runtime_clear_cache(mesh);
+
/* set default flags */
mpoly = &mesh->mpoly[mesh->totpoly];
for (i = 0; i < len; i++, mpoly++) {