[Bf-blender-cvs] [f94b3c886c5] temp-derived-node-tree-refactor: remove remaining derived tree references from MOD_nodes.cc

Jacques Lucke noreply at git.blender.org
Thu Mar 4 11:08:00 CET 2021


Commit: f94b3c886c53f3f689f574d7a05b66e05f7ad623
Author: Jacques Lucke
Date:   Wed Mar 3 17:56:25 2021 +0100
Branches: temp-derived-node-tree-refactor
https://developer.blender.org/rBf94b3c886c53f3f689f574d7a05b66e05f7ad623

remove remaining derived tree references from MOD_nodes.cc

===================================================================

M	source/blender/modifiers/intern/MOD_nodes.cc
M	source/blender/nodes/NOD_XXX_node_tree.hh
M	source/blender/nodes/intern/xxx_node_tree.cc

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc
index c4afa8cfc64..cc66ea1c122 100644
--- a/source/blender/modifiers/intern/MOD_nodes.cc
+++ b/source/blender/modifiers/intern/MOD_nodes.cc
@@ -72,7 +72,6 @@
 #include "MOD_ui_common.h"
 
 #include "NOD_XXX_node_tree.hh"
-#include "NOD_derived_node_tree.hh"
 #include "NOD_geometry.h"
 #include "NOD_geometry_exec.hh"
 #include "NOD_node_tree_multi_function.hh"
@@ -93,7 +92,6 @@ using blender::bke::PersistentObjectHandle;
 using blender::fn::GMutablePointer;
 using blender::fn::GValueMap;
 using blender::nodes::GeoNodeExecParams;
-using namespace blender::nodes::derived_node_tree_types;
 using namespace blender::fn::multi_function_types;
 using namespace blender::nodes::xxx_node_tree_types;
 
@@ -465,11 +463,11 @@ class GeometryNodesEvaluator {
 
   void store_ui_hints(const XXXNode node, GeoNodeExecParams params) const
   {
-    for (const InputSocketRef *dsocket : node->inputs()) {
-      if (!dsocket->is_available()) {
+    for (const InputSocketRef *socket_ref : node->inputs()) {
+      if (!socket_ref->is_available()) {
         continue;
       }
-      if (dsocket->bsocket()->type != SOCK_GEOMETRY) {
+      if (socket_ref->bsocket()->type != SOCK_GEOMETRY) {
         continue;
       }
 
@@ -477,7 +475,7 @@ class GeometryNodesEvaluator {
       bNodeTree *btree_original = (bNodeTree *)DEG_get_original_id((ID *)btree_cow);
       const NodeTreeEvaluationContext context(*self_object_, *modifier_);
 
-      const GeometrySet &geometry_set = params.get_input<GeometrySet>(dsocket->identifier());
+      const GeometrySet &geometry_set = params.get_input<GeometrySet>(socket_ref->identifier());
       const Vector<const GeometryComponent *> components = geometry_set.get_components_for_read();
 
       for (const GeometryComponent *component : components) {
@@ -498,17 +496,17 @@ class GeometryNodesEvaluator {
     MFContextBuilder fn_context;
     MFParamsBuilder fn_params{fn, 1};
     Vector<GMutablePointer> input_data;
-    for (const InputSocketRef *dsocket : node->inputs()) {
-      if (dsocket->is_available()) {
-        GMutablePointer data = params.extract_input(dsocket->identifier());
+    for (const InputSocketRef *socket_ref : node->inputs()) {
+      if (socket_ref->is_available()) {
+        GMutablePointer data = params.extract_input(socket_ref->identifier());
         fn_params.add_readonly_single_input(GSpan(*data.type(), data.get(), 1));
         input_data.append(data);
       }
     }
     Vector<GMutablePointer> output_data;
-    for (const OutputSocketRef *dsocket : node->outputs()) {
-      if (dsocket->is_available()) {
-        const CPPType &type = *blender::nodes::socket_cpp_type_get(*dsocket->typeinfo());
+    for (const OutputSocketRef *socket_ref : node->outputs()) {
+      if (socket_ref->is_available()) {
+        const CPPType &type = *blender::nodes::socket_cpp_type_get(*socket_ref->typeinfo());
         void *buffer = allocator_.allocate(type.size(), type.alignment());
         fn_params.add_uninitialized_single_output(GMutableSpan(type, buffer, 1));
         output_data.append(GMutablePointer(type, buffer));
@@ -1201,15 +1199,14 @@ static void modifyGeometry(ModifierData *md,
   check_property_socket_sync(ctx->object, md);
 
   NodeTreeRefMap tree_refs;
-  DerivedNodeTree tree{nmd->node_group, tree_refs};
-  XXXNodeTree xxx_tree{*nmd->node_group, tree_refs};
+  XXXNodeTree tree{*nmd->node_group, tree_refs};
 
   if (tree.has_link_cycles()) {
     BKE_modifier_set_error(ctx->object, md, "Node group has cycles");
     return;
   }
 
-  const NodeTreeRef &root_tree_ref = xxx_tree.root_context().tree();
+  const NodeTreeRef &root_tree_ref = tree.root_context().tree();
   Span<const NodeRef *> input_nodes = root_tree_ref.nodes_by_type("NodeGroupInput");
   Span<const NodeRef *> output_nodes = root_tree_ref.nodes_by_type("NodeGroupOutput");
 
@@ -1239,7 +1236,7 @@ static void modifyGeometry(ModifierData *md,
   reset_tree_ui_storage(tree.used_node_tree_refs(), *ctx->object, *md);
 
   geometry_set = compute_geometry(
-      xxx_tree, group_inputs, *group_outputs[0], std::move(geometry_set), nmd, ctx);
+      tree, group_inputs, *group_outputs[0], std::move(geometry_set), nmd, ctx);
 }
 
 static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
diff --git a/source/blender/nodes/NOD_XXX_node_tree.hh b/source/blender/nodes/NOD_XXX_node_tree.hh
index d1446857442..aecc968aae8 100644
--- a/source/blender/nodes/NOD_XXX_node_tree.hh
+++ b/source/blender/nodes/NOD_XXX_node_tree.hh
@@ -17,6 +17,7 @@
 #pragma once
 
 #include "BLI_function_ref.hh"
+#include "BLI_vector_set.hh"
 
 #include "NOD_node_tree_ref.hh"
 
@@ -125,12 +126,16 @@ class XXXNodeTree {
  private:
   LinearAllocator<> allocator_;
   XXXNodeTreeContext *root_context_;
+  VectorSet<const NodeTreeRef *> used_node_tree_refs_;
 
  public:
   XXXNodeTree(bNodeTree &btree, NodeTreeRefMap &node_tree_refs);
   ~XXXNodeTree();
 
   const XXXNodeTreeContext &root_context() const;
+  Span<const NodeTreeRef *> used_node_tree_refs() const;
+
+  bool has_link_cycles() const;
 
  private:
   XXXNodeTreeContext &construct_context_recursively(XXXNodeTreeContext *parent_context,
@@ -354,4 +359,9 @@ inline const XXXNodeTreeContext &XXXNodeTree::root_context() const
   return *root_context_;
 }
 
+inline Span<const NodeTreeRef *> XXXNodeTree::used_node_tree_refs() const
+{
+  return used_node_tree_refs_;
+}
+
 }  // namespace blender::nodes
diff --git a/source/blender/nodes/intern/xxx_node_tree.cc b/source/blender/nodes/intern/xxx_node_tree.cc
index 8c26c521019..4214459bf12 100644
--- a/source/blender/nodes/intern/xxx_node_tree.cc
+++ b/source/blender/nodes/intern/xxx_node_tree.cc
@@ -32,6 +32,7 @@ XXXNodeTreeContext &XXXNodeTree::construct_context_recursively(XXXNodeTreeContex
   context.parent_context_ = parent_context;
   context.parent_node_ = parent_node;
   context.tree_ = &get_tree_ref_from_map(node_tree_refs, btree);
+  used_node_tree_refs_.add(context.tree_);
 
   for (const NodeRef *node : context.tree_->nodes()) {
     if (node->is_group_node()) {
@@ -62,6 +63,16 @@ void XXXNodeTree::destruct_context_recursively(XXXNodeTreeContext *context)
   context->~XXXNodeTreeContext();
 }
 
+bool XXXNodeTree::has_link_cycles() const
+{
+  for (const NodeTreeRef *tree_ref : used_node_tree_refs_) {
+    if (tree_ref->has_link_cycles()) {
+      return true;
+    }
+  }
+  return false;
+}
+
 XXXOutputSocket XXXInputSocket::get_corresponding_group_node_output() const
 {
   BLI_assert(*this);



More information about the Bf-blender-cvs mailing list