[Bf-blender-cvs] [3e6395283e6] temp-T73411-view-layer-lazy-cache: Introduce BKE_view_layer_active_base_get.

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


Commit: 3e6395283e656a825929e858c6d969057af1dea0
Author: Monique
Date:   Thu Sep 1 14:34:55 2022 +0200
Branches: temp-T73411-view-layer-lazy-cache
https://developer.blender.org/rB3e6395283e656a825929e858c6d969057af1dea0

Introduce BKE_view_layer_active_base_get.

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

M	source/blender/blenkernel/BKE_layer.h
M	source/blender/blenkernel/intern/DerivedMesh.cc
M	source/blender/blenkernel/intern/layer.c
M	source/blender/blenkernel/intern/layer_utils.c
M	source/blender/blenkernel/intern/object.cc
M	source/blender/blenkernel/intern/paint.cc
M	source/blender/blenkernel/intern/particle.c
M	source/blender/draw/intern/draw_common.c
M	source/blender/editors/animation/anim_filter.c
M	source/blender/editors/armature/armature_select.c
M	source/blender/editors/curve/editcurve.c
M	source/blender/editors/curve/editcurve_select.c
M	source/blender/editors/curve/editfont.c
M	source/blender/editors/lattice/editlattice_select.c
M	source/blender/editors/mesh/editmesh_path.c
M	source/blender/editors/mesh/editmesh_polybuild.c
M	source/blender/editors/mesh/editmesh_select.c
M	source/blender/editors/metaball/mball_edit.c
M	source/blender/editors/object/object_add.cc
M	source/blender/editors/object/object_constraint.c
M	source/blender/editors/object/object_hook.c
M	source/blender/editors/object/object_relations.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/physics/particle_object.c
M	source/blender/editors/screen/screen_context.c
M	source/blender/editors/space_buttons/buttons_context.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/outliner_tree.cc
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_buttons.c
M	source/blender/editors/space_view3d/view3d_gizmo_armature.c
M	source/blender/editors/space_view3d/view3d_gizmo_camera.c
M	source/blender/editors/space_view3d/view3d_gizmo_empty.c
M	source/blender/editors/space_view3d/view3d_gizmo_forcefield.c
M	source/blender/editors/space_view3d/view3d_gizmo_light.c
M	source/blender/editors/space_view3d/view3d_gizmo_preselect_type.c
M	source/blender/editors/space_view3d/view3d_select.cc
M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_gizmo_3d.c
M	source/blender/editors/transform/transform_snap.c
M	source/blender/editors/transform/transform_snap_object.cc
M	source/blender/editors/undo/ed_undo.c
M	source/blender/editors/util/ed_util.c
M	source/blender/makesrna/intern/rna_layer.c
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index 9b3b7f4bfc1..d21c297f5d0 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -360,7 +360,7 @@ void BKE_view_layer_visible_bases_iterator_end(BLI_Iterator *iter);
     data_.object_type = _object_type; \
     data_.view_layer = _view_layer; \
     data_.v3d = _v3d; \
-    data_.base_active = _view_layer->basact; \
+    data_.base_active = BKE_view_layer_active_base_get(_view_layer, __func__); \
     ITER_BEGIN (BKE_view_layer_bases_in_mode_iterator_begin, \
                 BKE_view_layer_bases_in_mode_iterator_next, \
                 BKE_view_layer_bases_in_mode_iterator_end, \
@@ -548,6 +548,7 @@ struct Object *BKE_view_layer_active_object_get(const struct ViewLayer *view_lay
 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);
+struct Base *BKE_view_layer_active_base_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);
diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc
index 46a8caafa70..faf057e5bfc 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.cc
+++ b/source/blender/blenkernel/intern/DerivedMesh.cc
@@ -1758,8 +1758,10 @@ static void object_get_datamask(const Depsgraph *depsgraph,
     return;
   }
 
