[Bf-blender-cvs] [6c3afa78010] functions: create particle function for force inputs more centrally
Jacques Lucke
noreply at git.blender.org
Thu Jul 25 15:10:33 CEST 2019
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());
}
More information about the Bf-blender-cvs
mailing list