From be2e41c397ba4d13b13e817bee46628ce984bd6b Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Mon, 9 Mar 2020 18:40:06 +0100 Subject: Cleanup: Move `BKE_animdata_free()` call out of each IDType free data. This has been long standing TODO... Note that remaining usages of BKE_xxx_delete should all be carefully checked for and utilmately nuked in favor of `BKE_id_delete()`, think we still have quiet a few bugs hidden in those (code seems to usually assume those functions do a full ID deletion, which is not the case). --- source/blender/blenkernel/intern/mesh.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'source/blender/blenkernel/intern/mesh.c') diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 67b94706986..127acf0e464 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -61,6 +61,7 @@ #include "DEG_depsgraph.h" #include "DEG_depsgraph_query.h" +static void mesh_clear_geometry(Mesh *mesh); static void mesh_tessface_clear_intern(Mesh *mesh, int free_customdata); static void mesh_init_data(ID *id) @@ -136,7 +137,9 @@ static void mesh_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int static void mesh_free_data(ID *id) { Mesh *mesh = (Mesh *)id; - BKE_mesh_clear_geometry(mesh); + + BKE_mesh_runtime_clear_cache(mesh); + mesh_clear_geometry(mesh); MEM_SAFE_FREE(mesh->mat); } @@ -586,11 +589,8 @@ void BKE_mesh_free(Mesh *me) mesh_free_data(&me->id); } -void BKE_mesh_clear_geometry(Mesh *mesh) +static void mesh_clear_geometry(Mesh *mesh) { - BKE_animdata_free(&mesh->id, false); - BKE_mesh_runtime_clear_cache(mesh); - CustomData_free(&mesh->vdata, mesh->totvert); CustomData_free(&mesh->edata, mesh->totedge); CustomData_free(&mesh->fdata, mesh->totface); @@ -615,6 +615,13 @@ void BKE_mesh_clear_geometry(Mesh *mesh) BKE_mesh_update_customdata_pointers(mesh, false); } +void BKE_mesh_clear_geometry(Mesh *mesh) +{ + BKE_animdata_free(&mesh->id, false); + BKE_mesh_runtime_clear_cache(mesh); + mesh_clear_geometry(mesh); +} + static void mesh_tessface_clear_intern(Mesh *mesh, int free_customdata) { if (free_customdata) { -- cgit v1.2.3