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:
authorJacques Lucke <jacques@blender.org>2021-11-15 15:32:44 +0300
committerJacques Lucke <jacques@blender.org>2021-11-15 15:32:44 +0300
commit5c70f5a7f71337bfc54b3d89c7d81a973d9c3657 (patch)
tree0ee91eacb807b21d7a9eb82812d7031e98d32b5d
parenta9ac8b44d5aea5d56eb132d3ff1ed3934478ea9c (diff)
progress
-rw-r--r--source/blender/blenkernel/intern/node_tree_update.cc62
1 files changed, 45 insertions, 17 deletions
diff --git a/source/blender/blenkernel/intern/node_tree_update.cc b/source/blender/blenkernel/intern/node_tree_update.cc
index 37943647cf3..b1103e3175b 100644
--- a/source/blender/blenkernel/intern/node_tree_update.cc
+++ b/source/blender/blenkernel/intern/node_tree_update.cc
@@ -21,6 +21,46 @@
#include "BKE_node.h"
#include "BKE_node_tree_update.h"
+namespace blender::bke {
+
+class NodeTreeMainUpdater {
+ private:
+ Main *bmain_;
+ NodeTreeUpdateExtraParams *params_;
+
+ public:
+ NodeTreeMainUpdater(Main *bmain, NodeTreeUpdateExtraParams *params)
+ : bmain_(bmain), params_(params)
+ {
+ }
+
+ void update()
+ {
+ FOREACH_NODETREE_BEGIN (bmain_, ntree, id) {
+ ntreeUpdateTree(bmain_, ntree);
+ if (params_) {
+ if (params_->tree_changed_fn) {
+ params_->tree_changed_fn(id, ntree, params_->user_data);
+ }
+ if (params_->tree_interface_changed_fn) {
+ params_->tree_interface_changed_fn(id, ntree, params_->user_data);
+ }
+ if (params_->tree_output_changed_fn) {
+ params_->tree_output_changed_fn(id, ntree, params_->user_data);
+ }
+ }
+ }
+ FOREACH_NODETREE_END;
+ }
+
+ void update_rooted(Span<bNodeTree *> root_trees)
+ {
+ this->update();
+ }
+};
+
+} // namespace blender::bke
+
void BKE_node_tree_update_tag(bNodeTree *ntree)
{
ntree->changed_flag |= NTREE_CHANGED_ANY;
@@ -87,26 +127,14 @@ void BKE_node_tree_update_tag_interface(bNodeTree *ntree)
void BKE_node_tree_update_main(Main *bmain, NodeTreeUpdateExtraParams *params)
{
- FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
- ntreeUpdateTree(bmain, ntree);
- if (params) {
- if (params->tree_changed_fn) {
- params->tree_changed_fn(id, ntree, params->user_data);
- }
- if (params->tree_interface_changed_fn) {
- params->tree_interface_changed_fn(id, ntree, params->user_data);
- }
- if (params->tree_output_changed_fn) {
- params->tree_output_changed_fn(id, ntree, params->user_data);
- }
- }
- }
- FOREACH_NODETREE_END;
+ blender::bke::NodeTreeMainUpdater updater{bmain, params};
+ updater.update();
}
void BKE_node_tree_update_main_rooted(Main *bmain,
- bNodeTree *UNUSED(ntree),
+ bNodeTree *ntree,
NodeTreeUpdateExtraParams *params)
{
- BKE_node_tree_update_main(bmain, params);
+ blender::bke::NodeTreeMainUpdater updater{bmain, params};
+ updater.update_rooted({ntree});
}