[Bf-blender-cvs] [22bd4ad4fb7] functions: move more code out of GraphInserters

Jacques Lucke noreply at git.blender.org
Wed Jul 31 18:45:20 CEST 2019


Commit: 22bd4ad4fb76b978a85aa0a36e970a01c4e8f6c8
Author: Jacques Lucke
Date:   Wed Jul 31 17:53:37 2019 +0200
Branches: functions
https://developer.blender.org/rB22bd4ad4fb76b978a85aa0a36e970a01c4e8f6c8

move more code out of GraphInserters

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

M	source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M	source/blender/functions/frontends/data_flow_nodes/inserters.cpp
M	source/blender/functions/frontends/data_flow_nodes/inserters.hpp
M	source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
M	source/blender/functions/frontends/data_flow_nodes/registry.hpp

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

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 f7c091bbb19..8dbb328bd6c 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -1,6 +1,7 @@
 #include "DNA_node_types.h"
 
 #include "FN_types.hpp"
+#include "FN_dependencies.hpp"
 #include "FN_data_flow_nodes.hpp"
 
 #include "inserters.hpp"
@@ -92,6 +93,62 @@ static void insert_unlinked_inputs(VTreeDataGraphBuilder &builder,
   }
 }
 
+class SocketLoaderBody : public TupleCallBody {
+ private:
+  Vector<bNodeTree *> m_btrees;
+  Vector<bNodeSocket *> m_bsockets;
+  Vector<SocketLoader> m_loaders;
+
+ public:
+  SocketLoaderBody(ArrayRef<bNodeTree *> btrees,
+                   ArrayRef<bNodeSocket *> bsockets,
+                   Vector<SocketLoader> &loaders)
+      : m_btrees(btrees), m_bsockets(bsockets), m_loaders(loaders)
+  {
+  }
+
+  void call(Tuple &UNUSED(fn_in), Tuple &fn_out, ExecutionContext &UNUSED(ctx)) const override
+  {
+    for (uint i = 0; i < m_bsockets.size(); i++) {
+      PointerRNA rna;
+      bNodeSocket *bsocket = m_bsockets[i];
+      auto loader = m_loaders[i];
+      bNodeTree *btree = m_btrees[i];
+
+      RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &rna);
+      loader(&rna, fn_out, i);
+    }
+  }
+};
+
+class SocketLoaderDependencies : public DepsBody {
+ private:
+  Vector<bNodeTree *> m_btrees;
+  Vector<bNodeSocket *> m_bsockets;
+
+ public:
+  SocketLoaderDependencies(ArrayRef<bNodeTree *> btrees, ArrayRef<bNodeSocket *> bsockets)
+      : m_btrees(btrees), m_bsockets(bsockets)
+  {
+  }
+
+  void build_deps(FunctionDepsBuilder &builder) const
+  {
+    for (uint i = 0; i < m_bsockets.size(); i++) {
+      bNodeSocket *bsocket = m_bsockets[i];
+      bNodeTree *btree = m_btrees[i];
+      if (STREQ(bsocket->idname, "fn_ObjectSocket")) {
+        PointerRNA rna;
+        RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &rna);
+        Object *value = (Object *)RNA_pointer_get(&rna, "value").id.data;
+        if (value != nullptr) {
+          builder.add_output_objects(i, {value});
+        }
+      }
+    }
+  }
+};
+
 class BasicUnlinkedInputsHandler : public UnlinkedInputsHandler {
  private:
   GraphInserters &m_inserters;
@@ -105,7 +162,33 @@ class BasicUnlinkedInputsHandler : public UnlinkedInputsHandler {
               ArrayRef<VirtualSocket *> unlinked_inputs,
               ArrayRef<DFGB_Socket> r_new_origins) override
   {
-    m_inserters.insert_sockets(builder, unlinked_inputs, r_new_origins);
+    auto &socket_loader_map = get_socket_loader_map();
+
+    Vector<SocketLoader> loaders;
+    Vector<bNodeSocket *> bsockets;
+    Vector<bNodeTree *> btrees;
+
+    FunctionBuilder fn_builder;
+    for (uint i = 0; i < unlinked_inputs.size(); i++) {
+      VirtualSocket *vsocket = unlinked_inputs[i];
+
+      SocketLoader loader = socket_loader_map.lookup(vsocket->bsocket()->idname);
+      loaders.append(loader);
+      fn_builder.add_output(builder.query_socket_name(vsocket),
+                            builder.query_socket_type(vsocket));
+
+      bsockets.append(vsocket->bsocket());
+      btrees.append(vsocket->btree());
+    }
+
+    auto fn = fn_builder.build("Input Sockets");
+    fn->add_body<SocketLoaderBody>(btrees, bsockets, loaders);
+    fn->add_body<SocketLoaderDependencies>(btrees, bsockets);
+    DFGB_Node *node = builder.insert_function(fn);
+
+    for (uint i = 0; i < node->output_amount(); i++) {
+      r_new_origins[i] = node->output(i);
+    }
   }
 };
 
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
index 9ad18d9c397..f7f946ce58b 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
@@ -17,7 +17,6 @@ using TypePair = std::pair<SharedType, SharedType>;
 
 static void initialize_standard_inserters(GraphInserters &inserters)
 {
-  initialize_socket_inserters(inserters);
   register_conversion_inserters(inserters);
 }
 
