[Bf-blender-cvs] [7a3e5c1dadf] functions: simplify creating particle function

Jacques Lucke noreply at git.blender.org
Thu Jul 25 15:10:40 CEST 2019


Commit: 7a3e5c1dadf01165fd36636f38c26d16fada5647
Author: Jacques Lucke
Date:   Thu Jul 25 14:31:25 2019 +0200
Branches: functions
https://developer.blender.org/rB7a3e5c1dadf01165fd36636f38c26d16fada5647

simplify creating particle function

===================================================================

M	source/blender/simulations/bparticles/inserters.cpp
M	source/blender/simulations/bparticles/inserters.hpp
M	source/blender/simulations/bparticles/node_frontend.cpp

===================================================================

diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index b38237b75e6..d33d0f0063d 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -54,10 +54,10 @@ static ValueOrError<SharedFunction> create_function__emitter_inputs(VirtualNode
   return fn;
 }
 
-static ValueOrError<SharedFunction> create_function__action_inputs(VirtualNode *action_vnode,
-                                                                   VTreeDataGraph &data_graph)
+ValueOrError<ParticleFunction> create_particle_function(VirtualNode *main_vnode,
+                                                        VTreeDataGraph &data_graph)
 {
-  Vector<DFGraphSocket> sockets_to_compute = find_input_data_sockets(action_vnode, data_graph);
+  Vector<DFGraphSocket> sockets_to_compute = find_input_data_sockets(main_vnode, data_graph);
   auto dependencies = data_graph.find_placeholder_dependencies(sockets_to_compute);
 
   FunctionBuilder fn_builder;
@@ -82,29 +82,12 @@ static ValueOrError<SharedFunction> create_function__action_inputs(VirtualNode *
     fn_builder.add_input(name_prefix + vsocket->name(), type);
   }
 
-  SharedFunction fn = fn_builder.build(action_vnode->name());
-
+  SharedFunction fn = fn_builder.build(main_vnode->name());
   FunctionGraph fgraph(data_graph.graph(), dependencies.sockets, sockets_to_compute);
   FN::fgraph_add_TupleCallBody(fn, fgraph);
-  return fn;
-}
-
-ValueOrError<SharedFunction> create_function__offset_handler_inputs(
-    VirtualNode *offset_handler_vnode, VTreeDataGraph &data_graph)
-{
-  return create_function__action_inputs(offset_handler_vnode, data_graph);
-}
 
-ValueOrError<SharedFunction> create_function__force_inputs(VirtualNode *force_vnode,
-                                                           VTreeDataGraph &data_graph)
-{
-  return create_function__action_inputs(force_vnode, data_graph);
-}
-
-ValueOrError<SharedFunction> create_function__event_inputs(VirtualNode *event_vnode,
-                                                           VTreeDataGraph &data_graph)
-{
-  return create_function__action_inputs(event_vnode, data_graph);
+  ParticleFunction particle_function(fn);
+  return particle_function;
 }
 
 static std::unique_ptr<Action> build_action(BuildContext &ctx,
@@ -201,7 +184,7 @@ static std::unique_ptr<Action> build_action(BuildContext &ctx,
   BLI_assert(start->is_input());
   VirtualNode *vnode = start->vnode();
 
-  auto fn_or_error = create_function__action_inputs(vnode, ctx.data_graph);
+  auto fn_or_error = create_particle_function(vnode, ctx.data_graph);
   if (fn_or_error.is_error()) {
     return std::unique_ptr<Action>(new NoneAction());
   }
diff --git a/source/blender/simulations/bparticles/inserters.hpp b/source/blender/simulations/bparticles/inserters.hpp
index 7148e0578b5..a98f86e8b9b 100644
--- a/source/blender/simulations/bparticles/inserters.hpp
+++ b/source/blender/simulations/bparticles/inserters.hpp
@@ -36,14 +36,8 @@ struct BuildContext {
   }
 };
 
-ValueOrError<SharedFunction> create_function__offset_handler_inputs(
-    VirtualNode *offset_handler_vnode, VTreeDataGraph &data_graph);
-
-ValueOrError<SharedFunction> create_function__force_inputs(VirtualNode *force_vnode,
-                                                           VTreeDataGraph &data_graph);
-
-ValueOrError<SharedFunction> create_function__event_inputs(VirtualNode *event_vnode,
-                                                           VTreeDataGraph &data_graph);
+ValueOrError<ParticleFunction> create_particle_function(VirtualNode *main_vnode,
+                                                        VTreeDataGraph &data_graph);
 
 using ForceFromNodeCallback = std::function<std::unique_ptr<Force>(
     BuildContext &ctx, VirtualNode *vnode, ParticleFunction compute_inputs_fn)>;
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index 871c6d2c1eb..2410e05b428 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -69,13 +69,12 @@ std::unique_ptr<StepDescription> step_description_from_node_tree(VirtualNodeTree
     for (VirtualNode *vnode : vtree.nodes_with_idname(item.key)) {
       for (VirtualSocket *linked : vnode->output(0)->links()) {
         if (is_particle_type_node(linked->vnode())) {
-          auto fn_or_error = create_function__force_inputs(vnode, data_graph);
+          auto fn_or_error = create_particle_function(vnode, data_graph);
           if (fn_or_error.is_error()) {
             continue;
           }
 
-          ParticleFunction fn(fn_or_error.extract_value());
-          auto force = item.value(ctx, vnode, std::move(fn));
+          auto force = item.value(ctx, vnode, fn_or_error.extract_value());
           if (force) {
             forces.add(linked->vnode()->name(), force.release());
           }
@@ -89,14 +88,12 @@ std::unique_ptr<StepDescription> step_description_from_node_tree(VirtualNodeTree
     for (VirtualNode *vnode : vtree.nodes_with_idname(item.key)) {
       for (VirtualSocket *linked : vnode->output(0)->links()) {
         if (is_particle_type_node(linked->vnode())) {
-          auto fn_or_error = create_function__offset_handler_inputs(vnode, data_graph);
+          auto fn_or_error = create_particle_function(vnode, data_graph);
           if (fn_or_error.is_error()) {
             continue;
           }
 
-          ParticleFunction fn(fn_or_error.extract_value());
-
-          auto listener = item.value(ctx, vnode, std::move(fn));
+          auto listener = item.value(ctx, vnode, fn_or_error.extract_value());
           if (listener) {
             offset_handlers.add(linked->vnode()->name(), listener.release());
           }
@@ -110,14 +107,12 @@ std::unique_ptr<StepDescription> step_description_from_node_tree(VirtualNodeTree
     for (VirtualNode *vnode : vtree.nodes_with_idname(item.key)) {
       for (VirtualSocket *linked : vnode->input(0)->links()) {
         if (is_particle_type_node(linked->vnode())) {
-          auto fn_or_error = create_function__event_inputs(vnode, data_graph);
+          auto fn_or_error = create_particle_function(vnode, data_graph);
           if (fn_or_error.is_error()) {
             continue;
           }
 
-          ParticleFunction fn(fn_or_error.extract_value());
-
-          auto event = item.value(ctx, vnode, std::move(fn));
+          auto event = item.value(ctx, vnode, fn_or_error.extract_value());
           if (event) {
             events.add(linked->vnode()->name(), event.release());
           }



More information about the Bf-blender-cvs mailing list