[Bf-blender-cvs] [1f6ef73f986] master: Refactor: Move scene foreach_id to new IDTypeInfo structure.

Bastien Montagne noreply at git.blender.org
Thu May 21 19:40:40 CEST 2020


Commit: 1f6ef73f9866a7076d40ebe1cbb5f2f6a4b88001
Author: Bastien Montagne
Date:   Thu May 21 19:29:55 2020 +0200
Branches: master
https://developer.blender.org/rB1f6ef73f9866a7076d40ebe1cbb5f2f6a4b88001

Refactor: Move scene foreach_id to new IDTypeInfo structure.

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

M	source/blender/blenkernel/intern/lib_query.c
M	source/blender/blenkernel/intern/scene.c

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

diff --git a/source/blender/blenkernel/intern/lib_query.c b/source/blender/blenkernel/intern/lib_query.c
index b7297240524..0aef1e19542 100644
--- a/source/blender/blenkernel/intern/lib_query.c
+++ b/source/blender/blenkernel/intern/lib_query.c
@@ -235,17 +235,6 @@ void BKE_lib_query_idpropertiesForeachIDLink_callback(IDProperty *id_prop, void
   BKE_LIB_FOREACHID_PROCESS_ID(data, id_prop->data.pointer, IDWALK_CB_USER);
 }
 
