[Bf-blender-cvs] [353fe610ed2] blender-v3.1-release: Fix: Clear mesh runtime cache when adding elements

Hans Goudey noreply at git.blender.org
Tue Feb 22 17:15:04 CET 2022


Commit: 353fe610ed2d31bda2da93f59a174fe1642d96ad
Author: Hans Goudey
Date:   Tue Feb 22 11:14:50 2022 -0500
Branches: blender-v3.1-release
https://developer.blender.org/rB353fe610ed2d31bda2da93f59a174fe1642d96ad

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.

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

M	source/blender/editors/mesh/mesh_data.c

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

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++) {



More information about the Bf-blender-cvs mailing list