diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-12-06 14:13:10 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-12-06 14:13:10 +0300 |
commit | 7e344a9531608f18a9ec3a607e3b5e8b37d6864d (patch) | |
tree | 3e8d4af4adc5c9cbe991979324fa2d6025567fef /source/blender/depsgraph | |
parent | 8cd4de7c25b02f1f35c39a96e2e4fd62cf47d849 (diff) |
Depsgraph: Proxy pose bones should be coming from CoW object
This should solve crash on files having proxies, but there will still be
assert failure because proxy_from is expected to come from library, which
is no longer truth for objects which got copied.
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc | 17 |
1 files changed, 13 insertions, 4 deletions
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 f6f2dcce467..b947e3e01a0 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc @@ -321,15 +321,24 @@ void DepsgraphNodeBuilder::build_proxy_rig(Object *object) { ID *obdata = (ID *)object->data; OperationDepsNode *op_node; - Object *object_cow = get_cow_datablock(object); + Object *object_cow; + if (DEG_depsgraph_use_copy_on_write()) { + /* NOTE: We need to expand both object and armature, so this way we can + * safely create object level pose. + */ + object_cow = expand_cow_datablock(object); + } + else { + object_cow = object; + } /* Sanity check. */ BLI_assert(object->pose != NULL); /* Animation. */ build_animdata(obdata); /* speed optimization for animation lookups */ BKE_pose_channels_hash_make(object->pose); - if (object->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) { - BKE_pose_update_constraint_flags(object->pose); + if (object_cow->pose->flag & POSE_CONSTRAINTS_NEED_UPDATE_FLAGS) { + BKE_pose_update_constraint_flags(object_cow->pose); } op_node = add_operation_node(&object->id, DEG_NODE_TYPE_EVAL_POSE, @@ -338,7 +347,7 @@ void DepsgraphNodeBuilder::build_proxy_rig(Object *object) object_cow), DEG_OPCODE_POSE_INIT); op_node->set_as_entry(); - LINKLIST_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) { + LINKLIST_FOREACH (bPoseChannel *, pchan, &object_cow->pose->chanbase) { /* Local bone transform. */ op_node = add_operation_node(&object->id, DEG_NODE_TYPE_BONE, |