-static void library_foreach_rigidbodyworldSceneLooper(struct RigidBodyWorld *UNUSED(rbw),
-                                                      ID **id_pointer,
-                                                      void *user_data,
-                                                      int cb_flag)
-{
-  LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
-  FOREACH_CALLBACK_INVOKE_ID_PP(data, id_pointer, cb_flag);
-
-  FOREACH_FINALIZE_VOID;
-}
-
 static void library_foreach_nla_strip(LibraryForeachIDData *data, NlaStrip *strip)
 {
   FOREACH_CALLBACK_INVOKE(data, strip->act, IDWALK_CB_USER);
@@ -283,33 +272,6 @@ static void library_foreach_animationData(LibraryForeachIDData *data, AnimData *
   FOREACH_FINALIZE_VOID;
 }
 
-static void library_foreach_paint(LibraryForeachIDData *data, Paint *paint)
-{
-  FOREACH_CALLBACK_INVOKE(data, paint->brush, IDWALK_CB_USER);
-  for (int i = 0; i < paint->tool_slots_len; i++) {
-    FOREACH_CALLBACK_INVOKE(data, paint->tool_slots[i].brush, IDWALK_CB_USER);
-  }
-  FOREACH_CALLBACK_INVOKE(data, paint->palette, IDWALK_CB_USER);
-
-  FOREACH_FINALIZE_VOID;
-}
-
-static void library_foreach_layer_collection(LibraryForeachIDData *data, ListBase *lb)
-{
-  LISTBASE_FOREACH (LayerCollection *, lc, lb) {
-    /* XXX This is very weak. The whole idea of keeping pointers to private IDs is very bad
-     * anyway... */
-    const int cb_flag = (lc->collection != NULL &&
-                         (lc->collection->id.flag & LIB_EMBEDDED_DATA) != 0) ?
-                            IDWALK_CB_EMBEDDED :
-                            IDWALK_CB_NOP;
-    FOREACH_CALLBACK_INVOKE(data, lc->collection, cb_flag);
-    library_foreach_layer_collection(data, &lc->layer_collections);
-  }
-
-  FOREACH_FINALIZE_VOID;
-}
-
 bool BKE_library_foreach_ID_embedded(LibraryForeachIDData *data, ID **id_pp)
 {
   /* Needed e.g. for callbacks handling relationships... This call shall be absolutely readonly. */
@@ -458,122 +420,7 @@ static void library_foreach_ID_link(Main *bmain,
         break;
       }
       case ID_SCE: {
-        Scene *scene = (Scene *)id;
-        ToolSettings *toolsett = scene->toolsettings;
-
-        CALLBACK_INVOKE(scene->camera, IDWALK_CB_NOP);
-        CALLBACK_INVOKE(scene->world, IDWALK_CB_USER);
-        CALLBACK_INVOKE(scene->set, IDWALK_CB_NEVER_SELF);
-        CALLBACK_INVOKE(scene->clip, IDWALK_CB_USER);
-        CALLBACK_INVOKE(scene->gpd, IDWALK_CB_USER);
-        CALLBACK_INVOKE(scene->r.bake.cage_object, IDWALK_CB_NOP);
-        if (scene->nodetree) {
-          /* nodetree **are owned by IDs**, treat them as mere sub-data and not real ID! */
-          BKE_library_foreach_ID_embedded(&data, (ID **)&scene->nodetree);
-        }
-        if (scene->ed) {
-          Sequence *seq;
-          SEQP_BEGIN (scene->ed, seq) {
-            CALLBACK_INVOKE(seq->scene, IDWALK_CB_NEVER_SELF);
-            CALLBACK_INVOKE(seq->scene_camera, IDWALK_CB_NOP);
-            CALLBACK_INVOKE(seq->clip, IDWALK_CB_USER);
-            CALLBACK_INVOKE(seq->mask, IDWALK_CB_USER);
-            CALLBACK_INVOKE(seq->sound, IDWALK_CB_USER);
-            IDP_foreach_property(seq->prop,
-                                 IDP_TYPE_FILTER_ID,
-                                 BKE_lib_query_idpropertiesForeachIDLink_callback,
-                                 &data);
-            LISTBASE_FOREACH (SequenceModifierData *, smd, &seq->modifiers) {
-              CALLBACK_INVOKE(smd->mask_id, IDWALK_CB_USER);
-            }
-
-            if (seq->type == SEQ_TYPE_TEXT && seq->effectdata) {
-              TextVars *text_data = seq->effectdata;
-              CALLBACK_INVOKE(text_data->text_font, IDWALK_CB_USER);
-            }
-          }
-          SEQ_END;
-        }
-
-        /* This pointer can be NULL during old files reading, better be safe than sorry. */
-        if (scene->master_collection != NULL) {
-          BKE_library_foreach_ID_embedded(&data, (ID **)&scene->master_collection);
-        }
-
-        LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
-          CALLBACK_INVOKE(view_layer->mat_override, IDWALK_CB_USER);
-
-          LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
-            CALLBACK_INVOKE(base->object, IDWALK_CB_NOP);
-          }
-
-          library_foreach_layer_collection(&data, &view_layer->layer_collections);
-
-          LISTBASE_FOREACH (FreestyleModuleConfig *, fmc, &view_layer->freestyle_config.modules) {
-            if (fmc->script) {
-              CALLBACK_INVOKE(fmc->script, IDWALK_CB_NOP);
-            }
-          }
-
-          LISTBASE_FOREACH (FreestyleLineSet *, fls, &view_layer->freestyle_config.linesets) {
-            if (fls->group) {
-              CALLBACK_INVOKE(fls->group, IDWALK_CB_USER);
-            }
-
-            if (fls->linestyle) {
-              CALLBACK_INVOKE(fls->linestyle, IDWALK_CB_USER);
-            }
-          }
-        }
-
-        LISTBASE_FOREACH (TimeMarker *, marker, &scene->markers) {
-          CALLBACK_INVOKE(marker->camera, IDWALK_CB_NOP);
-        }
-
-        if (toolsett) {
-          CALLBACK_INVOKE(toolsett->particle.scene, IDWALK_CB_NOP);
-          CALLBACK_INVOKE(toolsett->particle.object, IDWALK_CB_NOP);
-          CALLBACK_INVOKE(toolsett->particle.shape_object, IDWALK_CB_NOP);
-
-          library_foreach_paint(&data, &toolsett->imapaint.paint);
-          CALLBACK_INVOKE(toolsett->imapaint.stencil, IDWALK_CB_USER);
-          CALLBACK_INVOKE(toolsett->imapaint.clone, IDWALK_CB_USER);
-          CALLBACK_INVOKE(toolsett->imapaint.canvas, IDWALK_CB_USER);
-
-          if (toolsett->vpaint) {
-            library_foreach_paint(&data, &toolsett->vpaint->paint);
-          }
-          if (toolsett->wpaint) {
-            library_foreach_paint(&data, &toolsett->wpaint->paint);
-          }
-          if (toolsett->sculpt) {
-            library_foreach_paint(&data, &toolsett->sculpt->paint);
-            CALLBACK_INVOKE(toolsett->sculpt->gravity_object, IDWALK_CB_NOP);
-          }
-          if (toolsett->uvsculpt) {
-            library_foreach_paint(&data, &toolsett->uvsculpt->paint);
-          }
-          if (toolsett->gp_paint) {
-            library_foreach_paint(&data, &toolsett->gp_paint->paint);
-          }
-          if (toolsett->gp_vertexpaint) {
-            library_foreach_paint(&data, &toolsett->gp_vertexpaint->paint);
-          }
-          if (toolsett->gp_sculptpaint) {
-            library_foreach_paint(&data, &toolsett->gp_sculptpaint->paint);
-          }
-          if (toolsett->gp_weightpaint) {
-            library_foreach_paint(&data, &toolsett->gp_weightpaint->paint);
-          }
-
-          CALLBACK_INVOKE(toolsett->gp_sculpt.guide.reference_object, IDWALK_CB_NOP);
-        }
-
-        if (scene->rigidbody_world) {
-          BKE_rigidbody_world_id_loop(
-              scene->rigidbody_world, library_foreach_rigidbodyworldSceneLooper, &data);
-        }
-
+        BLI_assert(0);
         break;
       }
 
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index 80c7bba65aa..34249e0a8f7 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -33,6 +33,7 @@
 #include "DNA_defaults.h"
 #include "DNA_gpencil_types.h"
 #include "DNA_linestyle_types.h"
