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.
This commit is contained in:
Sergey Sharybin 2015-11-06 18:36:22 +05:00
parent 1ffdb1b472
commit 97c8619b42
Notes: blender-bot 2023-04-04 07:45:26 +02:00
Referenced by issue #46587, Drivers do not work in node groups.
2 changed files with 19 additions and 9 deletions

View File

@ -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);
}
}
}

View File

@ -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");