[Bf-blender-cvs] [f9a555a60ad] functions: don't load socket values dynamically
Jacques Lucke
noreply at git.blender.org
Thu Aug 1 18:23:35 CEST 2019
Commit: f9a555a60ad80a9b5a9d0275f042f2403bb5a8dd
Author: Jacques Lucke
Date: Thu Aug 1 16:35:06 2019 +0200
Branches: functions
https://developer.blender.org/rBf9a555a60ad80a9b5a9d0275f042f2403bb5a8dd
don't load socket values dynamically
===================================================================
M source/blender/functions/backends/tuple/tuple.hpp
M source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
===================================================================
diff --git a/source/blender/functions/backends/tuple/tuple.hpp b/source/blender/functions/backends/tuple/tuple.hpp
index 4e5fdd91e45..89e46e0b019 100644
--- a/source/blender/functions/backends/tuple/tuple.hpp
+++ b/source/blender/functions/backends/tuple/tuple.hpp
@@ -526,6 +526,11 @@ class Tuple {
return m_meta->element_amount();
}
+ TupleMeta &meta() const
+ {
+ return *m_meta;
+ }
+
void print_initialized(std::string name = "");
private:
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 cff58b7b954..329bbcbaa30 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -169,9 +169,9 @@ class SocketLoaderDependencies : public DepsBody {
}
};
-class BasicUnlinkedInputsHandler : public UnlinkedInputsHandler {
+class DynamicSocketLoader : public UnlinkedInputsHandler {
public:
- BasicUnlinkedInputsHandler() = default;
+ DynamicSocketLoader() = default;
void insert(VTreeDataGraphBuilder &builder,
ArrayRef<VirtualSocket *> unlinked_inputs,
@@ -187,7 +187,7 @@ class BasicUnlinkedInputsHandler : public UnlinkedInputsHandler {
for (uint i = 0; i < unlinked_inputs.size(); i++) {
VirtualSocket *vsocket = unlinked_inputs[i];
- SocketLoader loader = socket_loader_map.lookup(vsocket->bsocket()->idname);
+ SocketLoader loader = socket_loader_map.lookup(vsocket->idname());
loaders.append(loader);
fn_builder.add_output(vsocket->name(), builder.query_socket_type(vsocket));
@@ -200,9 +200,62 @@ class BasicUnlinkedInputsHandler : public UnlinkedInputsHandler {
fn->add_body<SocketLoaderDependencies>(btrees, bsockets);
BuilderNode *node = builder.insert_function(fn);
- for (uint i = 0; i < node->outputs().size(); i++) {
- r_new_origins[i] = node->output(i);
+ r_new_origins.copy_from(node->outputs());
+ }
+};
+
+class ConstantTupleOutput : public TupleCallBody {
+ private:
+ std::unique_ptr<Tuple> m_tuple;
+
+ public:
+ ConstantTupleOutput()
+ {
+ }
+
+ void set_tuple(std::unique_ptr<Tuple> tuple)
+ {
+ m_tuple = std::move(tuple);
+ }
+
+ void call(Tuple &UNUSED(fn_in), Tuple &fn_out, ExecutionContext &UNUSED(ctx)) const override
+ {
+ BLI_assert(m_tuple->size() == fn_out.size());
+ uint size = m_tuple->size();
+ for (uint i = 0; i < size; i++) {
+ Tuple::copy_element(*m_tuple, i, fn_out, i);
+ }
+ }
+};
+
+class ConstantInputsHandler : public UnlinkedInputsHandler {
+ void insert(VTreeDataGraphBuilder &builder,
+ ArrayRef<VirtualSocket *> unlinked_inputs,
+ ArrayRef<BuilderOutputSocket *> r_new_origins) override
+ {
+ auto &socket_loader_map = get_socket_loader_map();
+
+ FunctionBuilder fn_builder;
+ for (VirtualSocket *vsocket : unlinked_inputs) {
+ fn_builder.add_output(vsocket->name(), builder.query_socket_type(vsocket));
}
+ SharedFunction fn = fn_builder.build("Unlinked Inputs");
+ fn->add_body<ConstantTupleOutput>();
+ ConstantTupleOutput &body = fn->body<ConstantTupleOutput>();
+
+ Tuple *tuple = new Tuple(*body.meta_out().ptr());
+
+ for (uint i = 0; i < unlinked_inputs.size(); i++) {
+ VirtualSocket *vsocket = unlinked_inputs[i];
+ SocketLoader loader = socket_loader_map.lookup(vsocket->idname());
+ PointerRNA rna = vsocket->rna();
+ loader(&rna, *tuple, i);
+ }
+
+ body.set_tuple(std::unique_ptr<Tuple>(tuple));
+
+ BuilderNode *node = builder.insert_function(fn);
+ r_new_origins.copy_from(node->outputs());
}
};
@@ -218,7 +271,7 @@ ValueOrError<VTreeDataGraph> generate_graph(VirtualNodeTree &vtree)
return BLI_ERROR_CREATE("error inserting links");
}
- BasicUnlinkedInputsHandler unlinked_inputs_handler;
+ ConstantInputsHandler unlinked_inputs_handler;
insert_unlinked_inputs(builder, unlinked_inputs_handler);
return builder.build();
More information about the Bf-blender-cvs
mailing list