[Bf-blender-cvs] [5de6dca2f5e] functions: create function to compute force inputs

Jacques Lucke noreply at git.blender.org
Wed Jul 24 19:11:33 CEST 2019


Commit: 5de6dca2f5e44a4f1b4421cf69f6639ab1a27fab
Author: Jacques Lucke
Date:   Wed Jul 24 11:43:28 2019 +0200
Branches: functions
https://developer.blender.org/rB5de6dca2f5e44a4f1b4421cf69f6639ab1a27fab

create function to compute force inputs

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

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

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

diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index 022fb562230..4c756187a25 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -118,6 +118,22 @@ static ValueOrError<SharedFunction> create_function__emitter_inputs(VirtualNode
   return fn;
 }
 
+static ValueOrError<SharedFunction> create_function__force_inputs(VirtualNode *force_vnode,
+                                                                  VTreeDataGraph &data_graph)
+{
+  Vector<DFGraphSocket> sockets_to_compute = find_input_data_sockets(force_vnode, data_graph);
+  auto dependencies = data_graph.find_placeholder_dependencies(sockets_to_compute);
+
+  if (dependencies.size() > 0) {
+    return BLI_ERROR_CREATE("Force inputs cannot have dependencies currently.");
+  }
+
+  FunctionGraph fgraph(data_graph.graph(), {}, sockets_to_compute);
+  SharedFunction fn = fgraph.new_function(force_vnode->name());
+  FN::fgraph_add_TupleCallBody(fn, fgraph);
+  return fn;
+}
+
 static std::unique_ptr<Action> build_action(BuildContext &ctx, VirtualSocket *start);
 using ActionFromNodeCallback =
     std::function<std::unique_ptr<Action>(BuildContext &ctx, VirtualNode *vnode)>;
@@ -204,13 +220,23 @@ static std::unique_ptr<Action> build_action(BuildContext &ctx, VirtualSocket *st
 
 static std::unique_ptr<Force> BUILD_FORCE_gravity(BuildContext &ctx, VirtualNode *vnode)
 {
-  SharedFunction fn = create_function_for_data_inputs(vnode, ctx.data_graph);
+  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(fn));
 }
 
 static std::unique_ptr<Force> BUILD_FORCE_turbulence(BuildContext &ctx, VirtualNode *vnode)
 {
-  SharedFunction fn = create_function_for_data_inputs(vnode, ctx.data_graph);
+  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(fn));
 }



More information about the Bf-blender-cvs mailing list