diff options
author | Jacques Lucke <mail@jlucke.com> | 2019-07-15 17:54:47 +0300 |
---|---|---|
committer | Jacques Lucke <mail@jlucke.com> | 2019-07-15 17:54:47 +0300 |
commit | 6d208e318328f223ebef26eea3bdaa1244c30b2d (patch) | |
tree | 02c1a018ee98ecac3130cae75543eed42a1076e0 /source/blender/simulations/bparticles/forces.cpp | |
parent | 89a8b1f4f5a02c482be42b35bb19e7903a978c29 (diff) |
remove indirection
Diffstat (limited to 'source/blender/simulations/bparticles/forces.cpp')
-rw-r--r-- | source/blender/simulations/bparticles/forces.cpp | 85 |
1 files changed, 24 insertions, 61 deletions
diff --git a/source/blender/simulations/bparticles/forces.cpp b/source/blender/simulations/bparticles/forces.cpp index d1ffcdd4785..28d00e9355d 100644 --- a/source/blender/simulations/bparticles/forces.cpp +++ b/source/blender/simulations/bparticles/forces.cpp @@ -8,77 +8,40 @@ Force::~Force() { } -class GravityForce : public Force { - private: - SharedFunction m_compute_acceleration_fn; - TupleCallBody *m_compute_acceleration_body; - - public: - GravityForce(SharedFunction &compute_acceleration_fn) - : m_compute_acceleration_fn(compute_acceleration_fn) - { - m_compute_acceleration_body = m_compute_acceleration_fn->body<TupleCallBody>(); - } - - void add_force(ParticlesBlock &block, ArrayRef<float3> r_force) override - { - 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); +void GravityForce::add_force(ParticlesBlock &block, ArrayRef<float3> r_force) +{ + FN_TUPLE_CALL_ALLOC_TUPLES(m_compute_acceleration_body, fn_in, fn_out); - float3 acceleration = fn_out.get<float3>(0); + FN::ExecutionStack stack; + FN::ExecutionContext execution_context(stack); - for (uint i = 0; i < block.active_amount(); i++) { - r_force[i] += acceleration; - } - }; -}; + m_compute_acceleration_body->call(fn_in, fn_out, execution_context); -class TurbulenceForce : public Force { - private: - SharedFunction m_compute_strength_fn; - TupleCallBody *m_compute_strength_body; + float3 acceleration = fn_out.get<float3>(0); - public: - TurbulenceForce(SharedFunction &compute_strength_fn) : m_compute_strength_fn(compute_strength_fn) - { - m_compute_strength_body = m_compute_strength_fn->body<TupleCallBody>(); + for (uint i = 0; i < block.active_amount(); i++) { + r_force[i] += acceleration; } +}; - void add_force(ParticlesBlock &block, ArrayRef<float3> r_force) override - { - auto positions = block.attributes().get_float3("Position"); +void TurbulenceForce::add_force(ParticlesBlock &block, ArrayRef<float3> r_force) +{ + auto positions = block.attributes().get_float3("Position"); - FN_TUPLE_CALL_ALLOC_TUPLES(m_compute_strength_body, fn_in, fn_out); - FN::ExecutionStack stack; - FN::ExecutionContext execution_context(stack); - m_compute_strength_body->call(fn_in, fn_out, execution_context); + FN_TUPLE_CALL_ALLOC_TUPLES(m_compute_strength_body, fn_in, fn_out); + FN::ExecutionStack stack; + FN::ExecutionContext execution_context(stack); + m_compute_strength_body->call(fn_in, fn_out, execution_context); - float3 strength = fn_out.get<float3>(0); + float3 strength = fn_out.get<float3>(0); - for (uint pindex = 0; pindex < block.active_amount(); pindex++) { - float3 pos = positions[pindex]; - float x = (BLI_gNoise(0.5f, pos.x, pos.y, pos.z + 1000.0f, false, 1) - 0.5f) * strength.x; - float y = (BLI_gNoise(0.5f, pos.x, pos.y + 1000.0f, pos.z, false, 1) - 0.5f) * strength.y; - float z = (BLI_gNoise(0.5f, pos.x + 1000.0f, pos.y, pos.z, false, 1) - 0.5f) * strength.z; - r_force[pindex] += {x, y, z}; - } + for (uint pindex = 0; pindex < block.active_amount(); pindex++) { + float3 pos = positions[pindex]; + float x = (BLI_gNoise(0.5f, pos.x, pos.y, pos.z + 1000.0f, false, 1) - 0.5f) * strength.x; + float y = (BLI_gNoise(0.5f, pos.x, pos.y + 1000.0f, pos.z, false, 1) - 0.5f) * strength.y; + float z = (BLI_gNoise(0.5f, pos.x + 1000.0f, pos.y, pos.z, false, 1) - 0.5f) * strength.z; + r_force[pindex] += {x, y, z}; } -}; - -std::unique_ptr<Force> FORCE_gravity(SharedFunction &compute_acceleration_fn) -{ - Force *force = new GravityForce(compute_acceleration_fn); - return std::unique_ptr<Force>(force); -} - -std::unique_ptr<Force> FORCE_turbulence(SharedFunction &compute_strength_fn) -{ - Force *force = new TurbulenceForce(compute_strength_fn); - return std::unique_ptr<Force>(force); } } // namespace BParticles |