[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