[Bf-blender-cvs] [f2d3539cb56] functions: new particle function input providers abstraction

Jacques Lucke noreply at git.blender.org
Mon Jul 29 17:57:25 CEST 2019


Commit: f2d3539cb56bfd095b94ebb0966b72f39dfb85c1
Author: Jacques Lucke
Date:   Mon Jul 29 13:30:55 2019 +0200
Branches: functions
https://developer.blender.org/rBf2d3539cb56bfd095b94ebb0966b72f39dfb85c1

new particle function input providers abstraction

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

M	source/blender/simulations/bparticles/action_interface.cpp
M	source/blender/simulations/bparticles/action_interface.hpp
M	source/blender/simulations/bparticles/actions.cpp
M	source/blender/simulations/bparticles/actions.hpp
M	source/blender/simulations/bparticles/events.cpp
M	source/blender/simulations/bparticles/events.hpp
M	source/blender/simulations/bparticles/forces.cpp
M	source/blender/simulations/bparticles/forces.hpp
M	source/blender/simulations/bparticles/inserters.cpp
M	source/blender/simulations/bparticles/inserters.hpp
M	source/blender/simulations/bparticles/offset_handlers.cpp
M	source/blender/simulations/bparticles/offset_handlers.hpp
M	source/blender/simulations/bparticles/particle_function.cpp
M	source/blender/simulations/bparticles/particle_function.hpp
M	source/blender/simulations/bparticles/particle_function_builder.cpp
M	source/blender/simulations/bparticles/particle_function_builder.hpp

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

