[Bf-blender-cvs] [be2e41c397b] master: Cleanup: Move `BKE_animdata_free()` call out of each IDType free data.

Bastien Montagne noreply at git.blender.org
Mon Mar 9 18:43:21 CET 2020


Commit: be2e41c397ba4d13b13e817bee46628ce984bd6b
Author: Bastien Montagne
Date:   Mon Mar 9 18:40:06 2020 +0100
Branches: master
https://developer.blender.org/rBbe2e41c397ba4d13b13e817bee46628ce984bd6b

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).

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

M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/cachefile.c
M	source/blender/blenkernel/intern/camera.c
M	source/blender/blenkernel/intern/curve.c
M	source/blender/blenkernel/intern/gpencil.c
M	source/blender/blenkernel/intern/key.c
M	source/blender/blenkernel/intern/lattice.c
M	source/blender/blenkernel/intern/lib_id_delete.c
M	source/blender/blenkernel/intern/light.c
M	source/blender/blenkernel/intern/lightprobe.c
M	source/blender/blenkernel/intern/linestyle.c
M	source/blender/blenkernel/intern/mask.c
M	source/blender/blenkernel/intern/material.c
M	source/blender/blenkernel/intern/mball.c
M	source/blender/blenkernel/intern/mesh.c
M	source/blender/blenkernel/intern/movieclip.c
M	source/blender/blenkernel/intern/node.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/particle.c
M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenkernel/intern/speaker.c
M	source/blender/blenkernel/intern/texture.c
M	source/blender/blenkernel/intern/world.c

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

diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 6f0b5fb7421..0580ad55e43 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -138,7 +138,6 @@ static void armature_copy_data(Main *UNUSED(bmain), ID *id_dst, const ID *id_src
 static void armature_free_data(struct ID *id)
 {
   bArmature *armature = (bArmature *)id;
-  BKE_animdata_free(&armature->id, false);
 
   BKE_armature_bone_hash_free(armature);
   BKE_armature_bonelist_free(&armature->bonebase);
diff --git a/source/blender/blenkernel/intern/cachefile.c b/source/blender/blenkernel/intern/cachefile.c
index b92a9b0c453..ef5b09213a6 100644
--- a/source/blender/blenkernel/intern/cachefile.c
+++ b/source/blender/blenkernel/intern/cachefile.c
@@ -80,7 +80,6 @@ static void cache_file_copy_data(Main *UNUSED(bmain),
 static void cache_file_free_data(ID *id)
 {
   CacheFile *cache_file = (CacheFile *)id;
-  BKE_animdata_free((ID *)cache_file, false);
   cachefile_handle_free(cache_file);
   BLI_freelistN(&cache_file->object_paths);
 }
diff --git a/source/blender/blenkernel/intern/camera.c b/source/blender/blenkernel/intern/camera.c
index d2829bc1cd6..d1a6ebb222c 100644
--- a/source/blender/blenkernel/intern/camera.c
+++ b/source/blender/blenkernel/intern/camera.c
@@ -112,8 +112,6 @@ static void camera_free_data(ID *id)
 {
   Camera *cam = (Camera *)id;
   BLI_freelistN(&cam->bg_images);
-
-  BKE_animdata_free(id, false);
 }
 
 IDTypeInfo IDType_ID_CA = {
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 95d9a7e883d..13e6dc0fa40 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -105,8 +105,6 @@ static void curve_free_data(ID *id)
 {
   Curve *curve = (Curve *)id;
 
-  BKE_animdata_free((ID *)curve, false);
-
   BKE_curve_batch_cache_free(curve);
 
   BKE_nurbList_free(&curve->nurb);
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index e2f28355ff3..6cd2d36c188 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -263,9 +263,6 @@ void BKE_gpencil_free_layers(ListBase *list)
 /** Free (or release) any data used by this grease pencil (does not free the gpencil itself). */
 void BKE_gpencil_free(bGPdata *gpd, bool free_all)
 {
-  /* clear animation data */
-  BKE_animdata_free(&gpd->id, false);
-
   /* free layers */
   BKE_gpencil_free_layers(&gpd->layers);
 
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 77e3a3dc005..59ecf8178f0 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -84,8 +84,6 @@ static void shapekey_free_data(ID *id)
   Key *key = (Key *)id;
   KeyBlock *kb;
 
-  BKE_animdata_free((ID *)key, false);
-
   while ((kb = BLI_pophead(&key->block))) {
     if (kb->data) {
       MEM_freeN(kb->data);
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index d4f25b781bd..02bf4dfac8e 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -99,8 +99,6 @@ static void lattice_free_data(ID *id)
 {
   Lattice *lattice = (Lattice *)id;
 
-  BKE_animdata_free(&lattice->id, false);
-
   BKE_lattice_batch_cache_free(lattice);
 
   MEM_SAFE_FREE(lattice->def);
diff --git a/source/blender/blenkernel/intern/lib_id_delete.c b/source/blender/blenkernel/intern/lib_id_delete.c
index 2e45cd0d202..824d1600ecc 100644
--- a/source/blender/blenkernel/intern/lib_id_delete.c
+++ b/source/blender/blenkernel/intern/lib_id_delete.c
@@ -57,6 +57,7 @@
 #include "BLI_listbase.h"
 
 #include "BKE_action.h"
+#include "BKE_animsys.h"
 #include "BKE_armature.h"
 #include "BKE_brush.h"
 #include "BKE_camera.h"
@@ -119,8 +120,7 @@ void BKE_libblock_free_data(ID *id, const bool do_id_user)
     BKE_lib_override_library_free(&id->override_library, do_id_user);
   }
 
-  /* XXX TODO remove animdata handling from each type's freeing func,
-   * and do it here, like for copy! */
+  BKE_animdata_free(id, do_id_user);
 }
 
 void BKE_libblock_free_datablock(ID *id, const int UNUSED(flag))
diff --git a/source/blender/blenkernel/intern/light.c b/source/blender/blenkernel/intern/light.c
index d37e0af1ce2..5f14352a1b0 100644
--- a/source/blender/blenkernel/intern/light.c
+++ b/source/blender/blenkernel/intern/light.c
@@ -143,7 +143,6 @@ static void light_make_local(Main *bmain, ID *id, const int flags)
 static void light_free_data(ID *id)
 {
   Light *la = (Light *)id;
-  BKE_animdata_free(&la->id, false);
 
   BKE_curvemapping_free(la->curfalloff);
 
diff --git a/source/blender/blenkernel/intern/lightprobe.c b/source/blender/blenkernel/intern/lightprobe.c
index f360edfbf54..5848444a0d7 100644
--- a/source/blender/blenkernel/intern/lightprobe.c
+++ b/source/blender/blenkernel/intern/lightprobe.c
@@ -110,11 +110,6 @@ static void lightprobe_make_local(Main *bmain, ID *id, const int flags)
   BKE_lib_id_make_local_generic(bmain, id, flags);
 }
 
-static void lightprobe_free_data(ID *id)
-{
-  BKE_animdata_free(id, false);
-}
-
 IDTypeInfo IDType_ID_LP = {
     .id_code = ID_LP,
     .id_filter = FILTER_ID_LP,
@@ -127,6 +122,6 @@ IDTypeInfo IDType_ID_LP = {
 
     .init_data = lightprobe_init_data,
     .copy_data = lightprobe_copy_data,
-    .free_data = lightprobe_free_data,
+    .free_data = NULL,
     .make_local = lightprobe_make_local,
 };
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index c309557e531..c5767e8bbcc 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -120,8 +120,6 @@ static void linestyle_free_data(ID *id)
   FreestyleLineStyle *linestyle = (FreestyleLineStyle *)id;
   LineStyleModifier *linestyle_modifier;
 
-  BKE_animdata_free(&linestyle->id, false);
-
   for (int material_slot_index = 0; material_slot_index < MAX_MTEX; material_slot_index++) {
     MEM_SAFE_FREE(linestyle->mtex[material_slot_index]);
   }
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index ceb03ec6779..5a212bfef37 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -81,8 +81,6 @@ static void mask_free_data(ID *id)
 {
   Mask *mask = (Mask *)id;
 
-  BKE_animdata_free((ID *)mask, false);
-
   /* free mask data */
   BKE_mask_layer_free_list(&mask->masklayers);
 }
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 22d7c505e60..368eb099579 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -123,8 +123,6 @@ static void material_free_data(ID *id)
 {
   Material *material = (Material *)id;
 
-  BKE_animdata_free((ID *)material, false);
-
   /* Free gpu material before the ntree */
   GPU_material_free(&material->gpumaterial);
 
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index 3154e4c8af9..624911a9792 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -92,8 +92,6 @@ static void metaball_free_data(ID *id)
 {
   MetaBall *metaball = (MetaBall *)id;
 
-  BKE_animdata_free((ID *)metaball, false);
-
   BKE_mball_batch_cache_free(metaball);
 
   MEM_SAFE_FREE(metaball->mat);
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) {
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index 796681876e0..f91047f1cd4 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -105,7 +105,6 @@ static void movie_clip_free_data(ID *id)
   free_buffers(movie_clip);
 
   BKE_tracking_free(&movie_clip->tracking);
-  BKE_animdata_free((ID *)movie_clip, false);
 }
 
 IDTypeInfo IDType_ID_MC = {
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index a2bd1296c2b..1feb20ec272 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -195,8 +195,6 @@ static void ntree_free_data(ID *id)
   bNode *node, *next;
   bNodeSocket *sock, *nextsock;
 
-  BKE_animdata_free((ID *)ntree, false);
-
   /* XXX hack! node trees should not store execution graphs at all.
    * This should be removed when old tree types no longer require it.
    * Currently the execution data for texture nodes remains in the tree
@@ -2156,6 +2154,7 @@ static void free_localized_node_groups(bNodeTree *nt

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list