Commit: afe19d51e3c085fe41749b4454d7aacc4f150f7b
Author: Jacques Lucke
Date: Fri Aug 2 18:57:19 2019 +0200
Branches: functions
https://developer.blender.org/rBafe19d51e3c085fe41749b4454d7aacc4f150f7b
remember placeholder nodes after they are created
===================================================================
M source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
M
source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
M
source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.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 f1ecfa91954..d5854c27898 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -7,28 +7,6 @@
namespace FN {
namespace DataFlowNodes {
-static void insert_placeholder_node(VTreeDataGraphBuilder &builder,
VirtualNode *vnode)
-{
- FunctionBuilder fn_builder;
- for (VirtualSocket *vsocket : vnode->inputs()) {
- if (builder.is_data_socket(vsocket)) {
- SharedType &type = builder.query_socket_type(vsocket);
- fn_builder.add_input(vsocket->name(), type);
- }
- }
- for (VirtualSocket *vsocket : vnode->outputs()) {
- if (builder.is_data_socket(vsocket)) {
- SharedType &type = builder.query_socket_type(vsocket);
- fn_builder.add_output(vsocket->name(), type);
- }
- }
-
- auto fn = fn_builder.build(vnode->name());
- fn->add_body<VNodePlaceholderBody>(vnode);
- BuilderNode *node = builder.insert_function(fn);
- builder.map_data_sockets(node, vnode);
-}
-
static bool insert_functions_for_bnodes(VTreeDataGraphBuilder &builder)
{
auto &inserters = MAPPING_node_inserters();
@@ -40,7 +18,7 @@ static bool insert_functions_for_bnodes(VTreeDataGraphBuilder
&builder)
}
if (builder.has_data_socket(vnode)) {
- insert_placeholder_node(builder, vnode);
+ builder.insert_placeholder(vnode);
}
}
return true;
@@ -70,9 +48,10 @@ static bool insert_links(VTreeDataGraphBuilder &builder)
return true;
}
-static void insert_unlinked_inputs(VTreeDataGraphBuilder &builder,
InputInserter &input_inserter)
+class SeparateNodeInputs : public UnlinkedInputsHandler {
+ public:
+ void handle(VTreeDataGraphBuilder &builder, InputInserter &inserter) override
{
-
for (VirtualNode *vnode : builder.vtree().nodes()) {
Vector<VirtualSocket *> vsockets;
Vector<BuilderInputSocket *> sockets;
@@ -89,7 +68,7 @@ static void insert_unlinked_inputs(VTreeDataGraphBuilder
&builder, InputInserter
if (vsockets.size() > 0) {
Vector<BuilderOutputSocket *> new_origins(vsockets.size());
- input_inserter.insert(builder, vsockets, new_origins);
+ inserter.insert(builder, vsockets, new_origins);
builder.insert_links(new_origins, sockets);
}
}
diff --git
a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
index a5f3ea584ce..460fdc7fa00 100644
--- a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph.hpp
@@ -67,11 +67,13 @@ class VTreeDataGraph {
class VNodePlaceholderBody : public FunctionBody {
private:
VirtualNode *m_vnode;
+ Vector<VirtualSocket *> m_vsocket_inputs;
public:
static const uint FUNCTION_BODY_ID = 4;
- VNodePlaceholderBody(VirtualNode *vnode) : m_vnode(vnode)
+ VNodePlaceholderBody(VirtualNode *vnode, Vector<VirtualSocket *>
vsocket_inputs)
+ : m_vnode(vnode), m_vsocket_inputs(std::move(vsocket_inputs))
{
}
@@ -79,6 +81,11 @@ class VNodePlaceholderBody : public FunctionBody {
{
return m_vnode;
}
+
+ ArrayRef<VirtualSocket *> inputs()
+ {
+ return m_vsocket_inputs;
+ }
};
} // namespace DataFlowNodes
diff --git
a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
index 11a8b7e6970..0bc9871de2d 100644
---
a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
+++
b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
@@ -126,6 +126,39 @@ BuilderNode
*VTreeDataGraphBuilder::insert_function(SharedFunction &fn, VirtualN
return m_graph_builder.insert_function(fn, source);
}
+BuilderNode *VTreeDataGraphBuilder::insert_placeholder(VirtualNode *vnode)
+{
+ FunctionBuilder fn_builder;
+
+ Vector<VirtualSocket *> vsocket_inputs;
+ for (VirtualSocket *vsocket : vnode->inputs()) {
+ if (this->is_data_socket(vsocket)) {
+ vsocket_inputs.append(vsocket);
+ SharedType &type = this->query_socket_type(vsocket);
+ fn_builder.add_input(vsocket->name(), type);
+ }
+ }
+
+ for (VirtualSocket *vsocket : vnode->outputs()) {
+ if (this->is_data_socket(vsocket)) {
+ SharedType &type = this->query_socket_type(vsocket);
+ fn_builder.add_output(vsocket->name(), type);
+ }
+ }
+
+ auto fn = fn_builder.build(vnode->name());
+ fn->add_body<VNodePlaceholderBody>(vnode, std::move(vsocket_inputs));
+ BuilderNode *node = this->insert_function(fn);
+ this->map_data_sockets(node, vnode);
+ m_placeholder_nodes.append(node);
+ return node;
+}
+
+ArrayRef<BuilderNode *> VTreeDataGraphBuilder::placeholder_nodes()
+{
+ return m_placeholder_nodes;
+}
+
void VTreeDataGraphBuilder::insert_link(BuilderOutputSocket *from,
BuilderInputSocket *to)
{
m_graph_builder.insert_link(from, to);
diff --git
a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
index feb0e73f643..48c28546403 100644
---
a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
+++
b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
@@ -23,6 +23,7 @@ class VTreeDataGraphBuilder {
Vector<BuilderSocket *> m_socket_map;
Vector<SharedType> m_type_by_vsocket;
std::unique_ptr<TypeMappings> &m_type_mappings;
+ Vector<BuilderNode *> m_placeholder_nodes;
DataGraphBuilder m_graph_builder;
public:
@@ -35,16 +36,14 @@ class VTreeDataGraphBuilder {
return m_socket_map;
}
- /* Insert Function */
BuilderNode *insert_function(SharedFunction &fn);
BuilderNode *insert_matching_function(SharedFunction &fn, VirtualNode
*vnode);
BuilderNode *insert_function(SharedFunction &fn, VirtualNode *vnode);
+ BuilderNode *insert_placeholder(VirtualNode *vnode);
- /* Insert Link */
void insert_link(BuilderOutputSocket *from, BuilderInputSocket *to);
void insert_links(ArrayRef<BuilderOutputSocket *> from,
ArrayRef<BuilderInputSocket *> to);
- /* Socket Mapping */
void map_input_socket(BuilderInputSocket *socket, VirtualSocket *vsocket);
void map_output_socket(BuilderOutputSocket *socket, VirtualSocket *vsocket);
void map_sockets(BuilderNode *node, VirtualNode *vnode);
@@ -54,22 +53,14 @@ class VTreeDataGraphBuilder {
BuilderOutputSocket *lookup_output_socket(VirtualSocket *vsocket);
bool verify_data_sockets_mapped(VirtualNode *vnode) const;
- /* Type Mapping */
SharedType &type_by_name(StringRef data_type) const;
-
- /* Query Node Tree */
VirtualNodeTree &vtree() const;
-
- /* Query Socket Information */
bool is_data_socket(VirtualSocket *vsocket) const;
SharedType &query_socket_type(VirtualSocket *vsocket) const;
-
- /* Query Node Information */
SharedType &query_type_property(VirtualNode *vnode, StringRefNull prop_name)
const;
bool has_data_socket(VirtualNode *vnode) const;
-
- /* Query RNA */
SharedType &type_from_rna(PointerRNA &rna, StringRefNull prop_name) const;
+ ArrayRef<BuilderNode *> placeholder_nodes();
std::string to_dot();
void to_dot__clipboard();
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs