[Bf-blender-cvs] [7e344a95316] blender2.8: Depsgraph: Proxy pose bones should be coming from CoW object

Sergey Sharybin noreply at git.blender.org
Wed Dec 6 12:24:43 CET 2017


Commit: 7e344a9531608f18a9ec3a607e3b5e8b37d6864d
Author: Sergey Sharybin
Date:   Wed Dec 6 12:13:10 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB7e344a9531608f18a9ec3a607e3b5e8b37d6864d

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.

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

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

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

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,



More information about the Bf-blender-cvs mailing list