[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