[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