[Bf-blender-cvs] [7810c60fe37] blender2.8: Depsgraph: Handle key->object relations from object builder

Sergey Sharybin noreply at git.blender.org
Wed Jun 6 12:39:21 CEST 2018


Commit: 7810c60fe37b017c715b8214d497e3b5ca200038
Author: Sergey Sharybin
Date:   Wed Jun 6 11:53:04 2018 +0200
Branches: blender2.8
https://developer.blender.org/rB7810c60fe37b017c715b8214d497e3b5ca200038

Depsgraph: Handle key->object relations from object builder

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

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

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 037d441269f..607e1389c5f 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -990,6 +990,9 @@ void DepsgraphNodeBuilder::build_cloth(Object *object)
 /* Shapekeys */
 void DepsgraphNodeBuilder::build_shapekeys(Key *key)
 {
+	if (built_map_.checkIsBuiltAndTag(key)) {
+		return;
+	}
 	build_animdata(&key->id);
 	add_operation_node(&key->id,
 	                   DEG_NODE_TYPE_GEOMETRY,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 9afde9945ac..d91d80cead6 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1646,27 +1646,13 @@ void DepsgraphRelationBuilder::build_cloth(Object *object,
 }
 
 /* Shapekeys */
-void DepsgraphRelationBuilder::build_shapekeys(ID *obdata, Key *key)
+void DepsgraphRelationBuilder::build_shapekeys(Key *key)
 {
-	ComponentKey obdata_key(obdata, DEG_NODE_TYPE_GEOMETRY);
-
+	if (built_map_.checkIsBuiltAndTag(key)) {
+		return;
+	}
 	/* attach animdata to geometry */
 	build_animdata(&key->id);
-
-	if (key->adt) {
-		// TODO: this should really be handled in build_animdata, since many of these cases will need it
-		if (key->adt->action || key->adt->nla_tracks.first) {
-			ComponentKey adt_key(&key->id, DEG_NODE_TYPE_ANIMATION);
-			add_relation(adt_key, obdata_key, "Animation");
-		}
-
-		/* NOTE: individual shapekey drivers are handled above already */
-	}
-
-	/* attach to geometry */
-	// XXX: aren't shapekeys now done as a pseudo-modifier on object?
-	//ComponentKey key_key(&key->id, DEG_NODE_TYPE_GEOMETRY); // FIXME: this doesn't exist
-	//add_relation(key_key, obdata_key, "Shapekeys");
 }
 
 /**
@@ -1808,6 +1794,17 @@ void DepsgraphRelationBuilder::build_object_data_geometry(Object *object)
 	}
 	/* Object data datablock. */
 	build_object_data_geometry_datablock((ID *)object->data);
+	Key *key = BKE_key_from_object(object);
+	if (key != NULL) {
+		if (key->adt != NULL) {
+			if (key->adt->action || key->adt->nla_tracks.first) {
+				ComponentKey obdata_key((ID *)object->data,
+				                        DEG_NODE_TYPE_GEOMETRY);
+				ComponentKey adt_key(&key->id, DEG_NODE_TYPE_ANIMATION);
+				add_relation(adt_key, obdata_key, "Animation");
+			}
+		}
+	}
 }
 
 void DepsgraphRelationBuilder::build_object_data_geometry_datablock(ID *obdata)
@@ -1820,7 +1817,7 @@ void DepsgraphRelationBuilder::build_object_data_geometry_datablock(ID *obdata)
 	/* ShapeKeys. */
 	Key *key = BKE_key_from_id(obdata);
 	if (key != NULL) {
-		build_shapekeys(obdata, key);
+		build_shapekeys(key);
 	}
 	/* Link object data evaluation node to exit operation. */
 	OperationKey obdata_geom_eval_key(obdata,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index e61fe40d93e..ec932eccc9f 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -248,7 +248,7 @@ struct DepsgraphRelationBuilder
 	                         RootPChanMap *root_map);
 	void build_rig(Object *object);
 	void build_proxy_rig(Object *object);
-	void build_shapekeys(ID *obdata, Key *key);
+	void build_shapekeys(Key *key);
 	void build_armature(bArmature *armature);
 	void build_camera(Camera *camera);
 	void build_lamp(Lamp *lamp);



More information about the Bf-blender-cvs mailing list