diff options
author | Bastien Montagne <b.mont29@gmail.com> | 2020-03-09 20:40:06 +0300 |
---|---|---|
committer | Bastien Montagne <b.mont29@gmail.com> | 2020-03-09 20:43:11 +0300 |
commit | be2e41c397ba4d13b13e817bee46628ce984bd6b (patch) | |
tree | 3b9f34cf8f7d0b7635d74d81e7de541e55515717 /source/blender/blenkernel/intern/mesh.c | |
parent | 6472a721f0f6df6e813f4cb78217d70f8aed588e (diff) |
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).
Diffstat (limited to 'source/blender/blenkernel/intern/mesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 17 |
1 files changed, 12 insertions, 5 deletions
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) { |