[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