[Bf-blender-cvs] [92d4376c8eb] functions: make VirtualNodeTree specific to one bNodeTree

Jacques Lucke noreply at git.blender.org
Thu Nov 21 15:19:45 CET 2019


Commit: 92d4376c8ebd968c080ebbc82f2c82572527e220
Author: Jacques Lucke
Date:   Wed Nov 20 18:20:16 2019 +0100
Branches: functions
https://developer.blender.org/rB92d4376c8ebd968c080ebbc82f2c82572527e220

make VirtualNodeTree specific to one bNodeTree

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

M	source/blender/blenkernel/BKE_virtual_node_tree.h
M	source/blender/blenkernel/intern/virtual_node_tree.cc
M	source/blender/functions/intern/vtree_multi_function/vnode_multi_function_wrapper_builder.cc
M	source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h
M	source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
M	source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
M	source/blender/modifiers/intern/MOD_functionpoints_cxx.cc
M	source/blender/simulations/bparticles/node_frontend.cpp

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

diff --git a/source/blender/blenkernel/BKE_virtual_node_tree.h b/source/blender/blenkernel/BKE_virtual_node_tree.h
index 51b36011612..fd511ea4aba 100644
--- a/source/blender/blenkernel/BKE_virtual_node_tree.h
+++ b/source/blender/blenkernel/BKE_virtual_node_tree.h
@@ -38,7 +38,6 @@ class VSocket : BLI::NonCopyable, BLI::NonMovable {
   VNode *m_node;
   bool m_is_input;
   bNodeSocket *m_bsocket;
-  bNodeTree *m_btree;
   uint m_id;
   PointerRNA m_rna;
   uint m_index;
@@ -89,7 +88,6 @@ class VNode : BLI::NonCopyable, BLI::NonMovable {
   Vector<VInputSocket *> m_inputs;
   Vector<VOutputSocket *> m_outputs;
   bNode *m_bnode;
-  bNodeTree *m_btree;
   uint m_id;
   PointerRNA m_rna;
 
@@ -118,19 +116,17 @@ class VNode : BLI::NonCopyable, BLI::NonMovable {
 class VirtualNodeTree : BLI::NonCopyable, BLI::NonMovable {
  private:
   BLI::MonotonicAllocator<> m_allocator;
+  bNodeTree *m_btree;
   Vector<VNode *> m_nodes_by_id;
   Vector<VSocket *> m_sockets_by_id;
   Vector<VInputSocket *> m_input_sockets;
   Vector<VOutputSocket *> m_output_sockets;
   StringMap<Vector<VNode *>> m_nodes_by_idname;
 
-  VirtualNodeTree() = default;
-
  public:
+  VirtualNodeTree(bNodeTree *btree);
   ~VirtualNodeTree();
 
-  static std::unique_ptr<VirtualNodeTree> FromBTree(bNodeTree *btree);
-
   ArrayRef<const VNode *> nodes() const;
   ArrayRef<const VNode *> nodes_with_idname(StringRef idname) const;
   uint socket_count() const;
@@ -140,6 +136,8 @@ class VirtualNodeTree : BLI::NonCopyable, BLI::NonMovable {
 
   const VSocket &socket_by_id(uint id) const;
 
+  bNodeTree *btree() const;
+
  private:
   void find_targets_skipping_reroutes(VOutputSocket &vsocket, Vector<VSocket *> &r_targets);
 };
@@ -224,11 +222,6 @@ inline bNodeSocket *VSocket::bsocket() const
   return m_bsocket;
 }
 
-inline bNodeTree *VSocket::btree() const
-{
-  return m_btree;
-}
-
 inline ArrayRef<const VOutputSocket *> VInputSocket::linked_sockets() const
 {
   return ArrayRef<VSocket *>(m_linked_sockets).cast<const VOutputSocket *>();
@@ -308,7 +301,7 @@ inline bNode *VNode::bnode() const
   return m_bnode;
 }
 
-inline bNodeTree *VNode::btree() const
+inline bNodeTree *VirtualNodeTree::btree() const
 {
   return m_btree;
 }
diff --git a/source/blender/blenkernel/intern/virtual_node_tree.cc b/source/blender/blenkernel/intern/virtual_node_tree.cc
index 426232274f6..57a2311310a 100644
--- a/source/blender/blenkernel/intern/virtual_node_tree.cc
+++ b/source/blender/blenkernel/intern/virtual_node_tree.cc
@@ -15,12 +15,11 @@ static bool is_reroute_node(const VNode &vnode)
   return vnode.idname() == "NodeReroute";
 }
 
-std::unique_ptr<VirtualNodeTree> VirtualNodeTree::FromBTree(bNodeTree *btree)
+VirtualNodeTree::VirtualNodeTree(bNodeTree *btree) : m_btree(btree)
 {
   BLI_assert(btree != nullptr);
 
-  VirtualNodeTree *vtree_ptr = new VirtualNodeTree();
-  VirtualNodeTree &vtree = *vtree_ptr;
+  VirtualNodeTree &vtree = *this;
 
   Map<bNode *, VNode *> node_mapping;
 
@@ -29,7 +28,6 @@ std::unique_ptr<VirtualNodeTree> VirtualNodeTree::FromBTree(bNodeTree *btree)
 
     vnode.m_vtree = &vtree;
     vnode.m_bnode = bnode;
-    vnode.m_btree = btree;
     vnode.m_id = vtree.m_nodes_by_id.size();
     RNA_pointer_create(&btree->id, &RNA_Node, bnode, &vnode.m_rna);
 
@@ -40,7 +38,6 @@ std::unique_ptr<VirtualNodeTree> VirtualNodeTree::FromBTree(bNodeTree *btree)
       vsocket.m_index = vnode.m_inputs.size();
       vsocket.m_is_input = true;
       vsocket.m_bsocket = bsocket;
-      vsocket.m_btree = btree;
       vsocket.m_id = vtree.m_sockets_by_id.size();
       RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &vsocket.m_rna);
 
@@ -56,7 +53,6 @@ std::unique_ptr<VirtualNodeTree> VirtualNodeTree::FromBTree(bNodeTree *btree)
       vsocket.m_index = vnode.m_outputs.size();
       vsocket.m_is_input = false;
       vsocket.m_bsocket = bsocket;
-      vsocket.m_btree = btree;
       vsocket.m_id = vtree.m_sockets_by_id.size();
       RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &vsocket.m_rna);
 
@@ -98,8 +94,6 @@ std::unique_ptr<VirtualNodeTree> VirtualNodeTree::FromBTree(bNodeTree *btree)
       vtree.m_nodes_by_idname.add_new(vnode->idname(), {vnode});
     }
   }
