[Bf-blender-cvs] [1905e0b] depsgraph_refactor: Depsgraph: Make driver working when using node trees variables

Sergey Sharybin noreply at git.blender.org
Wed Mar 4 15:59:04 CET 2015


Commit: 1905e0bd789ce04357c3e27ab838348ba16f5b77
Author: Sergey Sharybin
Date:   Wed Mar 4 19:55:55 2015 +0500
Branches: depsgraph_refactor
https://developer.blender.org/rB1905e0bd789ce04357c3e27ab838348ba16f5b77

Depsgraph: Make driver working when using node trees variables

Quite straightforward, pretty much the same as recent change for lamps.

The only thing is that viewport updates are missing, this is because
it's not really clear when and what notifiers to send.

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

M	source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
M	source/blender/depsgraph/intern/depsgraph_build_relations.cpp
M	source/blender/editors/space_node/node_draw.c

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

diff --git a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
index a84c90d..6e7d6f3 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_nodes.cpp
@@ -911,6 +911,10 @@ void DepsgraphNodeBuilder::build_nodetree(DepsNode *owner_node, bNodeTree *ntree
 	ID *ntree_id = &ntree->id;
 	build_animdata(ntree_id);
 
+	/* Parameters for drivers. */
+	add_operation_node(ntree_id, DEPSNODE_TYPE_PARAMETERS, DEPSOP_TYPE_EXEC, NULL,
+	                   DEG_OPCODE_PLACEHOLDER, "Parameters Eval");
+
 	/* nodetree's nodes... */
 	for (bNode *bnode = (bNode *)ntree->nodes.first; bnode; bnode = bnode->next) {
 		if (bnode->id) {
diff --git a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
index 42d4f6e..3c02dfb 100644
--- a/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
+++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cpp
@@ -1576,9 +1576,10 @@ void DepsgraphRelationBuilder::build_lamp(Object *ob)
 	}
 	lamp_id->flag |= LIB_DOIT;
 
+	ComponentKey parameters_key(lamp_id, DEPSNODE_TYPE_PARAMETERS);
+
 	if (BKE_animdata_from_id(lamp_id) != NULL) {
 		ComponentKey animation_key(lamp_id, DEPSNODE_TYPE_ANIMATION);
-		ComponentKey parameters_key(lamp_id, DEPSNODE_TYPE_PARAMETERS);
 		add_relation(animation_key, parameters_key,
 		             DEPSREL_TYPE_COMPONENT_ORDER, "Lamp Parameters");
 	}
@@ -1586,6 +1587,9 @@ void DepsgraphRelationBuilder::build_lamp(Object *ob)
 	/* lamp's nodetree */
 	if (la->nodetree) {
 		build_nodetree(lamp_id, la->nodetree);
+		ComponentKey nodetree_key(&la->nodetree->id, DEPSNODE_TYPE_PARAMETERS);
+		add_relation(nodetree_key, parameters_key,
+		             DEPSREL_TYPE_COMPONENT_ORDER, "Lamp Parameters");
 	}
 
 	/* textures */
@@ -1597,7 +1601,8 @@ void DepsgraphRelationBuilder::build_nodetree(ID *owner, bNodeTree *ntree)
 	if (!ntree)
 		return;
 
-	build_animdata(&ntree->id);
+	ID *ntree_id = &ntree->id;
+	build_animdata(ntree_id);
 
 	/* nodetree's nodes... */
 	for (bNode *bnode = (bNode *)ntree->nodes.first; bnode; bnode = bnode->next) {
@@ -1614,6 +1619,13 @@ void DepsgraphRelationBuilder::build_nodetree(ID *owner, bNodeTree *ntree)
 		}
 	}
 
+	if (BKE_animdata_from_id(ntree_id) != NULL) {
+		ComponentKey parameters_key(ntree_id, DEPSNODE_TYPE_PARAMETERS);
+		ComponentKey animation_key(ntree_id, DEPSNODE_TYPE_ANIMATION);
+		add_relation(animation_key, parameters_key,
+		             DEPSREL_TYPE_COMPONENT_ORDER, "Lamp Parameters");
+	}
+
 	// TODO: link from nodetree to owner_component?
 }
 
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 87a64e9..a7ab79d 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -123,7 +123,14 @@ void ED_node_tag_update_id(ID *id)
 	bNodeTree *ntree = node_tree_from_ID(id);
 	if (id == NULL || ntree == NULL)
 		return;
-	
+
+	/* TODO(sergey): With the new dependency graph it
+	 * should be just enough to ony tag ntree itself,
+	 * all the users of this tree will have update
+	 * flushed from the tree,
+	 */
+	DAG_id_tag_update(&ntree->id, 0);
+
 	if (ntree->type == NTREE_SHADER) {
 		DAG_id_tag_update(id, 0);




More information about the Bf-blender-cvs mailing list