[Bf-blender-cvs] [4a9bfa95ed5] functions: centralize function evaluation a bit more
Jacques Lucke
noreply at git.blender.org
Mon Sep 16 16:00:59 CEST 2019
Commit: 4a9bfa95ed5215f176c283fb445ae60d0c6e2004
Author: Jacques Lucke
Date: Mon Sep 16 10:51:08 2019 +0200
Branches: functions
https://developer.blender.org/rB4a9bfa95ed5215f176c283fb445ae60d0c6e2004
centralize function evaluation a bit more
===================================================================
M source/blender/simulations/bparticles/node_frontend.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index 1d6ad0eaea1..ad7606baede 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -115,6 +115,21 @@ class VTreeData {
return fn->body<TupleCallBody>();
}
+ NamedTupleRef compute_inputs(VirtualNode *vnode, ArrayRef<uint> input_indices)
+ {
+ TupleCallBody &body = this->function_body_for_inputs(vnode, input_indices);
+ FN_TUPLE_STACK_ALLOC(fn_in, body.meta_in().ref());
+ FN::Tuple *fn_out = new FN::Tuple(body.meta_out());
+
+ body.call__setup_execution_context(fn_in, *fn_out);
+ auto *name_provider = new FN::FunctionOutputNamesProvider(body.owner());
+
+ m_tuples.append(std::unique_ptr<FN::Tuple>(fn_out));
+ m_name_providers.append(std::unique_ptr<FN::FunctionOutputNamesProvider>(name_provider));
+
+ return NamedTupleRef(fn_out, name_provider);
+ }
+
NamedTupleRef compute_all_inputs(VirtualNode *vnode)
{
TupleCallBody &body = this->function_body_for_all_inputs(vnode);
@@ -457,11 +472,8 @@ static void PARSE_gravity_force(InfluencesCollector &collector,
WorldTransition &UNUSED(world_transition),
VirtualNode *vnode)
{
- FN::TupleCallBody &body = vtree_data.function_body_for_inputs(vnode, {1});
- FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
- body.call__setup_execution_context(fn_in, fn_out);
-
- auto falloff = fn_out.relocate_out<FN::Types::FalloffW>(0);
+ NamedTupleRef inputs = vtree_data.compute_inputs(vnode, {1});
+ auto falloff = inputs.relocate_out<FN::Types::FalloffW>(0, "Falloff");
ParticleFunction *inputs_fn = vtree_data.particle_function_for_all_inputs(vnode);
if (inputs_fn == nullptr) {
@@ -543,11 +555,8 @@ static void PARSE_turbulence_force(InfluencesCollector &collector,
WorldTransition &UNUSED(world_transition),
VirtualNode *vnode)
{
- FN::TupleCallBody &body = vtree_data.function_body_for_inputs(vnode, {2});
- FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
- body.call__setup_execution_context(fn_in, fn_out);
-
- auto falloff = fn_out.relocate_out<FN::Types::FalloffW>(0);
+ NamedTupleRef inputs = vtree_data.compute_inputs(vnode, {2});
+ auto falloff = inputs.relocate_out<FN::Types::FalloffW>(0, "Falloff");
ParticleFunction *inputs_fn = vtree_data.particle_function_for_all_inputs(vnode);
if (inputs_fn == nullptr) {
@@ -568,11 +577,8 @@ static void PARSE_drag_force(InfluencesCollector &collector,
WorldTransition &UNUSED(world_transition),
VirtualNode *vnode)
{
- FN::TupleCallBody &body = vtree_data.function_body_for_inputs(vnode, {1});
- FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
- body.call__setup_execution_context(fn_in, fn_out);
-
- auto falloff = fn_out.relocate_out<FN::Types::FalloffW>(0);
+ NamedTupleRef inputs = vtree_data.compute_inputs(vnode, {1});
+ auto falloff = inputs.relocate_out<FN::Types::FalloffW>(0, "Falloff");
ParticleFunction *inputs_fn = vtree_data.particle_function_for_all_inputs(vnode);
if (inputs_fn == nullptr) {
@@ -581,8 +587,8 @@ static void PARSE_drag_force(InfluencesCollector &collector,
ArrayRef<std::string> system_names = vtree_data.find_target_system_names(
vnode->output(0, "Force"));
- for (const std::string &system_name : system_names) {
+ for (const std::string &system_name : system_names) {
Force *force = new DragForce(inputs_fn, falloff.get_unique_copy());
collector.m_forces.add(system_name, force);
}
@@ -602,12 +608,9 @@ static void PARSE_mesh_collision(InfluencesCollector &collector,
return;
}
- SharedFunction &fn = inputs_fn->function_no_deps();
- TupleCallBody &body = fn->body<TupleCallBody>();
- FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
- body.call__setup_execution_context(fn_in, fn_out);
+ NamedTupleRef inputs = vtree_data.compute_inputs(vnode, {0});
- Object *object = fn_out.relocate_out<ObjectW>(0).ptr();
+ Object *object = inputs.relocate_out<ObjectW>(0, "Object").ptr();
if (object == nullptr || object->type != OB_MESH) {
return;
}
@@ -644,11 +647,9 @@ static void PARSE_mesh_force(InfluencesCollector &collector,
WorldTransition &UNUSED(world_transition),
VirtualNode *vnode)
{
- FN::TupleCallBody &body = vtree_data.function_body_for_inputs(vnode, {0});
- FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
- body.call__setup_execution_context(fn_in, fn_out);
+ NamedTupleRef inputs = vtree_data.compute_inputs(vnode, {0});
- Object *object = fn_out.relocate_out<ObjectW>(0).ptr();
+ Object *object = inputs.relocate_out<ObjectW>(0, "Object").ptr();
if (object == nullptr || object->type != OB_MESH) {
return;
}
More information about the Bf-blender-cvs
mailing list