[Bf-blender-cvs] [09bfa9bb63e] temp-T73411-view-layer-lazy-cache: Introducing BKE_view_layer_object_bases_get(_const).

Monique noreply at git.blender.org
Mon Sep 5 20:44:38 CEST 2022


Commit: 09bfa9bb63e2c93b4394af05a31ddeeae4a02fa4
Author: Monique
Date:   Thu Aug 25 22:47:02 2022 +0200
Branches: temp-T73411-view-layer-lazy-cache
https://developer.blender.org/rB09bfa9bb63e2c93b4394af05a31ddeeae4a02fa4

Introducing BKE_view_layer_object_bases_get(_const).

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

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/layer_utils.c
M	source/blender/blenkernel/intern/mball.cc
M	source/blender/blenkernel/intern/object.cc
M	source/blender/blenkernel/intern/scene.cc
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations.cc
M	source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
M	source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
M	source/blender/editors/animation/anim_channels_edit.c
M	source/blender/editors/animation/anim_filter.c
M	source/blender/editors/gpencil/gpencil_armature.c
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/object/object_utils.c
M	source/blender/editors/render/render_internal.cc
M	source/blender/editors/render/render_preview.cc
M	source/blender/editors/screen/screen_context.c
M	source/blender/editors/space_nla/nla_channels.c
M	source/blender/editors/space_outliner/outliner_collections.cc
M	source/blender/editors/space_outliner/outliner_tools.cc
M	source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
M	source/blender/editors/space_view3d/view3d_navigate.c
M	source/blender/editors/space_view3d/view3d_select.cc
M	source/blender/editors/transform/transform_convert_object.c
M	source/blender/editors/transform/transform_gizmo_3d.c
M	source/blender/editors/transform/transform_snap_object.cc
M	source/blender/editors/undo/ed_undo.c
M	source/blender/io/alembic/exporter/abc_subdiv_disabler.cc
M	source/blender/io/collada/BlenderContext.cpp
M	source/blender/io/gpencil/intern/gpencil_io_base.cc
M	source/blender/makesrna/intern/rna_layer.c

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

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 49dc87629d6..9b3b7f4bfc1 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -425,7 +425,8 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
   { \
     Object *_instance; \
     Base *_base; \
-    for (_base = (Base *)(view_layer)->object_bases.first; _base; _base = _base->next) { \
+    for (_base = (Base *)BKE_view_layer_object_bases_get(view_layer, __func__)->first; _base; \
+         _base = _base->next) { \
       _instance = _base->object;
 
 #define FOREACH_OBJECT_END \
@@ -546,6 +547,11 @@ struct Object **BKE_view_layer_array_from_objects_in_mode_unique_data(struct Vie
 struct Object *BKE_view_layer_active_object_get(const struct ViewLayer *view_layer);
 struct Object *BKE_view_layer_edit_object_get(const struct ViewLayer *view_layer);
 
+struct ListBase *BKE_view_layer_object_bases_get(struct ViewLayer *view_layer, const char *name);
+// This should not exist in the final solution.
+const struct ListBase *BKE_view_layer_object_bases_get_const(const struct ViewLayer *view_layer,
+                                                             const char *name);
+
 struct ViewLayerAOV *BKE_view_layer_add_aov(struct ViewLayer *view_layer);
 void BKE_view_layer_remove_aov(struct ViewLayer *view_layer, struct ViewLayerAOV *aov);
 void BKE_view_layer_set_active_aov(struct ViewLayer *view_layer, struct ViewLayerAOV *aov);
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 53a9b6d469d..4f5be581c6d 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -245,7 +245,7 @@ void BKE_view_layer_free_ex(ViewLayer *view_layer, const bool do_id_user)
 {
   view_layer->basact = NULL;
 
-  BLI_freelistN(&view_layer->object_bases);
+  BLI_freelistN(BKE_view_layer_object_bases_get(view_layer, __func__));
 
   if (view_layer->object_bases_hash) {
     BLI_ghash_free(view_layer->object_bases_hash, NULL, NULL);
@@ -285,7 +285,7 @@ void BKE_view_layer_free_ex(ViewLayer *view_layer, const bool do_id_user)
 
 void BKE_view_layer_selected_objects_tag(ViewLayer *view_layer, const int tag)
 {
-  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
     if ((base->flag & BASE_SELECTED) != 0) {
       base->object->flag |= tag;
     }
@@ -310,7 +310,7 @@ static bool find_scene_collection_in_scene_collections(ListBase *lb, const Layer
 
 Object *BKE_view_layer_camera_find(ViewLayer *view_layer)
 {
-  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
     if (base->object->type == OB_CAMERA) {
       return base->object;
     }
@@ -342,7 +342,8 @@ static void view_layer_bases_hash_create(ViewLayer *view_layer, const bool do_ba
     if (view_layer->object_bases_hash == NULL) {
       GHash *hash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
 
-      LISTBASE_FOREACH_MUTABLE (Base *, base, &view_layer->object_bases) {
+      LISTBASE_FOREACH_MUTABLE (
+          Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
         if (base->object) {
           void **val_pp;
           if (!BLI_ghash_ensure_p(hash, base->object, &val_pp)) {
@@ -358,7 +359,7 @@ static void view_layer_bases_hash_create(ViewLayer *view_layer, const bool do_ba
             if (view_layer->basact == base) {
               view_layer->basact = NULL;
             }
-            BLI_freelinkN(&view_layer->object_bases, base);
+            BLI_freelinkN(BKE_view_layer_object_bases_get(view_layer, __func__), base);
           }
           else {
             CLOG_FATAL(&LOG,
@@ -387,9 +388,7 @@ Base *BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
 
 void BKE_view_layer_base_deselect_all(ViewLayer *view_layer)
 {
-  Base *base;
-
-  for (base = view_layer->object_bases.first; base; base = base->next) {
+  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
     base->flag &= ~BASE_SELECTED;
   }
 }
@@ -495,13 +494,15 @@ void BKE_view_layer_copy_data(Scene *scene_dst,
 
   /* Clear temporary data. */
   BLI_listbase_clear(&view_layer_dst->drawdata);
+  // TODO: BKE_view_layer_object_bases_get should we set tag the view_layer_dst here for rebuild.
   view_layer_dst->object_bases_array = NULL;
   view_layer_dst->object_bases_hash = NULL;
 
   /* Copy layer collections and object bases. */
   /* Inline 'BLI_duplicatelist' and update the active base. */
   BLI_listbase_clear(&view_layer_dst->object_bases);
-  LISTBASE_FOREACH (Base *, base_src, &view_layer_src->object_bases) {
+  LISTBASE_FOREACH (
+      const Base *, base_src, BKE_view_layer_object_bases_get_const(view_layer_src, __func__)) {
     Base *base_dst = MEM_dupallocN(base_src);
     BLI_addtail(&view_layer_dst->object_bases, base_dst);
     if (view_layer_src->basact == base_src) {
@@ -985,7 +986,7 @@ static void layer_collection_objects_sync(ViewLayer *view_layer,
        * case also works. */
       base = *base_p;
       if (!ELEM(base, r_lb_new_object_bases->first, r_lb_new_object_bases->last)) {
-        BLI_remlink(&view_layer->object_bases, base);
+        BLI_remlink(BKE_view_layer_object_bases_get(view_layer, __func__), base);
         BLI_addtail(r_lb_new_object_bases, base);
       }
     }
@@ -1269,7 +1270,7 @@ void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer)
   }
 
   /* Clear visible and selectable flags to be reset. */
-  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
     base->flag &= ~g_base_collection_flags;
     base->flag_from_collection &= ~g_base_collection_flags;
   }
@@ -1298,7 +1299,7 @@ void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer)
   master_layer_resync = NULL;
 
   /* Any remaining object bases are to be removed. */
-  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
     if (view_layer->basact == base) {
       view_layer->basact = NULL;
     }
@@ -1319,7 +1320,7 @@ void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer)
 
   view_layer_objects_base_cache_validate(view_layer, NULL);
 
-  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
     BKE_base_eval_flags(base);
   }
 
@@ -1492,7 +1493,7 @@ void BKE_base_set_visible(Scene *scene, ViewLayer *view_layer, Base *base, bool
 {
   if (!extend) {
     /* Make only one base visible. */
-    LISTBASE_FOREACH (Base *, other, &view_layer->object_bases) {
+    LISTBASE_FOREACH (Base *, other, BKE_view_layer_object_bases_get(view_layer, __func__)) {
       other->flag |= BASE_HIDDEN;
     }
 
@@ -1684,7 +1685,7 @@ void BKE_layer_collection_local_sync(ViewLayer *view_layer, const View3D *v3d)
   const unsigned short local_collections_uuid = v3d->local_collections_uuid;
 
   /* Reset flags and set the bases visible by default. */
-  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
     base->local_collections_bits &= ~local_collections_uuid;
   }
 
@@ -1934,7 +1935,7 @@ static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in_v, con
   ObjectsVisibleIteratorData *data_in = data_in_v;
   ViewLayer *view_layer = data_in->view_layer;
   const View3D *v3d = data_in->v3d;
-  Base *base = view_layer->object_bases.first;
+  Base *base = BKE_view_layer_object_bases_get(view_layer, __func__)->first;
 
   /* when there are no objects */
   if (base == NULL) {
@@ -2166,6 +2167,8 @@ void BKE_view_layer_bases_in_mode_iterator_next(BLI_Iterator *iter)
 
   if (base == data->base_active) {
     /* first step */
+    // TODO: We should assure that the object_bases are valid. Adding
+    // BKE_view_layer_object_bases_get here seems not correct. this should happen by the caller.
     base = data->view_layer->object_bases.first;
     if ((base == data->base_active) && BKE_base_is_visible(data->v3d, base)) {
       base = base->next;
@@ -2235,12 +2238,13 @@ static void layer_eval_view_layer(struct Depsgraph *depsgraph,
   DEG_debug_print_eval(depsgraph, __func__, view_layer->name, view_layer);
 
   /* Create array of bases, for fast index-based lookup. */
-  const int num_object_bases = BLI_listbase_count(&view_layer->object_bases);
+  const int num_object_bases = BLI_listbase_count(
+      BKE_view_layer_object_bases_get(view_layer, __func__));
   MEM_SAFE_FREE(view_layer->object_bases_array);
   view_layer->object_bases_array = MEM_malloc_arrayN(
       num_object_bases, sizeof(Base *), "view_layer->object_bases_array");
   int base_index = 0;
-  LISTBASE_FOREACH (Base *, base, &view_layer->object_bases) {
+  LISTBASE_FOREACH (Base *, base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
     view_layer->object_bases_array[base_index++] = base;
   }
 }
@@ -2273,7 +2277,7 @@ static void write_layer_collections(BlendWriter *writer, ListBase *lb)
 void BKE_view_layer_blend_write(BlendWriter *writer, ViewLayer *view_layer)
 {
   BLO_write_struct(writer, ViewLayer, view_layer);
-  BLO_write_struct_list(writer, Base, &view_layer->object_bases);
+  BLO_write_struct_list(writer, Base, BKE_view_layer_object_bases_get(view_layer, __func__));
 
   if (view_layer->id_properties) {
     IDP_BlendWrite(writer, view_layer->id_properties);
@@ -2315,7 +2319,7 @@ static void direct_link_layer_collections(BlendDataReader *reader, ListBase *lb,
 void BKE_view_layer_blend_read_data(BlendDataReader *reader, ViewLayer *view_layer)
 {
   view_layer->stats = NULL;
-  BLO_read_list(reader, &view_layer->object_bases);
+  BLO_read_list(reader, BKE_view_layer_object_bases_get(view_layer, __func__));
   BLO_read_data_address(reader, &view_layer->basact);
 
   direct_lin

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list