[Bf-blender-cvs] [a5b90dc6614] functions: extract method that links functions
Jacques Lucke
noreply at git.blender.org
Tue Jul 16 18:20:15 CEST 2019
Commit: a5b90dc66147f9fe101ed32f954db97265fa5b3f
Author: Jacques Lucke
Date: Tue Jul 16 14:43:47 2019 +0200
Branches: functions
https://developer.blender.org/rBa5b90dc66147f9fe101ed32f954db97265fa5b3f
extract method that links functions
===================================================================
M source/blender/simulations/bparticles/inserters.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index c682fc0dcbe..bd184b6c362 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -271,6 +271,40 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_moving_point(BuildContext &ctx,
return std::unique_ptr<PointEmitter>(new PointEmitter(particle_type_name, point, 10));
}
+static FN::FunctionGraph link_inputs_to_function(SharedFunction &main_fn,
+ SharedFunction &inputs_fn,
+ SharedFunction &reserved_fn)
+{
+ FN::DataFlowGraphBuilder builder;
+ auto *main_node = builder.insert_function(main_fn);
+ auto *inputs_node = builder.insert_function(inputs_fn);
+ auto *reserved_node = builder.insert_function(reserved_fn);
+
+ uint offset = 0;
+ for (uint i = 0; i < main_fn->input_amount(); i++) {
+ StringRef input_name = main_fn->input_name(i);
+ FN::SharedType &input_type = main_fn->input_type(i);
+
+ bool is_reserved_input = false;
+ for (uint j = 0; j < reserved_fn->output_amount(); j++) {
+ if (reserved_fn->output_name(j) == input_name && reserved_fn->output_type(j) == input_type) {
+ builder.insert_link(reserved_node->output(j), main_node->input(i));
+ is_reserved_input = true;
+ }
+ }
+
+ if (!is_reserved_input) {
+ builder.insert_link(inputs_node->output(offset), main_node->input(i));
+ offset++;
+ }
+ }
+
+ auto build_result = FN::DataFlowGraph::FromBuilder(builder);
+ auto final_inputs = build_result.mapping.map_sockets(reserved_node->outputs());
+ auto final_outputs = build_result.mapping.map_sockets(main_node->outputs());
+ return FN::FunctionGraph(build_result.graph, final_inputs, final_outputs);
+}
+
static std::unique_ptr<Emitter> BUILD_EMITTER_custom_function(BuildContext &ctx,
bNode *bnode,
StringRef particle_type_name)
@@ -295,38 +329,11 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_custom_function(BuildContext &ctx,
fn_builder.add_output("Time Step", FN::Types::GET_TYPE_float());
SharedFunction fn_reserved_inputs = fn_builder.build("Reserved Inputs");
- FN::DataFlowGraphBuilder builder;
- FN::DFGB_Node *inputs_node = builder.insert_function(fn_inputs);
- FN::DFGB_Node *emitter_node = builder.insert_function(fn_emitter);
- FN::DFGB_Node *reserved_inputs_node = builder.insert_function(fn_reserved_inputs);
-
- uint offset = 0;
- for (uint i = 0; i < fn_emitter->input_amount(); i++) {
- StringRef input_name = fn_emitter->input_name(i);
- FN::SharedType &input_type = fn_emitter->input_type(i);
-
- bool is_reserved_input = false;
- for (uint j = 0; j < fn_reserved_inputs->output_amount(); j++) {
- if (fn_reserved_inputs->output_name(j) == input_name &&
- fn_reserved_inputs->output_type(j) == input_type) {
- builder.insert_link(reserved_inputs_node->output(j), emitter_node->input(i));
- is_reserved_input = true;
- }
- }
-
- if (!is_reserved_input) {
- builder.insert_link(inputs_node->output(offset), emitter_node->input(i));
- offset++;
- }
- }
-
- auto build_result = FN::DataFlowGraph::FromBuilder(builder);
- FN::FunctionGraph fgraph(build_result.graph,
- build_result.mapping.map_sockets(reserved_inputs_node->outputs()),
- build_result.mapping.map_sockets(emitter_node->outputs()));
+ FN::FunctionGraph fgraph = link_inputs_to_function(fn_emitter, fn_inputs, fn_reserved_inputs);
auto fn = fgraph.new_function("Emitter");
FN::fgraph_add_DependenciesBody(fn, fgraph);
FN::fgraph_add_TupleCallBody(fn, fgraph);
+
return std::unique_ptr<Emitter>(new CustomFunctionEmitter(particle_type_name, fn));
}
More information about the Bf-blender-cvs
mailing list