-
-  return std::unique_ptr<VirtualNodeTree>(vtree_ptr);
 }
 
 void VirtualNodeTree::find_targets_skipping_reroutes(VOutputSocket &vsocket,
diff --git a/source/blender/functions/intern/vtree_multi_function/vnode_multi_function_wrapper_builder.cc b/source/blender/functions/intern/vtree_multi_function/vnode_multi_function_wrapper_builder.cc
index 359137aacde..ef6f33f7856 100644
--- a/source/blender/functions/intern/vtree_multi_function/vnode_multi_function_wrapper_builder.cc
+++ b/source/blender/functions/intern/vtree_multi_function/vnode_multi_function_wrapper_builder.cc
@@ -104,6 +104,7 @@ void VNodeMFWrapperBuilder::set_fn(const MultiFunction &fn,
 void VNodeMFWrapperBuilder::assert_valid_param_vsockets(
     const MultiFunction &fn, ArrayRef<VSocketsForMFParam> param_vsockets)
 {
+  UNUSED_VARS_NDEBUG(fn, param_vsockets);
 #ifdef DEBUG
   BLI_assert(fn.param_indices().size() == param_vsockets.size());
 
diff --git a/source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h b/source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h
index 75532f25386..8cfe46147e2 100644
--- a/source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h
+++ b/source/blender/functions/intern/vtree_multi_function/vtree_multi_function.h
@@ -16,7 +16,6 @@ class VTreeMultiFunction final : public MultiFunction {
   VTreeMultiFunction(Vector<const VOutputSocket *> inputs, Vector<const VInputSocket *> outputs)
       : m_inputs(std::move(inputs)), m_outputs(std::move(outputs))
   {
-    auto &data = get_vtree_mf_mappings();
   }
 
   void call(MFMask UNUSED(mask), MFParams UNUSED(params), MFContext UNUSED(context)) const override
diff --git a/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
index 937743a4499..ef069ad3c8f 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
@@ -517,7 +517,7 @@ static void INSERT_group_node(VTreeMFNetworkBuilder &builder, const VNode &vnode
     return;
   }
 
-  auto vtree = VirtualNodeTree::FromBTree(btree);
+  auto vtree = BLI::make_unique<VirtualNodeTree>(btree);
 
   std::unique_ptr<MF_EvaluateNetwork> fn = generate_vtree_multi_function(*vtree,
                                                                          builder.resources());
diff --git a/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc b/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
index 468dc689a6d..7043e2fb91e 100644
--- a/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
+++ b/source/blender/modifiers/intern/MOD_functiondeform_cxx.cc
@@ -45,10 +45,10 @@ void MOD_functiondeform_do(FunctionDeformModifierData *fdmd,
 
   bNodeTree *btree = (bNodeTree *)DEG_get_original_id((ID *)fdmd->function_tree);
 
-  auto vtree = VirtualNodeTree::FromBTree(btree);
+  VirtualNodeTree vtree(btree);
 
   BLI::ResourceCollector resources;
-  auto function = FN::generate_vtree_multi_function(*vtree, resources);
+  auto function = FN::generate_vtree_multi_function(vtree, resources);
 
   FN::VTreeMultiFunction test({}, {});
 
diff --git a/source/blender/modifiers/intern/MOD_functionpoints_cxx.cc b/source/blender/modifiers/intern/MOD_functionpoints_cxx.cc
index e4d702f7625..88eb211e510 100644
--- a/source/blender/modifiers/intern/MOD_functionpoints_cxx.cc
+++ b/source/blender/modifiers/intern/MOD_functionpoints_cxx.cc
@@ -40,10 +40,10 @@ Mesh *MOD_functionpoints_do(FunctionPointsModifierData *fpmd,
 
   bNodeTree *btree = (bNodeTree *)DEG_get_original_id((ID *)fpmd->function_tree);
 
-  auto vtree = VirtualNodeTree::FromBTree(btree);
+  VirtualNodeTree vtree(btree);
 
   BLI::ResourceCollector resources;
-  auto function = FN::generate_vtree_multi_function(*vtree, resources);
+  auto function = FN::generate_vtree_multi_function(vtree, resources);
 
   MFParamsBuilder params_builder(*function, 1);
   params_builder.add_readonly_single_input(&fpmd->control1);
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index ccf22f88ae4..691141524e1 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -785,12 +785,11 @@ static void collect_influences(VTreeData &vtree_data,
 
 class NodeTreeStepSimulator : public StepSimulator {
  private:
-  std::unique_ptr<VirtualNodeTree> m_vtree;
+  VirtualNodeTree m_vtree;
 
  public:
-  NodeTreeStepSimulator(bNodeTree *btree)
+  NodeTreeStepSimulator(bNodeTree *btree) : m_vtree(btree)
   {
-    m_vtree = VirtualNodeTree::FromBTree(btree);
   }
 
   void simulate(SimulationState &simulation_state) override
@@ -810,7 +809,7 @@ class NodeTreeStepSimulator : public StepSimulator {
 
     ResourceCollector resources;
     std::unique_ptr<VTreeMFNetwork> data_graph = FN::generate_vtree_multi_function_network(
-        *m_vtree, resources);
+        m_vtree, resources);
     if (data_graph.get() == nullptr) {
       return;
     }



More information about the Bf-blender-cvs mailing list