-  Object *actob = view_layer->basact ? DEG_get_original_object(view_layer->basact->object) :
-                                       nullptr;
+  Object *actob = BKE_view_layer_active_object_get(view_layer);
+  if (actob) {
+    actob = DEG_get_original_object(actob);
+  }
   if (DEG_get_original_object(ob) == actob) {
     bool editing = BKE_paint_select_face_test(actob);
 
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 4f5be581c6d..c9773046364 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -2319,6 +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;
+  // TODO: need to check BKE_view_layer_object_bases_get(view_layer, __func__) and basact
   BLO_read_list(reader, BKE_view_layer_object_bases_get(view_layer, __func__));
   BLO_read_data_address(reader, &view_layer->basact);
 
diff --git a/source/blender/blenkernel/intern/layer_utils.c b/source/blender/blenkernel/intern/layer_utils.c
index cd6287cb781..6b9058bd8d1 100644
--- a/source/blender/blenkernel/intern/layer_utils.c
+++ b/source/blender/blenkernel/intern/layer_utils.c
@@ -214,6 +214,12 @@ struct ListBase *BKE_view_layer_object_bases_get(struct ViewLayer *view_layer,
   // TODO: BLI_assert_msg(view_layer->flags & ..., name);
   return &view_layer->object_bases;
 }
+
+struct Base *BKE_view_layer_active_base_get(struct ViewLayer *view_layer, const char *name)
+{
+  // TODO: BLI_assert_msg(view_layer->flags & ..., name);
+  return view_layer->basact;
+}
 const struct ListBase *BKE_view_layer_object_bases_get_const(const struct ViewLayer *view_layer,
                                                              const char *UNUSED(name))
 {
@@ -285,7 +291,8 @@ Object *BKE_view_layer_non_active_selected_object(struct ViewLayer *view_layer,
 
 Object *BKE_view_layer_active_object_get(const ViewLayer *view_layer)
 {
-  return view_layer->basact ? view_layer->basact->object : NULL;
+  Base *base = BKE_view_layer_active_base_get(view_layer, __func__);
+  return base ? base->object : NULL;
 }
 
 Object *BKE_view_layer_edit_object_get(const ViewLayer *view_layer)
diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc
index 933ccf293e5..0d36f3412c0 100644
--- a/source/blender/blenkernel/intern/object.cc
+++ b/source/blender/blenkernel/intern/object.cc
@@ -2585,7 +2585,7 @@ Base **BKE_object_pose_base_array_get_ex(ViewLayer *view_layer,
                                          uint *r_bases_len,
                                          bool unique)
 {
-  Base *base_active = view_layer->basact;
+  Base *base_active = BKE_view_layer_active_base_get(view_layer, __func__);
   Object *ob_pose = base_active ? BKE_object_pose_armature_get(base_active->object) : nullptr;
   Base *base_pose = nullptr;
   Base **bases = nullptr;
@@ -5184,7 +5184,8 @@ LinkNode *BKE_object_relational_superset(struct ViewLayer *view_layer,
 
         /* child relationship */
         if (includeFilter & (OB_REL_CHILDREN | OB_REL_CHILDREN_RECURSIVE)) {
-          LISTBASE_FOREACH (Base *, local_base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
+          LISTBASE_FOREACH (
+              Base *, local_base, BKE_view_layer_object_bases_get(view_layer, __func__)) {
             if (BASE_EDITABLE(((View3D *)nullptr), local_base)) {
 
               Object *child = local_base->object;
diff --git a/source/blender/blenkernel/intern/paint.cc b/source/blender/blenkernel/intern/paint.cc
index 10dfa3f59e7..14f25401c3e 100644
--- a/source/blender/blenkernel/intern/paint.cc
+++ b/source/blender/blenkernel/intern/paint.cc
@@ -41,6 +41,7 @@
 #include "BKE_idtype.h"
 #include "BKE_image.h"
 #include "BKE_key.h"
+#include "BKE_layer.h"
 #include "BKE_lib_id.h"
 #include "BKE_main.h"
 #include "BKE_material.h"
@@ -447,9 +448,10 @@ Paint *BKE_paint_get_active(Scene *sce, ViewLayer *view_layer)
 {
   if (sce && view_layer) {
     ToolSettings *ts = sce->toolsettings;
+    Object *actob = BKE_view_layer_active_object_get(view_layer);
 
-    if (view_layer->basact && view_layer->basact->object) {
-      switch (view_layer->basact->object->mode) {
+    if (actob) {
+      switch (actob->mode) {
         case OB_MODE_SCULPT:
           return &ts->sculpt->paint;
         case OB_MODE_VERTEX_PAINT:
@@ -490,11 +492,7 @@ Paint *BKE_paint_get_active_from_context(const bContext *C)
 
   if (sce && view_layer) {
     ToolSettings *ts = sce->toolsettings;
-    Object *obact = nullptr;
-
-    if (view_layer->basact && view_layer->basact->object) {
-      obact = view_layer->basact->object;
-    }
+    Object *obact = BKE_view_layer_active_object_get(view_layer);
 
     if ((sima = CTX_wm_space_image(C)) != nullptr) {
       if (obact && obact->mode == OB_MODE_EDIT) {
@@ -524,11 +522,7 @@ ePaintMode BKE_paintmode_get_active_from_context(const bContext *C)
   SpaceImage *sima;
 
   if (sce && view_layer) {
-    Object *obact = nullptr;
-
-    if (view_layer->basact && view_layer->basact->object) {
-      obact = view_layer->basact->object;
-    }
+    Object *obact = BKE_view_layer_active_object_get(view_layer);
 
     if ((sima = CTX_wm_space_image(C)) != nullptr) {
       if (obact && obact->mode == OB_MODE_EDIT) {
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 8db83031e17..54c869c484c 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -53,6 +53,7 @@
 #include "BKE_idtype.h"
 #include "BKE_key.h"
 #include "BKE_lattice.h"
+#include "BKE_layer.h"
 #include "BKE_lib_id.h"
 #include "BKE_lib_query.h"
 #include "BKE_main.h"
@@ -762,12 +763,12 @@ static PTCacheEdit *psys_orig_edit_get(ParticleSystem *psys)
 bool psys_in_edit_mode(Depsgraph *depsgraph, const ParticleSystem *psys)
 {
   const ViewLayer *view_layer = DEG_get_input_view_layer(depsgraph);
-  if (view_layer->basact == NULL) {
+  const Object *object = BKE_view_layer_active_object_get(view_layer);
+  if (object == NULL) {
     /* TODO(sergey): Needs double-check with multi-object edit. */
     return false;
   }
   const bool use_render_params = (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
-  const Object *object = view_layer->basact->object;
   if (object->mode != OB_MODE_PARTICLE_EDIT) {
     return false;
   }
diff --git a/source/blender/draw/intern/draw_common.c b/source/blender/draw/intern/draw_common.c
index de56b34df78..866961066ef 100644
--- a/source/blender/draw/intern/draw_common.c
+++ b/source/blender/draw/intern/draw_common.c
@@ -280,10 +280,10 @@ int DRW_object_wire_theme_get(Object *ob, ViewLayer *view_layer, float **r_color
 {
   const DRWContextState *draw_ctx = DRW_context_state_get();
   const bool is_edit = (draw_ctx->object_mode & OB_MODE_EDIT) && (ob->mode & OB_MODE_EDIT);
-  const bool active = view_layer->basact &&
-                      ((ob->base_flag & BASE_FROM_DUPLI) ?
-                           (DRW_object_get_dupli_parent(ob) == view_layer->basact->object) :
-                           (view_layer->basact->object == ob));
+  const Base *base = BKE_view_layer_active_base_get(view_layer, __func__);
+  const bool active = base && ((ob->base_flag & BASE_FROM_DUPLI) ?
+                                   (DRW_object_get_dupli_parent(ob) == base->object) :
+                                   (base->object == ob));
 
   /* confusing logic here, there are 2 methods of setting the color
    * 'colortab[colindex]' and 'theme_id', colindex overrides theme_id.
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index 8664db026cb..d449aeb99f5 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -398,7 +398,7 @@ bool ANIM_animdata_get_context(const bContext *C, bAnimContext *ac)
   }
   ac->view_layer = CTX_data_view_layer(C);
   ac->depsgraph = CTX_data_depsgraph_pointer(C);
-  ac->obact = (ac->view_layer->basact) ? ac->view_layer->basact->object : NULL;
+  ac->obact = BKE_view_layer_active_object_get(ac->view_layer);
   ac->area = area;
   ac->region = region;
   ac->sl = sl;
diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c
index 479a2245b30..85e5c1a856c 100644
--- a/source/blender/editors/armature/arm

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list