forked from bartvdbraak/blender
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:
parent
1ffdb1b472
commit
97c8619b42
@ -1101,7 +1101,7 @@ void DepsgraphNodeBuilder::build_nodetree(DepsNode *owner_node, bNodeTree *ntree
|
|||||||
build_animdata(ntree_id);
|
build_animdata(ntree_id);
|
||||||
|
|
||||||
/* Parameters for drivers. */
|
/* 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");
|
DEG_OPCODE_PLACEHOLDER, "Parameters Eval");
|
||||||
|
|
||||||
/* nodetree's nodes... */
|
/* nodetree's nodes... */
|
||||||
@ -1114,9 +1114,9 @@ void DepsgraphNodeBuilder::build_nodetree(DepsNode *owner_node, bNodeTree *ntree
|
|||||||
build_texture(owner_node, (Tex *)bnode->id);
|
build_texture(owner_node, (Tex *)bnode->id);
|
||||||
}
|
}
|
||||||
else if (bnode->type == NODE_GROUP) {
|
else if (bnode->type == NODE_GROUP) {
|
||||||
bNodeTree *ntree = (bNodeTree *)bnode->id;
|
bNodeTree *group_ntree = (bNodeTree *)bnode->id;
|
||||||
if ((ntree_id->flag & LIB_DOIT) == 0) {
|
if ((group_ntree->id.flag & LIB_DOIT) == 0) {
|
||||||
build_nodetree(owner_node, ntree);
|
build_nodetree(owner_node, group_ntree);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1778,6 +1778,11 @@ void DepsgraphRelationBuilder::build_nodetree(ID *owner, bNodeTree *ntree)
|
|||||||
|
|
||||||
build_animdata(ntree_id);
|
build_animdata(ntree_id);
|
||||||
|
|
||||||
|
OperationKey parameters_key(ntree_id,
|
||||||
|
DEPSNODE_TYPE_PARAMETERS,
|
||||||
|
DEG_OPCODE_PLACEHOLDER,
|
||||||
|
"Parameters Eval");
|
||||||
|
|
||||||
/* nodetree's nodes... */
|
/* nodetree's nodes... */
|
||||||
for (bNode *bnode = (bNode *)ntree->nodes.first; bnode; bnode = bnode->next) {
|
for (bNode *bnode = (bNode *)ntree->nodes.first; bnode; bnode = bnode->next) {
|
||||||
if (bnode->id) {
|
if (bnode->id) {
|
||||||
@ -1788,17 +1793,22 @@ void DepsgraphRelationBuilder::build_nodetree(ID *owner, bNodeTree *ntree)
|
|||||||
build_texture(owner, (Tex *)bnode->id);
|
build_texture(owner, (Tex *)bnode->id);
|
||||||
}
|
}
|
||||||
else if (bnode->type == NODE_GROUP) {
|
else if (bnode->type == NODE_GROUP) {
|
||||||
bNodeTree *ntree = (bNodeTree *)bnode->id;
|
bNodeTree *group_ntree = (bNodeTree *)bnode->id;
|
||||||
if ((ntree_id->flag & LIB_DOIT) == 0) {
|
if ((group_ntree->id.flag & LIB_DOIT) == 0) {
|
||||||
build_nodetree(owner, ntree);
|
build_nodetree(owner, group_ntree);
|
||||||
ntree_id->flag |= LIB_DOIT;
|
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)) {
|
if (needs_animdata_node(ntree_id)) {
|
||||||
ComponentKey parameters_key(ntree_id, DEPSNODE_TYPE_PARAMETERS);
|
|
||||||
ComponentKey animation_key(ntree_id, DEPSNODE_TYPE_ANIMATION);
|
ComponentKey animation_key(ntree_id, DEPSNODE_TYPE_ANIMATION);
|
||||||
add_relation(animation_key, parameters_key,
|
add_relation(animation_key, parameters_key,
|
||||||
DEPSREL_TYPE_COMPONENT_ORDER, "NTree Parameters");
|
DEPSREL_TYPE_COMPONENT_ORDER, "NTree Parameters");
|
||||||
|
Loading…
Reference in New Issue
Block a user