diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2021-08-01 20:36:30 +0300 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2021-08-01 21:21:36 +0300 |
commit | 0895eef4fbe8ad7f50d4d2938210ffb38eeefeef (patch) | |
tree | 9053249e030602bedeea60c0cfd1f6b0e56ad3ab | |
parent | 79277986c299eaa3df9364e6d9f2b88d2b4f2dea (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.
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"); |