[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