diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-11-06 16:36:22 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-11-06 16:36:22 +0300 |
commit | 97c8619b421b979dc4b05ed0959e90de532813ba (patch) | |
tree | c5bd70d8a5561456379b876de89ad9f8973809e8 /source/blender/depsgraph | |
parent | 1ffdb1b472f91425db0248170a8f3ba78f37fa09 (diff) |
Fix T46587: Drivers do not work in node groups
This commit makes drivers on node groups to with when using new dependency graph.
Still TODO: Need a relation between drivers and tree evaluation perhaps, so we
guarantee proper order of all operations.
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_build_nodes.cc | 8 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/depsgraph_build_relations.cc | 20 |
2 files changed, 19 insertions, 9 deletions
diff --git a/source/blender/depsgraph/intern/depsgraph_build_nodes.cc b/source/blender/depsgraph/intern/depsgraph_build_nodes.cc index 4463df61f91..47aa14c7637 100644 --- a/source/blender/depsgraph/intern/depsgraph_build_nodes.cc +++ b/source/blender/depsgraph/intern/depsgraph_build_nodes.cc @@ -1101,7 +1101,7 @@ void DepsgraphNodeBuilder::build_nodetree(DepsNode *owner_node, bNodeTree *ntree build_animdata(ntree_id); /* Parameters for drivers. */ - add_operation_node(ntree_id, DEPSNODE_TYPE_PARAMETERS, DEPSOP_TYPE_EXEC, NULL, + add_operation_node(ntree_id, DEPSNODE_TYPE_PARAMETERS, DEPSOP_TYPE_POST, NULL, DEG_OPCODE_PLACEHOLDER, "Parameters Eval"); /* nodetree's nodes... */ @@ -1114,9 +1114,9 @@ void DepsgraphNodeBuilder::build_nodetree(DepsNode *owner_node, bNodeTree *ntree build_texture(owner_node, (Tex *)bnode->id); } else if (bnode->type == NODE_GROUP) { - bNodeTree *ntree = (bNodeTree *)bnode->id; - if ((ntree_id->flag & LIB_DOIT) == 0) { - build_nodetree(owner_node, ntree); + bNodeTree *group_ntree = (bNodeTree *)bnode->id; + if ((group_ntree->id.flag & LIB_DOIT) == 0) { + build_nodetree(owner_node, group_ntree); } } } diff --git a/source/blender/depsgraph/intern/depsgraph_build_relations.cc b/source/blender/depsgraph/intern/depsgraph_build_relations.cc index c348adaaf53..dfa7413d806 100644 --- a/source/blender/depsgraph/intern/depsgraph_build_relations.cc +++ b/source/blender/depsgraph/intern/depsgraph_build_relations.cc @@ -1778,6 +1778,11 @@ void DepsgraphRelationBuilder::build_nodetree(ID *owner, bNodeTree *ntree) build_animdata(ntree_id); + OperationKey parameters_key(ntree_id, + DEPSNODE_TYPE_PARAMETERS, + DEG_OPCODE_PLACEHOLDER, + "Parameters Eval"); + /* nodetree's nodes... */ for (bNode *bnode = (bNode *)ntree->nodes.first; bnode; bnode = bnode->next) { if (bnode->id) { @@ -1788,17 +1793,22 @@ void DepsgraphRelationBuilder::build_nodetree(ID *owner, bNodeTree *ntree) build_texture(owner, (Tex *)bnode->id); } else if (bnode->type == NODE_GROUP) { - bNodeTree *ntree = (bNodeTree *)bnode->id; - if ((ntree_id->flag & LIB_DOIT) == 0) { - build_nodetree(owner, ntree); - ntree_id->flag |= LIB_DOIT; + bNodeTree *group_ntree = (bNodeTree *)bnode->id; + if ((group_ntree->id.flag & LIB_DOIT) == 0) { + build_nodetree(owner, group_ntree); + group_ntree->flag |= LIB_DOIT; } + OperationKey group_parameters_key(&group_ntree->id, + DEPSNODE_TYPE_PARAMETERS, + DEG_OPCODE_PLACEHOLDER, + "Parameters Eval"); + add_relation(group_parameters_key, parameters_key, + DEPSREL_TYPE_COMPONENT_ORDER, "Group Node"); } } } if (needs_animdata_node(ntree_id)) { - 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, "NTree Parameters"); |