[Bf-blender-cvs] [7e4c4897784] functions: use particle function for gravity force

Jacques Lucke noreply at git.blender.org
Thu Jul 25 15:10:31 CEST 2019


Commit: 7e4c48977846b7eb18d1ad81d87236baa6356e63
Author: Jacques Lucke
Date:   Thu Jul 25 10:01:10 2019 +0200
Branches: functions
https://developer.blender.org/rB7e4c48977846b7eb18d1ad81d87236baa6356e63

use particle function for gravity force

===================================================================

M	source/blender/simulations/bparticles/forces.cpp
M	source/blender/simulations/bparticles/forces.hpp
M	source/blender/simulations/bparticles/inserters.cpp

===================================================================

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)



More information about the Bf-blender-cvs mailing list