diff options
Diffstat (limited to 'source/blender/modifiers/intern/MOD_nodes.cc')
-rw-r--r-- | source/blender/modifiers/intern/MOD_nodes.cc | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index ea95a5f5af4..79838f61dfe 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -268,6 +268,38 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte } } +static bool checkForTimeNode(bNodeTree *tree, Set<bNodeTree *> &r_checked_trees) +{ + if (!r_checked_trees.add(tree)) { + return false; + } + LISTBASE_FOREACH (bNode *, node, &tree->nodes) { + if (node->type == GEO_NODE_INPUT_SCENE_TIME) { + return true; + } + if (node->type == NODE_GROUP) { + bNodeTree *subtree = (bNodeTree *)node->id; + if (checkForTimeNode(subtree, r_checked_trees)) { + return true; + } + } + } + return false; +} + +static bool dependsOnTime(struct Scene *UNUSED(scene), + ModifierData *md, + const int UNUSED(dag_eval_mode)) +{ + NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md); + bNodeTree *tree = nmd->node_group; + if (tree == nullptr) { + return false; + } + Set<bNodeTree *> checked_trees; + return checkForTimeNode(tree, checked_trees); +} + static void foreachIDLink(ModifierData *md, Object *ob, IDWalkFunc walk, void *userData) { NodesModifierData *nmd = reinterpret_cast<NodesModifierData *>(md); @@ -1590,7 +1622,7 @@ ModifierTypeInfo modifierType_Nodes = { /* freeData */ freeData, /* isDisabled */ isDisabled, /* updateDepsgraph */ updateDepsgraph, - /* dependsOnTime */ nullptr, + /* dependsOnTime */ dependsOnTime, /* dependsOnNormals */ nullptr, /* foreachIDLink */ foreachIDLink, /* foreachTexLink */ foreachTexLink, |