[Bf-blender-cvs] [c771dd5e9c8] master: Depsgraph: Make animated properties API receive const ID

Sergey Sharybin noreply at git.blender.org
Tue Jul 19 17:22:06 CEST 2022


Commit: c771dd5e9c85335aa5e4cf60cfa61bc286c26229
Author: Sergey Sharybin
Date:   Tue Jul 19 17:21:11 2022 +0200
Branches: master
https://developer.blender.org/rBc771dd5e9c85335aa5e4cf60cfa61bc286c26229

Depsgraph: Make animated properties API receive const ID

Semantically it is more correct as the cache does not modify the ID.

There is need to do couple of const casts since the BKE (which is in C)
does not easily allow to iterate into f-curves of const ID.

Should be no functional changes.

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

M	source/blender/depsgraph/intern/builder/deg_builder.cc
M	source/blender/depsgraph/intern/builder/deg_builder.h
M	source/blender/depsgraph/intern/builder/deg_builder_cache.cc
M	source/blender/depsgraph/intern/builder/deg_builder_cache.h
M	source/blender/depsgraph/intern/builder/pipeline_all_objects.cc
M	source/blender/depsgraph/intern/builder/pipeline_from_ids.cc

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder.cc b/source/blender/depsgraph/intern/builder/deg_builder.cc
index 888e0649065..1fec1fb3219 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder.cc
@@ -63,7 +63,7 @@ DepsgraphBuilder::DepsgraphBuilder(Main *bmain, Depsgraph *graph, DepsgraphBuild
 {
 }
 
-bool DepsgraphBuilder::need_pull_base_into_graph(Base *base)
+bool DepsgraphBuilder::need_pull_base_into_graph(const Base *base)
 {
   /* Simple check: enabled bases are always part of dependency graph. */
   const int base_flag = (graph_->mode == DAG_EVAL_VIEWPORT) ? BASE_ENABLED_VIEWPORT :
@@ -74,7 +74,7 @@ bool DepsgraphBuilder::need_pull_base_into_graph(Base *base)
   /* More involved check: since we don't support dynamic changes in dependency graph topology and
    * all visible objects are to be part of dependency graph, we pull all objects which has animated
    * visibility. */
-  Object *object = base->object;
+  const Object *object = base->object;
   AnimatedPropertyID property_id;
   if (graph_->mode == DAG_EVAL_VIEWPORT) {
     property_id = AnimatedPropertyID(&object->id, &RNA_Object, "hide_viewport");
@@ -89,7 +89,7 @@ bool DepsgraphBuilder::need_pull_base_into_graph(Base *base)
   return cache_->isPropertyAnimated(&object->id, property_id);
 }
 
-bool DepsgraphBuilder::check_pchan_has_bbone(Object *object, const bPoseChannel *pchan)
+bool DepsgraphBuilder::check_pchan_has_bbone(const Object *object, const bPoseChannel *pchan)
 {
   BLI_assert(object->type == OB_ARMATURE);
   if (pchan == nullptr || pchan->bone == nullptr) {
@@ -109,12 +109,13 @@ bool DepsgraphBuilder::check_pchan_has_bbone(Object *object, const bPoseChannel
          cache_->isPropertyAnimated(&armature->id, property_id);
 }
 
-bool DepsgraphBuilder::check_pchan_has_bbone_segments(Object *object, const bPoseChannel *pchan)
+bool DepsgraphBuilder::check_pchan_has_bbone_segments(const Object *object,
+                                                      const bPoseChannel *pchan)
 {
   return check_pchan_has_bbone(object, pchan);
 }
 
-bool DepsgraphBuilder::check_pchan_has_bbone_segments(Object *object, const char *bone_name)
+bool DepsgraphBuilder::check_pchan_has_bbone_segments(const Object *object, const char *bone_name)
 {
   const bPoseChannel *pchan = BKE_pose_channel_find_name(object->pose, bone_name);
   return check_pchan_has_bbone_segments(object, pchan);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder.h b/source/blender/depsgraph/intern/builder/deg_builder.h
index 6f2bde3a2ff..950ebfb35ba 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder.h
@@ -22,11 +22,11 @@ class DepsgraphBuilder {
  public:
   virtual ~DepsgraphBuilder() = default;
 
-  virtual bool need_pull_base_into_graph(Base *base);
+  virtual bool need_pull_base_into_graph(const Base *base);
 
-  virtual bool check_pchan_has_bbone(Object *object, const bPoseChannel *pchan);
-  virtual bool check_pchan_has_bbone_segments(Object *object, const bPoseChannel *pchan);
-  virtual bool check_pchan_has_bbone_segments(Object *object, const char *bone_name);
+  virtual bool check_pchan_has_bbone(const Object *object, const bPoseChannel *pchan);
+  virtual bool check_pchan_has_bbone_segments(const Object *object, const bPoseChannel *pchan);
+  virtual bool check_pchan_has_bbone_segments(const Object *object, const char *bone_name);
 
  protected:
   /* NOTE: The builder does NOT take ownership over any of those resources. */
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_cache.cc b/source/blender/depsgraph/intern/builder/deg_builder_cache.cc
index 7f88f54fdca..6474f853390 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_cache.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_cache.cc
@@ -35,13 +35,13 @@ AnimatedPropertyID::AnimatedPropertyID(const PointerRNA &pointer_rna,
 {
 }
 
-AnimatedPropertyID::AnimatedPropertyID(ID *id, StructRNA *type, const char *property_name)
+AnimatedPropertyID::AnimatedPropertyID(const ID *id, StructRNA *type, const char *property_name)
     : data(id)
 {
   property_rna = RNA_struct_type_find_property(type, property_name);
 }
 
-AnimatedPropertyID::AnimatedPropertyID(ID * /*id*/,
+AnimatedPropertyID::AnimatedPropertyID(const ID * /*id*/,
                                        StructRNA *type,
                                        void *data,
                                        const char *property_name)
@@ -100,13 +100,13 @@ AnimatedPropertyStorage::AnimatedPropertyStorage() : is_fully_initialized(false)
 {
 }
 
-void AnimatedPropertyStorage::initializeFromID(DepsgraphBuilderCache *builder_cache, ID *id)
+void AnimatedPropertyStorage::initializeFromID(DepsgraphBuilderCache *builder_cache, const ID *id)
 {
   AnimatedPropertyCallbackData data;
-  RNA_id_pointer_create(id, &data.pointer_rna);
+  RNA_id_pointer_create(const_cast<ID *>(id), &data.pointer_rna);
   data.animated_property_storage = this;
   data.builder_cache = builder_cache;
-  BKE_fcurves_id_cb(id, animated_property_cb, &data);
+  BKE_fcurves_id_cb(const_cast<ID *>(id), animated_property_cb, &data);
 }
 
 void AnimatedPropertyStorage::tagPropertyAsAnimated(const AnimatedPropertyID &property_id)
@@ -147,13 +147,14 @@ DepsgraphBuilderCache::~DepsgraphBuilderCache()
   }
 }
 
-AnimatedPropertyStorage *DepsgraphBuilderCache::ensureAnimatedPropertyStorage(ID *id)
+AnimatedPropertyStorage *DepsgraphBuilderCache::ensureAnimatedPropertyStorage(const ID *id)
 {
   return animated_property_storage_map_.lookup_or_add_cb(
       id, []() { return new AnimatedPropertyStorage(); });
 }
 
-AnimatedPropertyStorage *DepsgraphBuilderCache::ensureInitializedAnimatedPropertyStorage(ID *id)
+AnimatedPropertyStorage *DepsgraphBuilderCache::ensureInitializedAnimatedPropertyStorage(
+    const ID *id)
 {
   AnimatedPropertyStorage *animated_property_storage = ensureAnimatedPropertyStorage(id);
   if (!animated_property_storage->is_fully_initialized) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_cache.h b/source/blender/depsgraph/intern/builder/deg_builder_cache.h
index 5568967f163..d85269c0f8b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_cache.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_cache.h
@@ -27,14 +27,14 @@ class AnimatedPropertyID {
   AnimatedPropertyID();
   AnimatedPropertyID(const PointerRNA *pointer_rna, const PropertyRNA *property_rna);
   AnimatedPropertyID(const PointerRNA &pointer_rna, const PropertyRNA *property_rna);
-  AnimatedPropertyID(ID *id, StructRNA *type, const char *property_name);
-  AnimatedPropertyID(ID *id, StructRNA *type, void *data, const char *property_name);
+  AnimatedPropertyID(const ID *id, StructRNA *type, const char *property_name);
+  AnimatedPropertyID(const ID *id, StructRNA *type, void *data, const char *property_name);
 
   uint64_t hash() const;
   friend bool operator==(const AnimatedPropertyID &a, const AnimatedPropertyID &b);
 
   /* Corresponds to PointerRNA.data. */
-  void *data;
+  const void *data;
   const PropertyRNA *property_rna;
 
   MEM_CXX_CLASS_ALLOC_FUNCS("AnimatedPropertyID");
@@ -44,7 +44,7 @@ class AnimatedPropertyStorage {
  public:
   AnimatedPropertyStorage();
 
-  void initializeFromID(DepsgraphBuilderCache *builder_cache, ID *id);
+  void initializeFromID(DepsgraphBuilderCache *builder_cache, const ID *id);
 
   void tagPropertyAsAnimated(const AnimatedPropertyID &property_id);
   void tagPropertyAsAnimated(const PointerRNA *pointer_rna, const PropertyRNA *property_rna);
@@ -58,7 +58,7 @@ class AnimatedPropertyStorage {
   bool is_fully_initialized;
 
   /* indexed by PointerRNA.data. */
-  Set<void *> animated_objects_set;
+  Set<const void *> animated_objects_set;
   Set<AnimatedPropertyID> animated_properties_set;
 
   MEM_CXX_CLASS_ALLOC_FUNCS("AnimatedPropertyStorage");
@@ -70,8 +70,8 @@ class DepsgraphBuilderCache {
   ~DepsgraphBuilderCache();
 
   /* Makes sure storage for animated properties exists and initialized for the given ID. */
-  AnimatedPropertyStorage *ensureAnimatedPropertyStorage(ID *id);
-  AnimatedPropertyStorage *ensureInitializedAnimatedPropertyStorage(ID *id);
+  AnimatedPropertyStorage *ensureAnimatedPropertyStorage(const ID *id);
+  AnimatedPropertyStorage *ensureInitializedAnimatedPropertyStorage(const ID *id);
 
   /* Shortcuts to go through ensureInitializedAnimatedPropertyStorage and its
    * isPropertyAnimated.
@@ -81,7 +81,7 @@ class DepsgraphBuilderCache {
    *
    * TODO(sergey): Technically, this makes this class something else than just a cache, but what is
    * the better name? */
-  template<typename... Args> bool isPropertyAnimated(ID *id, Args... args)
+  template<typename... Args> bool isPropertyAnimated(const ID *id, Args... args)
   {
     AnimatedPropertyStorage *animated_property_storage = ensureInitializedAnimatedPropertyStorage(
         id);
@@ -95,7 +95,7 @@ class DepsgraphBuilderCache {
     return animated_property_storage->isAnyPropertyAnimated(ptr);
   }
 
-  Map<ID *, AnimatedPropertyStorage *> animated_property_storage_map_;
+  Map<const ID *, AnimatedPropertyStorage *> animated_property_storage_map_;
 
   MEM_CXX_CLASS_ALLOC_FUNCS("DepsgraphBuilderCache");
 };
diff --git a/source/blender/depsgraph/intern/builder/pipeline_all_objects.cc b/source/blender/depsgraph/intern/builder/pipeline_all_objects.cc
index 74d151c65d7..6bc3b59a9d6 100644
--- a/source/blender/depsgraph/intern/builder/pipeline_all_objects.cc
+++ b/source/blender/depsgraph/intern/builder/pipeline_all_objects.cc
@@ -20,7 +20,7 @@ class AllObjectsNodeBuilder : public DepsgraphNodeBuilder {
   {
   }
 
-  bool need_pull_base_into_graph(Base * /*base*/) override
+  bool need_pull_base_into_graph(const Base * /*base*/) override
   {
     return true;
   }
@@ -33,7 +33,7 @@ class AllObjectsRelationBuilder : public DepsgraphRelationBuilder {
   {
   }
 
-  bool need_pull_base_into_graph(Base * /*base*/) override
+  bool need_pull_base_into_graph(const Base * /*base*/) override
   {
     return true;
   }
diff --git a/source/blender/depsgraph/intern/builder/pipelin

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list