Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <mail@jlucke.com>2019-07-15 17:54:47 +0300
committerJacques Lucke <mail@jlucke.com>2019-07-15 17:54:47 +0300
commit6d208e318328f223ebef26eea3bdaa1244c30b2d (patch)
tree02c1a018ee98ecac3130cae75543eed42a1076e0 /source/blender/simulations/bparticles/forces.cpp
parent89a8b1f4f5a02c482be42b35bb19e7903a978c29 (diff)
remove indirection
Diffstat (limited to 'source/blender/simulations/bparticles/forces.cpp')
-rw-r--r--source/blender/simulations/bparticles/forces.cpp85
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