Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/modifiers/intern/MOD_nodes.cc')
-rw-r--r--source/blender/modifiers/intern/MOD_nodes.cc34
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,