Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-12-06 14:13:10 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-12-06 14:13:10 +0300
commit7e344a9531608f18a9ec3a607e3b5e8b37d6864d (patch)
tree3e8d4af4adc5c9cbe991979324fa2d6025567fef /source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
parent8cd4de7c25b02f1f35c39a96e2e4fd62cf47d849 (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/intern/builder/deg_builder_nodes_rig.cc')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc17
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,