Commit: 6c3afa780109f7124ca79bbdd3e16e7802770ca3
Author: Jacques Lucke
Date:   Thu Jul 25 10:06:03 2019 +0200
Branches: functions
https://developer.blender.org/rB6c3afa780109f7124ca79bbdd3e16e7802770ca3

create particle function for force inputs more centrally

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

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 be37daadbc1..8326687b864 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -95,8 +95,8 @@ ValueOrError<SharedFunction> 
create_function__offset_handler_inputs(
   return create_function__action_inputs(offset_handler_vnode, data_graph);
 }
 
-static ValueOrError<SharedFunction> create_function__force_inputs(VirtualNode 
*force_vnode,
-                                                                  
VTreeDataGraph &data_graph)
+ValueOrError<SharedFunction> create_function__force_inputs(VirtualNode 
*force_vnode,
+                                                           VTreeDataGraph 
&data_graph)
 {
   return create_function__action_inputs(force_vnode, data_graph);
 }
@@ -224,26 +224,18 @@ static std::unique_ptr<Action> 
build_action_for_trigger(BuildContext &ctx, Virtu
   return build_action(ctx, start, start);
 }
 
-static std::unique_ptr<Force> BUILD_FORCE_gravity(BuildContext &ctx, 
VirtualNode *vnode)
+static std::unique_ptr<Force> BUILD_FORCE_gravity(BuildContext &UNUSED(ctx),
+                                                  VirtualNode *UNUSED(vnode),
+                                                  ParticleFunction 
compute_inputs_fn)
 {
-  auto fn_or_error = create_function__force_inputs(vnode, ctx.data_graph);
-  if (fn_or_error.is_error()) {
-    return {};
-  }
-
-  SharedFunction fn = fn_or_error.extract_value();
-  return std::unique_ptr<Force>(new GravityForce(ParticleFunction(fn)));
+  return std::unique_ptr<Force>(new 
GravityForce(std::move(compute_inputs_fn)));
 }
 
-static std::unique_ptr<Force> BUILD_FORCE_turbulence(BuildContext &ctx, 
VirtualNode *vnode)
+static std::unique_ptr<Force> BUILD_FORCE_turbulence(BuildContext &UNUSED(ctx),
+                                                     VirtualNode 
*UNUSED(vnode),
+                                                     ParticleFunction 
compute_inputs_fn)
 {
-  auto fn_or_error = create_function__force_inputs(vnode, ctx.data_graph);
-  if (fn_or_error.is_error()) {
-    return {};
-  }
-
-  SharedFunction fn = fn_or_error.extract_value();
-  return std::unique_ptr<Force>(new TurbulenceForce(ParticleFunction(fn)));
+  return std::unique_ptr<Force>(new 
TurbulenceForce(std::move(compute_inputs_fn)));
 }
 
 static std::unique_ptr<Event> BUILD_EVENT_mesh_collision(BuildContext &ctx, 
VirtualNode *vnode)
diff --git a/source/blender/simulations/bparticles/inserters.hpp 
b/source/blender/simulations/bparticles/inserters.hpp
index a4c9d696337..cb56f3fae4a 100644
--- a/source/blender/simulations/bparticles/inserters.hpp
+++ b/source/blender/simulations/bparticles/inserters.hpp
@@ -39,8 +39,11 @@ struct BuildContext {
 ValueOrError<SharedFunction> create_function__offset_handler_inputs(
     VirtualNode *offset_handler_vnode, VTreeDataGraph &data_graph);
 
-using ForceFromNodeCallback =
-    std::function<std::unique_ptr<Force>(BuildContext &ctx, VirtualNode 
*vnode)>;
+ValueOrError<SharedFunction> create_function__force_inputs(VirtualNode 
*force_vnode,
+                                                           VTreeDataGraph 
&data_graph);
+
+using ForceFromNodeCallback = std::function<std::unique_ptr<Force>(
+    BuildContext &ctx, VirtualNode *vnode, ParticleFunction 
compute_inputs_fn)>;
 
 using EventFromNodeCallback =
     std::function<std::unique_ptr<Event>(BuildContext &ctx, VirtualNode 
*vnode)>;
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp 
b/source/blender/simulations/bparticles/node_frontend.cpp
index 70c16ea8c0f..1b0564b279d 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -69,7 +69,13 @@ 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 force = item.value(ctx, vnode);
+          auto fn_or_error = create_function__force_inputs(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));
           if (force) {
             forces.add(linked->vnode()->name(), force.release());
           }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to