[Bf-blender-cvs] [b3c93cfe908] functions: initial ParticleAction class
Jacques Lucke
noreply at git.blender.org
Thu Dec 19 15:59:24 CET 2019
Commit: b3c93cfe9084ef103dc0d2bb7a898b0fe60b16a4
Author: Jacques Lucke
Date: Thu Dec 19 14:59:43 2019 +0100
Branches: functions
https://developer.blender.org/rBb3c93cfe9084ef103dc0d2bb7a898b0fe60b16a4
initial ParticleAction class
===================================================================
M source/blender/blenlib/BLI_index_mask.h
M source/blender/simulations/CMakeLists.txt
D source/blender/simulations/bparticles/action_interface.cpp
D 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/emitters.hpp
M source/blender/simulations/bparticles/events.cpp
M source/blender/simulations/bparticles/events.hpp
M source/blender/simulations/bparticles/node_frontend.cpp
M source/blender/simulations/bparticles/offset_handlers.hpp
A source/blender/simulations/bparticles/particle_action.cpp
A source/blender/simulations/bparticles/particle_action.hpp
M source/blender/simulations/bparticles/particle_function.cpp
M source/blender/simulations/bparticles/particle_function.hpp
===================================================================
diff --git a/source/blender/blenlib/BLI_index_mask.h b/source/blender/blenlib/BLI_index_mask.h
index c148aea2944..8a120adb775 100644
--- a/source/blender/blenlib/BLI_index_mask.h
+++ b/source/blender/blenlib/BLI_index_mask.h
@@ -11,6 +11,8 @@ class IndexMask {
ArrayRef<uint> m_indices;
public:
+ IndexMask() = default;
+
IndexMask(ArrayRef<uint> indices) : m_indices(indices)
{
#ifdef DEBUG
diff --git a/source/blender/simulations/CMakeLists.txt b/source/blender/simulations/CMakeLists.txt
index dd2d3ff5b86..f78d6b76ab4 100644
--- a/source/blender/simulations/CMakeLists.txt
+++ b/source/blender/simulations/CMakeLists.txt
@@ -26,8 +26,8 @@ set(SRC
bparticles/forces.cpp
bparticles/actions.hpp
bparticles/actions.cpp
- bparticles/action_interface.hpp
- bparticles/action_interface.cpp
+ bparticles/particle_action.hpp
+ bparticles/particle_action.cpp
bparticles/events.hpp
bparticles/events.cpp
bparticles/emitter_interface.hpp
diff --git a/source/blender/simulations/bparticles/action_interface.cpp b/source/blender/simulations/bparticles/action_interface.cpp
deleted file mode 100644
index 1e172d87aa5..00000000000
--- a/source/blender/simulations/bparticles/action_interface.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "action_interface.hpp"
-
-namespace BParticles {
-
-Action::~Action()
-{
-}
-
-} // namespace BParticles
diff --git a/source/blender/simulations/bparticles/action_interface.hpp b/source/blender/simulations/bparticles/action_interface.hpp
deleted file mode 100644
index 9f19be38f22..00000000000
--- a/source/blender/simulations/bparticles/action_interface.hpp
+++ /dev/null
@@ -1,224 +0,0 @@
-#pragma once
-
-#include "BLI_array_cxx.h"
-
-#include "particle_allocator.hpp"
-#include "emitter_interface.hpp"
-#include "event_interface.hpp"
-#include "offset_handler_interface.hpp"
-
-namespace BParticles {
-
-using BLI::LargeScopedArray;
-using FN::AttributesRefGroup;
-
-class ActionInterface {
- private:
- ParticleAllocator &m_particle_allocator;
- ArrayRef<uint> m_pindices;
- AttributesRef m_attributes;
- AttributesRef m_attribute_offsets;
- ArrayRef<float> m_current_times;
- ArrayRef<float> m_remaining_durations;
-
- public:
- ActionInterface(ParticleAllocator &particle_allocator,
- ArrayRef<uint> pindices,
- AttributesRef attributes,
- AttributesRef attribute_offsets,
- ArrayRef<float> current_times,
- ArrayRef<float> remaining_durations);
-
- ArrayRef<uint> pindices();
- AttributesRef attributes();
- AttributesRef attribute_offsets();
- float remaining_time_in_step(uint pindex);
- ArrayRef<float> remaining_durations();
- ArrayRef<float> current_times();
- void kill(ArrayRef<uint> pindices);
- ParticleAllocator &particle_allocator();
-};
-
-class Action {
- public:
- virtual ~Action() = 0;
-
- virtual void execute(ActionInterface &interface) = 0;
-
- void execute_from_emitter(AttributesRefGroup &new_particles,
- EmitterInterface &emitter_interface);
- void execute_from_event(EventExecuteInterface &event_interface);
- void execute_from_offset_handler(OffsetHandlerInterface &offset_handler_interface);
- void execute_for_subset(ArrayRef<uint> pindices, ActionInterface &action_interface);
- void execute_for_new_particles(AttributesRefGroup &new_particles,
- ActionInterface &action_interface);
- void execute_for_new_particles(AttributesRefGroup &new_particles,
- OffsetHandlerInterface &offset_handler_interface);
-};
-
-/* ActionInterface inline functions
- *******************************************/
-
-inline ActionInterface::ActionInterface(ParticleAllocator &particle_allocator,
- ArrayRef<uint> pindices,
- AttributesRef attributes,
- AttributesRef attribute_offsets,
- ArrayRef<float> current_times,
- ArrayRef<float> remaining_durations)
- : m_particle_allocator(particle_allocator),
- m_pindices(pindices),
- m_attributes(attributes),
- m_attribute_offsets(attribute_offsets),
- m_current_times(current_times),
- m_remaining_durations(remaining_durations)
-{
-}
-
-inline void Action::execute_from_emitter(AttributesRefGroup &new_particles,
- EmitterInterface &emitter_interface)
-{
- AttributesInfo info;
- std::array<void *, 0> buffers;
-
- uint offset = 0;
- for (AttributesRef attributes : new_particles) {
- uint range_size = attributes.size();
- IndexRange range(offset, range_size);
- offset += range_size;
-
- AttributesRef offsets(info, buffers, range_size);
- LargeScopedArray<float> durations(range_size);
- durations.fill(0);
-
- ActionInterface action_interface(emitter_interface.particle_allocator(),
- IndexRange(range_size).as_array_ref(),
- attributes,
- offsets,
- attributes.get<float>("Birth Time"),
- durations);
- this->execute(action_interface);
- }
-}
-
-inline void Action::execute_from_event(EventExecuteInterface &event_interface)
-{
- ActionInterface action_interface(event_interface.particle_allocator(),
- event_interface.pindices(),
- event_interface.attributes(),
- event_interface.attribute_offsets(),
- event_interface.current_times(),
- event_interface.remaining_durations());
- this->execute(action_interface);
-}
-
-inline void Action::execute_from_offset_handler(OffsetHandlerInterface &offset_handler_interface)
-{
- LargeScopedArray<float> current_times(offset_handler_interface.array_size());
- for (uint pindex : offset_handler_interface.pindices()) {
- current_times[pindex] = offset_handler_interface.time_span(pindex).start();
- }
-
- ActionInterface action_interface(offset_handler_interface.particle_allocator(),
- offset_handler_interface.pindices(),
- offset_handler_interface.attributes(),
- offset_handler_interface.attribute_offsets(),
- current_times,
- offset_handler_interface.remaining_durations());
- this->execute(action_interface);
-}
-
-inline void Action::execute_for_subset(ArrayRef<uint> pindices, ActionInterface &action_interface)
-{
- ActionInterface sub_interface(action_interface.particle_allocator(),
- pindices,
- action_interface.attributes(),
- action_interface.attribute_offsets(),
- action_interface.current_times(),
- action_interface.remaining_durations());
- this->execute(sub_interface);
-}
-
-inline void Action::execute_for_new_particles(AttributesRefGroup &new_particles,
- ActionInterface &action_interface)
-{
- AttributesInfo info;
- std::array<void *, 0> buffers;
-
- uint offset = 0;
- for (AttributesRef attributes : new_particles) {
- uint range_size = attributes.size();
- offset += range_size;
-
- AttributesRef offsets(info, buffers, range_size);
- LargeScopedArray<float> durations(range_size);
- durations.fill(0);
-
- ActionInterface new_interface(action_interface.particle_allocator(),
- IndexRange(range_size).as_array_ref(),
- attributes,
- offsets,
- attributes.get<float>("Birth Time"),
- durations);
- this->execute(new_interface);
- }
-}
-
-inline void Action::execute_for_new_particles(AttributesRefGroup &new_particles,
- OffsetHandlerInterface &offset_handler_interface)
-{
- AttributesInfo info;
- std::array<void *, 0> buffers;
-
- for (AttributesRef attributes : new_particles) {
- uint range_size = attributes.size();
-
- AttributesRef offsets(info, buffers, range_size);
- LargeScopedArray<float> durations(range_size);
- durations.fill(0);
-
- ActionInterface new_interface(offset_handler_interface.particle_allocator(),
- IndexRange(range_size).as_array_ref(),
- attributes,
- offsets,
- attributes.get<float>("Birth Time"),
- durations);
- this->execute(new_interface);
- }
-}
-
-inline ArrayRef<uint> ActionInterface::pindices()
-{
- return m_pindices;
-}
-
-inline AttributesRef ActionInterface::attributes()
-{
- return m_attributes;
-}
-
-inline AttributesRef ActionInterface::attribute_offsets()
-{
- return m_attribute_offsets;
-}
-
-inline float ActionInterface::remaining_time_in_step(uint pindex)
-{
- return m_remaining_durations[pindex];
-}
-
-inline ArrayRef<float> ActionInterface::remaining_durations()
-{
- return m_remaining_durations;
-}
-
-inline ArrayRef<float> ActionInterface::current_times()
-{
- return m_current_times;
-}
-
-inline ParticleAllocator &ActionInterface::particle_allocator()
-{
- return m_particle_allocator;
-}
-
-} // namespace BParticles
diff --git a/source/blender/simulations/bparticles/actions.cpp b/source/blender/simulations/bparticles/actions.cpp
index 6a97dc7bc53..b6e72ce642c 100644
--- a/source/blender/simulations/bparticles/actions.cpp
+++ b/source/blender/simulations/bparticles/actions.cpp
@@ -6,41 +6,41 @@ namespace BParticles {
using BLI::rgba_f;
-void ActionSequence::execute(ActionInterface &interface)
+void ActionSequence::execute(ParticleActionContext &context)
{
for (auto &action : m_actions) {
- ac
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list