diff --git a/source/blender/simulations/bparticles/action_interface.cpp b/source/blender/simulations/bparticles/action_interface.cpp
index 1e172d87aa5..07b57cb3483 100644
--- a/source/blender/simulations/bparticles/action_interface.cpp
+++ b/source/blender/simulations/bparticles/action_interface.cpp
@@ -2,6 +2,10 @@
 
 namespace BParticles {
 
+ActionContext::~ActionContext()
+{
+}
+
 Action::~Action()
 {
 }
diff --git a/source/blender/simulations/bparticles/action_interface.hpp b/source/blender/simulations/bparticles/action_interface.hpp
index 989b2eba555..2ea5b7da668 100644
--- a/source/blender/simulations/bparticles/action_interface.hpp
+++ b/source/blender/simulations/bparticles/action_interface.hpp
@@ -13,18 +13,7 @@ using FN::TupleCallBody;
 
 class ActionContext {
  public:
-  struct ContextArray {
-    void *buffer = nullptr;
-    uint stride = 0;
-
-    ContextArray() = default;
-    template<typename T>
-    ContextArray(ArrayRef<T> array) : buffer((void *)array.begin()), stride(sizeof(T))
-    {
-    }
-  };
-
-  virtual ContextArray get_context_array(StringRef name) = 0;
+  virtual ~ActionContext();
 };
 
 class ActionInterface {
@@ -93,10 +82,6 @@ inline ActionInterface::ActionInterface(ParticleAllocator &particle_allocator,
 }
 
 class EmptyEventInfo : public ActionContext {
-  ContextArray get_context_array(StringRef UNUSED(name))
-  {
-    return {};
-  }
 };
 
 inline void Action::execute_from_emitter(ParticleSets &particle_sets,
diff --git a/source/blender/simulations/bparticles/actions.cpp b/source/blender/simulations/bparticles/actions.cpp
index 17d8cc3777e..1a633f1e643 100644
--- a/source/blender/simulations/bparticles/actions.cpp
+++ b/source/blender/simulations/bparticles/actions.cpp
@@ -15,7 +15,7 @@ void ChangeDirectionAction::execute(ActionInterface &interface)
   auto position_offsets = interface.attribute_offsets().try_get_float3("Position");
   auto velocity_offsets = interface.attribute_offsets().try_get_float3("Velocity");
 
-  auto inputs = m_compute_inputs.compute(interface);
+  auto inputs = m_compute_inputs->compute(interface);
 
   for (uint pindex : particles.pindices()) {
     float3 direction = inputs->get<float3>("Direction", 0, pindex);
@@ -60,7 +60,7 @@ void ExplodeAction::execute(ActionInterface &interface)
   Vector<float3> new_velocities;
   Vector<float> new_birth_times;
 
-  auto inputs = m_compute_inputs.compute(interface);
+  auto inputs = m_compute_inputs->compute(interface);
 
   for (uint pindex : particles.pindices()) {
     uint parts_amount = std::max(0, inputs->get<int>("Amount", 0, pindex));
@@ -88,7 +88,7 @@ void ConditionAction::execute(ActionInterface &interface)
 {
   ParticleSet particles = interface.particles();
 
-  auto inputs = m_compute_inputs.compute(interface);
+  auto inputs = m_compute_inputs->compute(interface);
 
   Vector<uint> true_pindices, false_pindices;
   for (uint pindex : particles.pindices()) {
diff --git a/source/blender/simulations/bparticles/actions.hpp b/source/blender/simulations/bparticles/actions.hpp
index 088ca8e1498..40656929120 100644
--- a/source/blender/simulations/bparticles/actions.hpp
+++ b/source/blender/simulations/bparticles/actions.hpp
@@ -15,11 +15,12 @@ class KillAction : public Action {
 
 class ChangeDirectionAction : public Action {
  private:
-  ParticleFunction m_compute_inputs;
+  std::unique_ptr<ParticleFunction> m_compute_inputs;
   std::unique_ptr<Action> m_post_action;
 
  public:
-  ChangeDirectionAction(ParticleFunction compute_inputs, std::unique_ptr<Action> post_action)
+  ChangeDirectionAction(std::unique_ptr<ParticleFunction> compute_inputs,
+                        std::unique_ptr<Action> post_action)
       : m_compute_inputs(std::move(compute_inputs)), m_post_action(std::move(post_action))
   {
   }
@@ -30,12 +31,12 @@ class ChangeDirectionAction : public Action {
 class ExplodeAction : public Action {
  private:
   std::string m_new_particle_name;
-  ParticleFunction m_compute_inputs;
+  std::unique_ptr<ParticleFunction> m_compute_inputs;
   std::unique_ptr<Action> m_post_action;
 
  public:
   ExplodeAction(StringRef new_particle_name,
-                ParticleFunction compute_inputs,
+                std::unique_ptr<ParticleFunction> compute_inputs,
                 std::unique_ptr<Action> post_action)
       : m_new_particle_name(new_particle_name.to_std_string()),
         m_compute_inputs(std::move(compute_inputs)),
@@ -48,11 +49,11 @@ class ExplodeAction : public Action {
 
 class ConditionAction : public Action {
  private:
-  ParticleFunction m_compute_inputs;
+  std::unique_ptr<ParticleFunction> m_compute_inputs;
   std::unique_ptr<Action> m_true_action, m_false_action;
 
  public:
-  ConditionAction(ParticleFunction compute_inputs,
+  ConditionAction(std::unique_ptr<ParticleFunction> compute_inputs,
                   std::unique_ptr<Action> true_action,
                   std::unique_ptr<Action> false_action)
       : m_compute_inputs(std::move(compute_inputs)),
diff --git a/source/blender/simulations/bparticles/events.cpp b/source/blender/simulations/bparticles/events.cpp
index f1fa082c1df..30c6d9c83ef 100644
--- a/source/blender/simulations/bparticles/events.cpp
+++ b/source/blender/simulations/bparticles/events.cpp
@@ -18,7 +18,7 @@ void AgeReachedEvent::filter(EventFilterInterface &interface)
 
   float end_time = interface.end_time();
 
-  auto inputs = m_compute_inputs.compute(interface);
+  auto inputs = m_compute_inputs->compute(interface);
 
   for (uint pindex : particles.pindices()) {
     if (was_activated_before[pindex]) {
diff --git a/source/blender/simulations/bparticles/events.hpp b/source/blender/simulations/bparticles/events.hpp
index b4a2ea659a5..58793741f59 100644
--- a/source/blender/simulations/bparticles/events.hpp
+++ b/source/blender/simulations/bparticles/events.hpp
@@ -19,12 +19,12 @@ using BLI::float4x4;
 class AgeReachedEvent : public Event {
  private:
   std::string m_identifier;
-  ParticleFunction m_compute_inputs;
+  std::unique_ptr<ParticleFunction> m_compute_inputs;
   std::unique_ptr<Action> m_action;
 
  public:
   AgeReachedEvent(StringRef identifier,
-                  ParticleFunction compute_inputs,
+                  std::unique_ptr<ParticleFunction> compute_inputs,
                   std::unique_ptr<Action> action)
       : m_identifier(identifier.to_std_string()),
         m_compute_inputs(std::move(compute_inputs)),
@@ -46,12 +46,9 @@ class CollisionEventInfo : public ActionContext {
   {
   }
 
-  ContextArray get_context_array(StringRef name) override
+  ArrayRef<float3> normals()
   {
-    if (name == "Normal") {
-      return m_normals;
-    }
-    return {};
+    return m_normals;
   }
 };
 
diff --git a/source/blender/simulations/bparticles/forces.cpp b/source/blender/simulations/bparticles/forces.cpp
index f28fb478785..d5b8a9d3c9a 100644
--- a/source/blender/simulations/bparticles/forces.cpp
+++ b/source/blender/simulations/bparticles/forces.cpp
@@ -13,7 +13,7 @@ void GravityForce::add_force(ForceInterface &interface)
   ParticlesBlock &block = interface.block();
   ArrayRef<float3> destination = interface.combined_destination();
 
-  auto inputs = m_compute_inputs.compute(interface);
+  auto inputs = m_compute_inputs->compute(interface);
 
   for (uint pindex = 0; pindex < block.active_amount(); pindex++) {
     float3 acceleration = inputs->get<float3>("Direction", 0, pindex);
@@ -28,7 +28,7 @@ void TurbulenceForce::add_force(ForceInterface &interface)
 
   auto positions = block.attributes().get_float3("Position");
 
-  auto inputs = m_compute_inputs.compute(interface);
+  auto inputs = m_compute_inputs->compute(interface);
 
   for (uint pindex = 0; pindex < block.active_amount(); pindex++) {
     float3 pos = positions[pindex];
diff --git a/source/blender/simulations/bparticles/forces.hpp b/source/blender/simulations/bparticles/forces.hpp
index 83807f26cee..1806713752d 100644
--- a/source/blender/simulations/bparticles/forces.hpp
+++ b/source/blender/simulations/bparticles/forces.hpp
@@ -14,10 +14,11 @@ class Force {
 
 class GravityForce : public Force {
  private:
-  ParticleFunction m_compute_inputs;
+  std::unique_ptr<ParticleFunction> m_compute_inputs;
 
  public:
-  GravityForce(ParticleFunction compute_inputs) : m_compute_inputs(std::move(compute_inputs))
+  GravityForce(std::unique_ptr<ParticleFunction> compute_inputs)
+      : m_compute_inputs(std::move(compute_inputs))
   {
   }
 
@@ -26,10 +27,11 @@ class GravityForce : public Force {
 
 class TurbulenceForce : public Force {
  private:
-  ParticleFunction m_compute_inputs;
+  std::unique_ptr<ParticleFunction> m_compute_inputs;
 
  public:
-  TurbulenceForce(ParticleFunction compute_inputs) : m_compute_inputs(std::move(compute_inputs))
+  TurbulenceForce(std::unique_ptr<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 dc9d74b1773..8f8ffda95ee 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -50,20 +50,22 @@ using ActionFromNodeCallback =
     std::function<std::unique_ptr<Action>(BuildContext &ctx,
                                           VirtualSocket *start,
                                           VirtualSocket *trigger,
-                                          ParticleFunction compute_inputs_fn)>;
+                                          std::unique_ptr<ParticleFunction> compute_inputs_fn)>;
 
-static std::unique_ptr<Action> BUILD_ACTION_kill(BuildContext &UNUSED(ctx),
-                                                 VirtualSocket *UNUSED(start),
-                                                 VirtualSocket *UNUSED(trigger),
-                                                 ParticleFunction UNUSED(compute_inputs_fn))
+static std::unique_ptr<Action> BUILD_ACTION_kill(
+    BuildContext &UNUSED(ctx),
+    VirtualSocket *UNUSED(start),
+    VirtualSocket *UNUSED(trigger),
+    std::unique_ptr<ParticleFunction> UNUSED(compute_inputs_fn))
 {
   return std::unique_ptr<Action>(new KillAction());
 }
 
-static std::unique_ptr<Action> BUILD_A

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list