[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