@@ -29,6 +28,14 @@ BLI_LAZY_INIT(StringMap<NodeInserter>, get_node_inserters_map)
   return map;
 }
 
+BLI_LAZY_INIT(StringMap<SocketLoader>, get_socket_loader_map)
+{
+  StringMap<SocketLoader> map;
+  SocketLoaderRegistry registry(map);
+  register_socket_loaders(registry);
+  return map;
+}
+
 BLI_LAZY_INIT(GraphInserters, get_standard_inserters)
 {
   GraphInserters inserters;
@@ -42,11 +49,6 @@ GraphInserters::GraphInserters()
 {
 }
 
-void GraphInserters::reg_socket_loader(std::string idname, SocketLoader loader)
-{
-  m_socket_loaders.add_new(idname, loader);
-}
-
 void GraphInserters::reg_conversion_inserter(StringRef from_type,
                                              StringRef to_type,
                                              ConversionInserter inserter)
@@ -70,92 +72,6 @@ void GraphInserters::reg_conversion_function(StringRef from_type,
   this->reg_conversion_inserter(from_type, to_type, inserter);
 }
 
-class SocketLoaderBody : public TupleCallBody {
- private:
-  Vector<bNodeTree *> m_btrees;
-  Vector<bNodeSocket *> m_bsockets;
-  Vector<SocketLoader> m_loaders;
-
- public:
-  SocketLoaderBody(ArrayRef<bNodeTree *> btrees,
-                   ArrayRef<bNodeSocket *> bsockets,
-                   Vector<SocketLoader> &loaders)
-      : m_btrees(btrees), m_bsockets(bsockets), m_loaders(loaders)
-  {
-  }
-
-  void call(Tuple &UNUSED(fn_in), Tuple &fn_out, ExecutionContext &UNUSED(ctx)) const override
-  {
-    for (uint i = 0; i < m_bsockets.size(); i++) {
-      PointerRNA rna;
-      bNodeSocket *bsocket = m_bsockets[i];
-      auto loader = m_loaders[i];
-      bNodeTree *btree = m_btrees[i];
-
-      RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &rna);
-      loader(&rna, fn_out, i);
-    }
-  }
-};
-
-class SocketLoaderDependencies : public DepsBody {
- private:
-  Vector<bNodeTree *> m_btrees;
-  Vector<bNodeSocket *> m_bsockets;
-
- public:
-  SocketLoaderDependencies(ArrayRef<bNodeTree *> btrees, ArrayRef<bNodeSocket *> bsockets)
-      : m_btrees(btrees), m_bsockets(bsockets)
-  {
-  }
-
-  void build_deps(FunctionDepsBuilder &builder) const
-  {
-    for (uint i = 0; i < m_bsockets.size(); i++) {
-      bNodeSocket *bsocket = m_bsockets[i];
-      bNodeTree *btree = m_btrees[i];
-      if (STREQ(bsocket->idname, "fn_ObjectSocket")) {
-        PointerRNA rna;
-        RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &rna);
-        Object *value = (Object *)RNA_pointer_get(&rna, "value").id.data;
-        if (value != nullptr) {
-          builder.add_output_objects(i, {value});
-        }
-      }
-    }
-  }
-};
-
-void GraphInserters::insert_sockets(VTreeDataGraphBuilder &builder,
-                                    ArrayRef<VirtualSocket *> vsockets,
-                                    ArrayRef<DFGB_Socket> r_new_origins)
-{
-  Vector<SocketLoader> loaders;
-  Vector<bNodeSocket *> bsockets;
-  Vector<bNodeTree *> btrees;
-
-  FunctionBuilder fn_builder;
-  for (uint i = 0; i < vsockets.size(); i++) {
-    VirtualSocket *vsocket = vsockets[i];
-
-    SocketLoader loader = m_socket_loaders.lookup(vsocket->bsocket()->idname);
-    loaders.append(loader);
-    fn_builder.add_output(builder.query_socket_name(vsocket), builder.query_socket_type(vsocket));
-
-    bsockets.append(vsocket->bsocket());
-    btrees.append(vsocket->btree());
-  }
-
-  auto fn = fn_builder.build("Input Sockets");
-  fn->add_body<SocketLoaderBody>(btrees, bsockets, loaders);
-  fn->add_body<SocketLoaderDependencies>(btrees, bsockets);
-  DFGB_Node *node = builder.insert_function(fn);
-
-  for (uint i = 0; i < node->output_amount(); i++) {
-    r_new_origins[i] = node->output(i);
-  }
-}
-
 bool GraphInserters::insert_link(VTreeDataGraphBuilder &builder,
                                  VirtualSocket *from_vsocket,
                                  VirtualSocket *to_vsocket)
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.hpp b/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
index 72cfcb6ca56..36daa02dd60 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
@@ -23,6 +23,7 @@ typedef std::function<void(VTreeDataGraphBuilder &builder, DFGB_Socket from, DFG
 typedef std::function<SharedFunction()> FunctionGetter;
 
 StringMap<NodeInserter> &get_node_inserters_map();
+StringMap<SocketLoader> &get_socket_loader_map();
 
 class NodeInserterRegistry {
  private:
@@ -48,9 +49,23 @@ class NodeInserterRegistry {
   }
 };
 
+class SocketLoaderRegistry {
+ private:
+  StringMap<SocketLoader> &m_map;
+
+ public:
+  SocketLoaderRegistry(StringMap<SocketLoader> &map) : m_map(map)
+  {
+  }
+
+  void loader(StringRef idname, SocketLoader loader)
+  {
+    m_map.add_new(idname, loader);
+  }
+};
+
 class GraphInserters {
  private:
-  StringMap<SocketLoader> m_socket_loaders;
   Map<std::pair<SharedType, SharedType>, ConversionInserter> m_conversion_inserters;
   StringMap<SharedType> *m_type_by_data_type;
   StringMap<SharedType> *m_type_by_idname;
@@ -58,18 +73,12 @@ class GraphInserters {
  public:
   GraphInserters();
 
-  void reg_socket_loader(std::string idname, SocketLoader loader);
-
   void reg_conversion_inserter(StringRef from_type,
                                StringRef to_type,
                                ConversionInserter inserter);
 
   void reg_conversion_function(StringRef from_type, StringRef to_type, FunctionGetter getter);
 
-  void insert_sockets(VTreeDataGraphBuilder &builder,
-                      ArrayRef<VirtualSocket *> vsockets,
-                      ArrayRef<DFGB_Socket> r_new_origins);
-
   bool insert_link(VTreeDataGraphBuilder &builder,
                    VirtualSocket *from_vsocket,
                    VirtualSocket *to_vsocket);
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
index

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list