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:
authorLukas Tönne <lukas.toenne@gmail.com>2021-08-01 20:36:30 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2021-08-01 21:21:36 +0300
commit0895eef4fbe8ad7f50d4d2938210ffb38eeefeef (patch)
tree9053249e030602bedeea60c0cfd1f6b0e56ad3ab
parent79277986c299eaa3df9364e6d9f2b88d2b4f2dea (diff)
Add a read-only flag to indicate depsgraph update.
The NODE_DEPSGRAPH_UPDATED flag indicates that a node has triggered a depsgraph update. This can be accessed in a depsgraph "pre" handler to find nodes which have changed through user actions. The depsgraph clears this flag for the next update.
-rw-r--r--source/blender/blenkernel/intern/node.cc1
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc8
-rw-r--r--source/blender/depsgraph/intern/node/deg_node_operation.h3
-rw-r--r--source/blender/editors/space_node/node_draw.cc2
-rw-r--r--source/blender/makesdna/DNA_node_types.h3
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c6
6 files changed, 23 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc
index 9888e23a7bd..cba8ade6bc1 100644
--- a/source/blender/blenkernel/intern/node.cc
+++ b/source/blender/blenkernel/intern/node.cc
@@ -4500,6 +4500,7 @@ void nodeUpdate(bNodeTree *ntree, bNode *node)
}
ntree->is_updating = true;
+ node->flag |= NODE_DEPSGRAPH_UPDATED;
if (node->typeinfo->updatefunc) {
node->typeinfo->updatefunc(ntree, node);
}
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 8d1074d912f..177ef5f3cb7 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -1711,6 +1711,14 @@ void DepsgraphNodeBuilder::build_nodetree(bNodeTree *ntree)
/* General parameters. */
build_parameters(&ntree->id);
build_idproperties(ntree->id.properties);
+ add_operation_node(&ntree->id,
+ NodeType::PARAMETERS,
+ OperationCode::NODETREE_UPDATE,
+ [ntree](::Depsgraph *depsgraph) {
+ LISTBASE_FOREACH (bNode *, node, &ntree->nodes) {
+ node->flag &= ~NODE_DEPSGRAPH_UPDATED;
+ }
+ });
/* Animation, */
build_animdata(&ntree->id);
/* Shading update. */
diff --git a/source/blender/depsgraph/intern/node/deg_node_operation.h b/source/blender/depsgraph/intern/node/deg_node_operation.h
index a17186da941..234d4792068 100644
--- a/source/blender/depsgraph/intern/node/deg_node_operation.h
+++ b/source/blender/depsgraph/intern/node/deg_node_operation.h
@@ -206,6 +206,9 @@ enum class OperationCode {
/* Simulation. ---------------------------------------------------------- */
SIMULATION_EVAL,
+
+ /* Nodes. --------------------------------------------------------------- */
+ NODETREE_UPDATE,
};
const char *operationCodeAsString(OperationCode opcode);
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index 6ec6315a238..df6ff46bc08 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -177,6 +177,8 @@ void ED_node_tag_update_nodetree(Main *bmain, bNodeTree *ntree, bNode *node)
if (!node_connected_to_output(bmain, ntree, node)) {
do_tag_update = false;
}
+
+ node->flag |= NODE_DEPSGRAPH_UPDATED;
}
/* Look through all datablocks to support groups. */
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 5152098f57a..fa91dffb452 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -361,6 +361,9 @@ typedef struct bNode {
/* A preview for the data in this node can be displayed in the spreadsheet editor. */
#define __NODE_ACTIVE_PREVIEW (1 << 18) /* deprecated */
+/* Read-only flag to indicate that changes to the node have triggered a depsgraph update. */
+#define NODE_DEPSGRAPH_UPDATED (1 << 19)
+
/* node->update */
/* XXX NODE_UPDATE is a generic update flag. More fine-grained updates
* might be used in the future, but currently all work the same way.
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 3d4256db335..e0bab647b95 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -11483,6 +11483,12 @@ static void rna_def_node(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Texture", "Display node in viewport textured shading mode");
RNA_def_property_update(prop, 0, "rna_Node_update");
+ prop = RNA_def_property(srna, "depsgraph_updated", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", NODE_DEPSGRAPH_UPDATED);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_ANIMATABLE);
+ RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
+ RNA_def_property_ui_text(prop, "Depsgraph Updated", "Changes to the node have triggered a depsgraph update");
+
/* generic property update function */
func = RNA_def_function(srna, "socket_value_update", "rna_Node_socket_value_update");
RNA_def_function_ui_description(func, "Update after property changes");