[Bf-blender-cvs] [bb4f8b76ec5] blender-v2.83-release: Fix T77712: Crash on proxied rig, custom bone shape, driver targeting rig

Sybren A. Stüvel noreply at git.blender.org
Thu Jul 2 09:33:37 CEST 2020


Commit: bb4f8b76ec5eee803c98098ae04d34dba9f62148
Author: Sybren A. Stüvel
Date:   Tue Jun 23 17:03:18 2020 +0200
Branches: blender-v2.83-release
https://developer.blender.org/rBbb4f8b76ec5eee803c98098ae04d34dba9f62148

Fix T77712: Crash on proxied rig, custom bone shape, driver targeting rig

It turns out that
`DepsgraphNodeBuilder::build_object_data_geometry(Object *object, bool
is_object_visible)` was called for the custom shape with
`is_object_visible=false` when there are drivers, and
`is_object_visible=true` when there aren't any.

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

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 6f4333ee81d..32fddd3164c 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -744,7 +744,7 @@ void DepsgraphNodeBuilder::build_object_data(Object *object, bool is_object_visi
       break;
     case OB_ARMATURE:
       if (ID_IS_LINKED(object) && object->proxy_from != nullptr) {
-        build_proxy_rig(object);
+        build_proxy_rig(object, is_object_visible);
       }
       else {
         build_rig(object, is_object_visible);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 16beedabc2a..bac3751cc31 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -200,7 +200,7 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder {
   virtual void build_ik_pose(Object *object, bPoseChannel *pchan, bConstraint *con);
   virtual void build_splineik_pose(Object *object, bPoseChannel *pchan, bConstraint *con);
   virtual void build_rig(Object *object, bool is_object_visible);
-  virtual void build_proxy_rig(Object *object);
+  virtual void build_proxy_rig(Object *object, bool is_object_visible);
   virtual void build_armature(bArmature *armature);
   virtual void build_armature_bones(ListBase *bones);
   virtual void build_shapekeys(Key *key);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
index 7a05ae36ea4..166b766223b 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
@@ -286,7 +286,7 @@ void DepsgraphNodeBuilder::build_rig(Object *object, bool is_object_visible)
   }
 }
 
-void DepsgraphNodeBuilder::build_proxy_rig(Object *object)
+void DepsgraphNodeBuilder::build_proxy_rig(Object *object, bool is_object_visible)
 {
   bArmature *armature = (bArmature *)object->data;
   OperationNode *op_node;
@@ -329,6 +329,11 @@ void DepsgraphNodeBuilder::build_proxy_rig(Object *object)
           &object->id, NodeType::PARAMETERS, OperationCode::PARAMETERS_EVAL, nullptr, pchan->name);
     }
 
+    /* Custom shape. */
+    if (pchan->custom != nullptr) {
+      build_object(-1, pchan->custom, DEG_ID_LINKED_INDIRECTLY, is_object_visible);
+    }
+
     pchan_index++;
   }
   op_node = add_operation_node(&object->id,



More information about the Bf-blender-cvs mailing list