[Bf-blender-cvs] [39476c5ce3d] functions: remove boilerplate code for emitters

Jacques Lucke noreply at git.blender.org
Mon Jul 15 18:12:33 CEST 2019


Commit: 39476c5ce3d2edfcbab808dc1d0ab6713978b27a
Author: Jacques Lucke
Date:   Mon Jul 15 15:18:35 2019 +0200
Branches: functions
https://developer.blender.org/rB39476c5ce3d2edfcbab808dc1d0ab6713978b27a

remove boilerplate code for emitters

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

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

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

diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index 7ade517a74b..be901497cf6 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -17,36 +17,19 @@ static float random_float()
   return (rand() % 4096) / 4096.0f;
 }
 
-class MovingPointEmitter : public Emitter {
- private:
-  std::string m_particle_type_name;
-  float3 m_start, m_end;
-  uint m_amount;
-
- public:
-  MovingPointEmitter(StringRef particle_type_name, float3 start, float3 end, uint amount)
-      : m_particle_type_name(particle_type_name.to_std_string()),
-        m_start(start),
-        m_end(end),
-        m_amount(amount)
-  {
-  }
-
-  void emit(EmitterInterface &interface) override
-  {
-    SmallVector<float3> new_positions(m_amount);
-
-    for (uint i = 0; i < m_amount; i++) {
-      float t = i / (float)m_amount;
-      float3 point = float3::interpolate(m_start, m_end, t);
-      new_positions[i] = point;
-    }
+void PointEmitter::emit(EmitterInterface &interface)
+{
+  SmallVector<float3> new_positions(m_amount);
 
-    auto target = interface.particle_allocator().request(m_particle_type_name,
-                                                         new_positions.size());
-    target.set_float3("Position", new_positions);
+  for (uint i = 0; i < m_amount; i++) {
+    float t = i / (float)m_amount;
+    float3 point = float3::interpolate(m_start, m_end, t);
+    new_positions[i] = point;
   }
-};
+
+  auto target = interface.particle_allocator().request(m_particle_type_name, new_positions.size());
+  target.set_float3("Position", new_positions);
+}
 
 static float3 random_point_in_triangle(float3 a, float3 b, float3 c)
 {
@@ -133,12 +116,4 @@ void SurfaceEmitter::emit(EmitterInterface &interface)
   ActionInterface::RunFromEmitter(m_action, target, interface);
 }
 
-std::unique_ptr<Emitter> EMITTER_moving_point(StringRef particle_type_name,
-                                              float3 start,
-                                              float3 end)
-{
-  Emitter *emitter = new MovingPointEmitter(particle_type_name, start, end, 10);
-  return std::unique_ptr<Emitter>(emitter);
-}
-
 }  // namespace BParticles
diff --git a/source/blender/simulations/bparticles/emitters.hpp b/source/blender/simulations/bparticles/emitters.hpp
index f677f751d5c..a88cb2efa62 100644
--- a/source/blender/simulations/bparticles/emitters.hpp
+++ b/source/blender/simulations/bparticles/emitters.hpp
@@ -21,13 +21,12 @@ struct SurfaceEmitter : public Emitter {
   void emit(EmitterInterface &interface) override;
 };
 
-std::unique_ptr<Emitter> EMITTER_mesh_surface(StringRef particle_type_name,
-                                              SharedFunction &compute_inputs_fn,
-                                              WorldState &world_state,
-                                              std::unique_ptr<Action> action);
-
-std::unique_ptr<Emitter> EMITTER_moving_point(StringRef particle_type_name,
-                                              float3 start,
-                                              float3 end);
+struct PointEmitter : public Emitter {
+  std::string m_particle_type_name;
+  float3 m_start, m_end;
+  uint m_amount;
+
+  void emit(EmitterInterface &interface) override;
+};
 
 }  // namespace BParticles
diff --git a/source/blender/simulations/bparticles/inserters.cpp b/source/blender/simulations/bparticles/inserters.cpp
index 1fa0878451e..294aab2013d 100644
--- a/source/blender/simulations/bparticles/inserters.cpp
+++ b/source/blender/simulations/bparticles/inserters.cpp
@@ -255,9 +255,12 @@ static std::unique_ptr<Emitter> BUILD_EMITTER_moving_point(BuildContext &ctx,
   FN_TUPLE_CALL_ALLOC_TUPLES(body, fn_in, fn_out);
   body->call__setup_execution_context(fn_in, fn_out);
 
-  float3 current_point = fn_out.get<float3>(0);
-  float3 last_point = ctx.world_state.get_last_and_store_current(bnode->name, current_point);
-  return EMITTER_moving_point(particle_type_name, last_point, current_point);
+  auto emitter = std::unique_ptr<PointEmitter>(new PointEmitter());
+  emitter->m_particle_type_name = particle_type_name.to_std_string();
+  emitter->m_end = fn_out.get<float3>(0);
+  emitter->m_start = ctx.world_state.get_last_and_store_current(bnode->name, emitter->m_end);
+  emitter->m_amount = 10;
+  return emitter;
 }
 
 BLI_LAZY_INIT(StringMap<ForceFromNodeCallback>, get_force_builders)



More information about the Bf-blender-cvs mailing list