+#include "DNA_mask_types.h"
 #include "DNA_mesh_types.h"
 #include "DNA_node_types.h"
 #include "DNA_object_types.h"
@@ -42,6 +43,7 @@
 #include "DNA_sequence_types.h"
 #include "DNA_sound_types.h"
 #include "DNA_space_types.h"
+#include "DNA_text_types.h"
 #include "DNA_view3d_types.h"
 #include "DNA_windowmanager_types.h"
 #include "DNA_workspace_types.h"
@@ -77,6 +79,7 @@
 #include "BKE_image.h"
 #include "BKE_layer.h"
 #include "BKE_lib_id.h"
+#include "BKE_lib_query.h"
 #include "BKE_lib_remap.h"
 #include "BKE_linestyle.h"
 #include "BKE_main.h"
@@ -418,6 +421,155 @@ static void scene_free_data(ID *id)
   BLI_assert(scene->layer_properties == NULL);
 }
 
+static void library_foreach_rigidbodyworldSceneLooper(struct RigidBodyWorld *UNUSED(rbw),
+                                                      ID **id_pointer,
+                                                      void *user_data,
+                                                      int cb_flag)
+{
+  LibraryForeachIDData *data = (LibraryForeachIDData *)user_data;
+  BKE_lib_query_foreachid_process(data, id_pointer, cb_flag);
+}
+
+static void library_foreach_paint(LibraryForeachIDData *data, Paint *paint)
+{
+  BKE_LIB_FOREACHID_PROCESS(data, paint->brush, IDWALK_CB_USER);
+  for (int i = 0; i < paint->tool_slots_len; i++) {
+    BKE_LIB_FOREACHID_PROCESS(data, paint->tool_slots[i].brush, IDWALK_CB_USER);
+  }
+  BKE_LIB_FOREACHID_PROCESS(data, paint->palette, IDWALK_CB_USER);
+}
+
+static void library_foreach_layer_collection(LibraryForeachIDData *data, ListBase *lb)
+{
+  LISTBASE_FOREACH (LayerCollection *, lc, lb) {
+    /* XXX This is very weak. The whole idea of keeping pointers to private IDs is very bad
+     * anyway... */
+    const int cb_flag = (lc->collection != NULL &&
+                         (lc->collection->id.flag & LIB_EMBEDDED_DATA) != 0) ?
+                            IDWALK_CB_EMBEDDED :
+                            IDWALK_CB_NOP;
+    BKE_LIB_FOREACHID_PROCESS(data, lc->collection, cb_flag);
+    library_foreach_layer_collection(data, &lc->layer_collections);
+  }
+}
+
+static void scene_foreach_id(ID *id, LibraryForeachIDData *data)
+{
+  Scene *scene = (Scene *)id;
+
+  BKE_LIB_FOREACHID_PROCESS(data, scene->camera, IDWALK_CB_NOP);
+  BKE_LIB_FOREACHID_PROCESS(data, scene->world, IDWALK_CB_USER);
+  BKE_LIB_FOREACHID_PROCESS(data, scene->set, IDWALK_CB_NEVER_SELF);
+  BKE_LIB_FOREACHID_PROCESS(data, scene->clip, IDWALK_CB

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list