diff options
author | Jacques Lucke <mail@jlucke.com> | 2019-07-25 11:01:10 +0300 |
---|---|---|
committer | Jacques Lucke <mail@jlucke.com> | 2019-07-25 11:01:10 +0300 |
commit | 7e4c48977846b7eb18d1ad81d87236baa6356e63 (patch) | |
tree | 2d85a3d852796a93f4b321553f35d45fcb058b4b /source/blender/simulations | |
parent | c92dd7bed6e0deeeef17a70cff38cc832706f22c (diff) |
use particle function for gravity force
Diffstat (limited to 'source/blender/simulations')
-rw-r--r-- | source/blender/simulations/bparticles/forces.cpp | 14 | ||||
-rw-r--r-- | source/blender/simulations/bparticles/forces.hpp | 7 | ||||
-rw-r--r-- | source/blender/simulations/bparticles/inserters.cpp | 2 |
3 files changed, 7 insertions, 16 deletions
diff --git a/source/blender/simulations/bparticles/forces.cpp b/source/blender/simulations/bparticles/forces.cpp index 9101e7d9271..f28fb478785 100644 --- a/source/blender/simulations/bparticles/forces.cpp +++ b/source/blender/simulations/bparticles/forces.cpp @@ -13,17 +13,11 @@ void GravityForce::add_force(ForceInterface &interface) ParticlesBlock &block = interface.block(); ArrayRef<float3> destination = interface.combined_destination(); - FN_TUPLE_CALL_ALLOC_TUPLES(m_compute_acceleration_body, fn_in, fn_out); - - FN::ExecutionStack stack; - FN::ExecutionContext execution_context(stack); - - m_compute_acceleration_body.call(fn_in, fn_out, execution_context); - - float3 acceleration = fn_out.get<float3>(0); + auto inputs = m_compute_inputs.compute(interface); - for (uint i = 0; i < block.active_amount(); i++) { - destination[i] += acceleration; + for (uint pindex = 0; pindex < block.active_amount(); pindex++) { + float3 acceleration = inputs->get<float3>("Direction", 0, pindex); + destination[pindex] += acceleration; } }; diff --git a/source/blender/simulations/bparticles/forces.hpp b/source/blender/simulations/bparticles/forces.hpp index 7460a1877c2..83807f26cee 100644 --- a/source/blender/simulations/bparticles/forces.hpp +++ b/source/blender/simulations/bparticles/forces.hpp @@ -14,13 +14,10 @@ class Force { class GravityForce : public Force { private: - SharedFunction m_compute_acceleration_fn; - TupleCallBody &m_compute_acceleration_body; + ParticleFunction m_compute_inputs; public: - GravityForce(SharedFunction &compute_acceleration_fn) - : m_compute_acceleration_fn(compute_acceleration_fn), - m_compute_acceleration_body(m_compute_acceleration_fn->body<TupleCallBody>()) + GravityForce(ParticleFunction compute_inputs) : m_compute_inputs(std::move(compute_inputs)) { } diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp index 4e53f85ccd7..be37daadbc1 100644 --- a/source/blender/simulations/bparticles/inserters.cpp +++ b/source/blender/simulations/bparticles/inserters.cpp @@ -232,7 +232,7 @@ static std::unique_ptr<Force> BUILD_FORCE_gravity(BuildContext &ctx, VirtualNode } SharedFunction fn = fn_or_error.extract_value(); - return std::unique_ptr<Force>(new GravityForce(fn)); + return std::unique_ptr<Force>(new GravityForce(ParticleFunction(fn))); } static std::unique_ptr<Force> BUILD_FORCE_turbulence(BuildContext &ctx, VirtualNode *vnode) |