[Bf-blender-cvs] [efa9b1cc412] functions: use error handling for event nodes

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


Commit: efa9b1cc412cc26bdfcad9a12a5bd0b3ed6c46c4
Author: Jacques Lucke
Date:   Wed Jul 24 11:47:37 2019 +0200
Branches: functions
https://developer.blender.org/rBefa9b1cc412cc26bdfcad9a12a5bd0b3ed6c46c4

use error handling for event nodes

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

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

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

diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index 4c756187a25..4aee2a77ea6 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -134,6 +134,22 @@ static ValueOrError<SharedFunction> create_function__force_inputs(VirtualNode *f
   return fn;
 }
 
+static ValueOrError<SharedFunction> create_function__event_inputs(VirtualNode *event_vnode,
+                                                                  VTreeDataGraph &data_graph)
+{
+  Vector<DFGraphSocket> sockets_to_compute = find_input_data_sockets(event_vnode, data_graph);
+  auto dependencies = data_graph.find_placeholder_dependencies(sockets_to_compute);
+
+  if (dependencies.size() > 0) {
+    return BLI_ERROR_CREATE("Event inputs cannot have dependencies currently.");
+  }
+
+  FunctionGraph fgraph(data_graph.graph(), {}, sockets_to_compute);
+  SharedFunction fn = fgraph.new_function(event_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)>;
@@ -254,14 +270,24 @@ static std::unique_ptr<Event> BUILD_EVENT_mesh_collision(BuildContext &ctx, Virt
 
 static std::unique_ptr<Event> BUILD_EVENT_age_reached(BuildContext &ctx, VirtualNode *vnode)
 {
-  SharedFunction fn = create_function_for_data_inputs(vnode, ctx.data_graph);
+  auto fn_or_error = create_function__event_inputs(vnode, ctx.data_graph);
+  if (fn_or_error.is_error()) {
+    return {};
+  }
+
+  SharedFunction fn = fn_or_error.extract_value();
   auto action = build_action(ctx, vnode->output(0));
   return std::unique_ptr<Event>(new AgeReachedEvent(vnode->name(), fn, std::move(action)));
 }
 
 static std::unique_ptr<Event> BUILD_EVENT_close_by_points(BuildContext &ctx, VirtualNode *vnode)
 {
-  SharedFunction fn = create_function_for_data_inputs(vnode, ctx.data_graph);
+  auto fn_or_error = create_function__event_inputs(vnode, ctx.data_graph);
+  if (fn_or_error.is_error()) {
+    return {};
+  }
+
+  SharedFunction fn = fn_or_error.extract_value();
   auto action = build_action(ctx, vnode->output(0));
 
   TupleCallBody *body = fn->body<TupleCallBody>();



More information about the Bf-blender-cvs mailing list