[Bf-blender-cvs] [3e0fd90605b] functions: use another strategy to create functions for unlinked inputs

Jacques Lucke noreply at git.blender.org
Tue Jul 30 16:55:23 CEST 2019


Commit: 3e0fd90605b4fca50bf789ef0b2364054742bcd7
Author: Jacques Lucke
Date:   Tue Jul 30 16:13:44 2019 +0200
Branches: functions
https://developer.blender.org/rB3e0fd90605b4fca50bf789ef0b2364054742bcd7

use another strategy to create functions for unlinked inputs

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

M	source/blender/functions/core/data_flow_graph_builder.hpp
M	source/blender/functions/frontends/data_flow_nodes/builder.cpp
M	source/blender/functions/frontends/data_flow_nodes/builder.hpp
M	source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M	source/blender/functions/frontends/data_flow_nodes/graph_generation.hpp
M	source/blender/functions/frontends/data_flow_nodes/inserters.cpp
M	source/blender/functions/frontends/data_flow_nodes/inserters.hpp

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

diff --git a/source/blender/functions/core/data_flow_graph_builder.hpp b/source/blender/functions/core/data_flow_graph_builder.hpp
index 31a77fe0878..2c0eda027aa 100644
--- a/source/blender/functions/core/data_flow_graph_builder.hpp
+++ b/source/blender/functions/core/data_flow_graph_builder.hpp
@@ -24,6 +24,8 @@ class DataFlowGraph;
 
 class DFGB_Socket {
  public:
+  DFGB_Socket() = default;
+
   DFGB_Socket(DFGB_Node *node, bool is_output, uint index)
       : m_node(node), m_is_output(is_output), m_index(index)
   {
diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.cpp b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
index f0b8ec2229d..97d3e58cdf7 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.cpp
@@ -100,6 +100,14 @@ void BTreeGraphBuilder::insert_link(DFGB_Socket a, DFGB_Socket b)
   m_graph.insert_link(a, b);
 }
 
+void BTreeGraphBuilder::insert_links(ArrayRef<DFGB_Socket> a, ArrayRef<DFGB_Socket> b)
+{
+  BLI_assert(a.size() == b.size());
+  for (uint i = 0; i < a.size(); i++) {
+    this->insert_link(a[i], b[i]);
+  }
+}
+
 void BTreeGraphBuilder::map_socket(DFGB_Socket socket, VirtualSocket *vsocket)
 {
   BLI_assert(this->is_data_socket(vsocket) ? socket.type() == this->query_socket_type(vsocket) :
diff --git a/source/blender/functions/frontends/data_flow_nodes/builder.hpp b/source/blender/functions/frontends/data_flow_nodes/builder.hpp
index a6c3f8dbb8e..8b0ddd750bd 100644
--- a/source/blender/functions/frontends/data_flow_nodes/builder.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/builder.hpp
@@ -34,6 +34,7 @@ class BTreeGraphBuilder {
 
   /* Insert Link */
   void insert_link(DFGB_Socket a, DFGB_Socket b);
+  void insert_links(ArrayRef<DFGB_Socket> a, ArrayRef<DFGB_Socket> b);
 
   /* Socket Mapping */
   void map_socket(DFGB_Socket socket, VirtualSocket *vsocket);
diff --git a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
index 7307e16a1dd..d68b2e063dc 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -64,29 +64,26 @@ static bool insert_links(BTreeGraphBuilder &builder, GraphInserters &inserters)
 static void insert_unlinked_inputs(BTreeGraphBuilder &builder,
                                    UnlinkedInputsHandler &unlinked_inputs_handler)
 {
-  Vector<VirtualSocket *> unlinked_inputs;
-  Vector<DFGB_Socket> sockets_in_builder;
 
   for (VirtualNode *vnode : builder.vtree().nodes()) {
+    Vector<VirtualSocket *> vsockets;
+    Vector<DFGB_Socket> sockets;
+
     for (VirtualSocket *vsocket : vnode->inputs()) {
       if (builder.is_data_socket(vsocket)) {
         DFGB_Socket socket = builder.lookup_socket(vsocket);
         if (!socket.is_linked()) {
-          unlinked_inputs.append(vsocket);
-          sockets_in_builder.append(socket);
+          vsockets.append(vsocket);
+          sockets.append(socket);
         }
       }
     }
-  }
-
-  Vector<DFGB_Socket> inserted_data_origins;
-  inserted_data_origins.reserve(unlinked_inputs.size());
-  unlinked_inputs_handler.insert(builder, unlinked_inputs, inserted_data_origins);
 
-  BLI_assert(unlinked_inputs.size() == inserted_data_origins.size());
-
-  for (uint i = 0; i < unlinked_inputs.size(); i++) {
-    builder.insert_link(inserted_data_origins[i], sockets_in_builder[i]);
+    if (vsockets.size() > 0) {
+      Vector<DFGB_Socket> new_origins(vsockets.size());
+      unlinked_inputs_handler.insert(builder, vsockets, new_origins);
+      builder.insert_links(new_origins, sockets);
+  }
   }
 }
 
@@ -114,9 +111,9 @@ class BasicUnlinkedInputsHandler : public UnlinkedInputsHandler {
 
   void insert(BTreeGraphBuilder &builder,
               ArrayRef<VirtualSocket *> unlinked_inputs,
-              Vector<DFGB_Socket> &r_inserted_data_origins) override
+              ArrayRef<DFGB_Socket> r_new_origins) override
   {
-    r_inserted_data_origins = std::move(m_inserters.insert_sockets(builder, unlinked_inputs));
+    m_inserters.insert_sockets(builder, unlinked_inputs, r_new_origins);
   }
 };
 
diff --git a/source/blender/functions/frontends/data_flow_nodes/graph_generation.hpp b/source/blender/functions/frontends/data_flow_nodes/graph_generation.hpp
index 127cdd34a9f..feb51a5e26a 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.hpp
@@ -18,7 +18,7 @@ class UnlinkedInputsHandler {
  public:
   virtual void insert(BTreeGraphBuilder &builder,
                       ArrayRef<VirtualSocket *> unlinked_inputs,
-                      Vector<DFGB_Socket> &r_inserted_data_origins) = 0;
+                      ArrayRef<DFGB_Socket> r_new_origins) = 0;
 };
 
 class VTreeDataGraph {
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
index 3811d779a25..5d40e07c9e3 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
@@ -146,8 +146,9 @@ class SocketLoaderDependencies : public DepsBody {
   }
 };
 
-Vector<DFGB_Socket> GraphInserters::insert_sockets(BTreeGraphBuilder &builder,
-                                                   ArrayRef<VirtualSocket *> vsockets)
+void GraphInserters::insert_sockets(BTreeGraphBuilder &builder,
+                                    ArrayRef<VirtualSocket *> vsockets,
+                                    ArrayRef<DFGB_Socket> r_new_origins)
 {
   Vector<SocketLoader> loaders;
   Vector<bNodeSocket *> bsockets;
@@ -170,11 +171,9 @@ Vector<DFGB_Socket> GraphInserters::insert_sockets(BTreeGraphBuilder &builder,
   fn->add_body<SocketLoaderDependencies>(btrees, bsockets);
   DFGB_Node *node = builder.insert_function(fn);
 
-  Vector<DFGB_Socket> sockets;
-  for (DFGB_Socket output : node->outputs()) {
-    sockets.append(output);
+  for (uint i = 0; i < node->output_amount(); i++) {
+    r_new_origins[i] = node->output(i);
   }
-  return sockets;
 }
 
 bool GraphInserters::insert_link(BTreeGraphBuilder &builder,
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.hpp b/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
index 0a69014ec61..f61bb647878 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
@@ -44,8 +44,9 @@ class GraphInserters {
 
   bool insert_node(BTreeGraphBuilder &builder, VirtualNode *vnode);
 
-  Vector<DFGB_Socket> insert_sockets(BTreeGraphBuilder &builder,
-                                     ArrayRef<VirtualSocket *> vsockets);
+  void insert_sockets(BTreeGraphBuilder &builder,
+                      ArrayRef<VirtualSocket *> vsockets,
+                      ArrayRef<DFGB_Socket> r_new_origins);
 
   bool insert_link(BTreeGraphBuilder &builder,
                    VirtualSocket *from_vsocket,



More information about the Bf-blender-cvs mailing list