[Bf-blender-cvs] [788297480fb] functions: split EmitTarget into EmitTargetBase and TimeSpanEmitTarget

Jacques Lucke noreply at git.blender.org
Fri Jun 28 12:31:09 CEST 2019


Commit: 788297480fb088b4bf9f7b79f1e4580b1b1a2032
Author: Jacques Lucke
Date:   Fri Jun 28 10:53:15 2019 +0200
Branches: functions
https://developer.blender.org/rB788297480fb088b4bf9f7b79f1e4580b1b1a2032

split EmitTarget into EmitTargetBase and TimeSpanEmitTarget

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

M	source/blender/simulations/bparticles/core.cpp
M	source/blender/simulations/bparticles/core.hpp
M	source/blender/simulations/bparticles/emitters.cpp
M	source/blender/simulations/bparticles/simulate.cpp

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

diff --git a/source/blender/simulations/bparticles/core.cpp b/source/blender/simulations/bparticles/core.cpp
index f8f4da0b2f8..e92bf67834e 100644
--- a/source/blender/simulations/bparticles/core.cpp
+++ b/source/blender/simulations/bparticles/core.cpp
@@ -68,12 +68,12 @@ ParticlesBlock &BlockAllocator::get_non_full_block(uint particle_type_id)
 
 EmitterInterface::~EmitterInterface()
 {
-  for (EmitTarget *target : m_targets) {
+  for (TimeSpanEmitTarget *target : m_targets) {
     delete target;
   }
 }
 
-EmitTarget &EmitterInterface::request(uint particle_type_id, uint size)
+TimeSpanEmitTarget &EmitterInterface::request(uint particle_type_id, uint size)
 {
   SmallVector<ParticlesBlock *> blocks;
   SmallVector<Range<uint>> ranges;
@@ -99,14 +99,15 @@ EmitTarget &EmitterInterface::request(uint particle_type_id, uint size)
 
   ParticlesContainer &container = m_block_allocator.particles_state().particle_container(
       particle_type_id);
-  m_targets.append(new EmitTarget(particle_type_id, container.attributes_info(), blocks, ranges));
+  m_targets.append(
+      new TimeSpanEmitTarget(particle_type_id, container.attributes_info(), blocks, ranges));
   return *m_targets.last();
 }
 
 /* EmitTarget
  ******************************************/
 
-void EmitTarget::set_elements(uint index, void *data)
+void EmitTargetBase::set_elements(uint index, void *data)
 {
   AttributeType type = m_attributes_info.type_of(index);
   uint element_size = size_of_attribute_type(type);
@@ -126,7 +127,7 @@ void EmitTarget::set_elements(uint index, void *data)
   }
 }
 
-void EmitTarget::fill_elements(uint index, void *value)
+void EmitTargetBase::fill_elements(uint index, void *value)
 {
   AttributeType type = m_attributes_info.type_of(index);
   uint element_size = size_of_attribute_type(type);
@@ -141,81 +142,81 @@ void EmitTarget::fill_elements(uint index, void *value)
   }
 }
 
-void EmitTarget::set_byte(uint index, ArrayRef<uint8_t> data)
+void EmitTargetBase::set_byte(uint index, ArrayRef<uint8_t> data)
 {
   BLI_assert(data.size() == m_size);
   BLI_assert(m_attributes_info.type_of(index) == AttributeType::Byte);
   this->set_elements(index, (void *)data.begin());
 }
-void EmitTarget::set_float(uint index, ArrayRef<float> data)
+void EmitTargetBase::set_float(uint index, ArrayRef<float> data)
 {
   BLI_assert(data.size() == m_size);
   BLI_assert(m_attributes_info.type_of(index) == AttributeType::Float);
   this->set_elements(index, (void *)data.begin());
 }
-void EmitTarget::set_float3(uint index, ArrayRef<float3> data)
+void EmitTargetBase::set_float3(uint index, ArrayRef<float3> data)
 {
   BLI_assert(data.size() == m_size);
   BLI_assert(m_attributes_info.type_of(index) == AttributeType::Float3);
   this->set_elements(index, (void *)data.begin());
 }
 
-void EmitTarget::set_byte(StringRef name, ArrayRef<uint8_t> data)
+void EmitTargetBase::set_byte(StringRef name, ArrayRef<uint8_t> data)
 {
   uint index = m_attributes_info.attribute_index(name);
   this->set_byte(index, data);
 }
-void EmitTarget::set_float(StringRef name, ArrayRef<float> data)
+void EmitTargetBase::set_float(StringRef name, ArrayRef<float> data)
 {
   uint index = m_attributes_info.attribute_index(name);
   this->set_float(index, data);
 }
-void EmitTarget::set_float3(StringRef name, ArrayRef<float3> data)
+void EmitTargetBase::set_float3(StringRef name, ArrayRef<float3> data)
 {
   uint index = m_attributes_info.attribute_index(name);
   this->set_float3(index, data);
 }
 
-void EmitTarget::fill_byte(uint index, uint8_t value)
+void EmitTargetBase::fill_byte(uint index, uint8_t value)
 {
   this->fill_elements(index, (void *)&value);
 }
 
-void EmitTarget::fill_byte(StringRef name, uint8_t value)
+void EmitTargetBase::fill_byte(StringRef name, uint8_t value)
 {
   uint index = m_attributes_info.attribute_index(name);
   this->fill_byte(index, value);
 }
 
-void EmitTarget::fill_float(uint index, float value)
+void EmitTargetBase::fill_float(uint index, float value)
 {
   this->fill_elements(index, (void *)&value);
 }
 
-void EmitTarget::fill_float(StringRef name, float value)
+void EmitTargetBase::fill_float(StringRef name, float value)
 {
   uint index = m_attributes_info.attribute_index(name);
   this->fill_float(index, value);
 }
 
-void EmitTarget::fill_float3(uint index, float3 value)
+void EmitTargetBase::fill_float3(uint index, float3 value)
 {
   this->fill_elements(index, (void *)&value);
 }
 
-void EmitTarget::fill_float3(StringRef name, float3 value)
+void EmitTargetBase::fill_float3(StringRef name, float3 value)
 {
   uint index = m_attributes_info.attribute_index(name);
   this->fill_float3(index, value);
 }
 
-void EmitTarget::set_birth_moment(float time_factor)
+void TimeSpanEmitTarget::set_birth_moment(float time_factor)
 {
   BLI_assert(time_factor >= 0.0 && time_factor <= 1.0f);
   m_birth_moments.fill(time_factor);
 }
 
-void EmitTarget::set_randomized_birth_moments()
+void TimeSpanEmitTarget::set_randomized_birth_moments()
 {
   for (float &birth_moment : m_birth_moments) {
     birth_moment = (rand() % 10000) / 10000.0f;
diff --git a/source/blender/simulations/bparticles/core.hpp b/source/blender/simulations/bparticles/core.hpp
index ca2b808b8a8..5be647a6d3f 100644
--- a/source/blender/simulations/bparticles/core.hpp
+++ b/source/blender/simulations/bparticles/core.hpp
@@ -86,20 +86,20 @@ class BlockAllocator {
   }
 };
 
-class EmitTarget {
- private:
+class EmitTargetBase {
+ protected:
   uint m_particle_type_id;
   AttributesInfo &m_attributes_info;
   SmallVector<ParticlesBlock *> m_blocks;
   SmallVector<Range<uint>> m_ranges;
-  SmallVector<float> m_birth_moments;
+
   uint m_size = 0;
 
  public:
-  EmitTarget(uint particle_type_id,
-             AttributesInfo &attributes_info,
-             ArrayRef<ParticlesBlock *> blocks,
-             ArrayRef<Range<uint>> ranges)
+  EmitTargetBase(uint particle_type_id,
+                 AttributesInfo &attributes_info,
+                 ArrayRef<ParticlesBlock *> blocks,
+                 ArrayRef<Range<uint>> ranges)
       : m_particle_type_id(particle_type_id),
         m_attributes_info(attributes_info),
         m_blocks(blocks),
@@ -109,10 +109,9 @@ class EmitTarget {
     for (auto range : ranges) {
       m_size += range.size();
     }
-    m_birth_moments = SmallVector<float>(m_size, 1.0f);
   }
 
-  EmitTarget(EmitTarget &other) = delete;
+  EmitTargetBase(EmitTargetBase &other) = delete;
 
   void set_byte(uint index, ArrayRef<uint8_t> data);
   void set_byte(StringRef name, ArrayRef<uint8_t> data);
@@ -128,9 +127,6 @@ class EmitTarget {
   void fill_float3(uint index, float3 value);
   void fill_float3(StringRef name, float3 value);
 
-  void set_birth_moment(float time_factor);
-  void set_randomized_birth_moments();
-
   ArrayRef<ParticlesBlock *> blocks()
   {
     return m_blocks;
@@ -141,11 +137,6 @@ class EmitTarget {
     return m_ranges;
   }
 
-  ArrayRef<float> birth_moments()
-  {
-    return m_birth_moments;
-  }
-
   uint part_amount()
   {
     return m_ranges.size();
@@ -166,10 +157,33 @@ class EmitTarget {
   void fill_elements(uint index, void *value);
 };
 
+class TimeSpanEmitTarget : public EmitTargetBase {
+ private:
+  SmallVector<float> m_birth_moments;
+
+ public:
+  TimeSpanEmitTarget(uint particle_type_id,
+                     AttributesInfo &attributes_info,
+                     ArrayRef<ParticlesBlock *> blocks,
+                     ArrayRef<Range<uint>> ranges)
+      : EmitTargetBase(particle_type_id, attributes_info, blocks, ranges)
+  {
+    m_birth_moments = SmallVector<float>(m_size, 1.0f);
+  }
+
+  ArrayRef<float> birth_moments()
+  {
+    return m_birth_moments;
+  }
+
+  void set_birth_moment(float time_factor);
+  void set_randomized_birth_moments();
+};
+
 class EmitterInterface {
  private:
   BlockAllocator &m_block_allocator;
-  SmallVector<EmitTarget *> m_targets;
+  SmallVector<TimeSpanEmitTarget *> m_targets;
 
  public:
   EmitterInterface(BlockAllocator &allocator) : m_block_allocator(allocator)
@@ -178,12 +192,12 @@ class EmitterInterface {
 
   ~EmitterInterface();
 
-  ArrayRef<EmitTarget *> targets()
+  ArrayRef<TimeSpanEmitTarget *> targets()
   {
     return m_targets;
   }
 
-  EmitTarget &request(uint particle_type_id, uint size);
+  TimeSpanEmitTarget &request(uint particle_type_id, uint size);
 };
 
 struct ParticleSet {
diff --git a/source/blender/simulations/bparticles/emitters.cpp b/source/blender/simulations/bparticles/emitters.cpp
index aaeeb225b04..aa67eb0dfc0 100644
--- a/source/blender/simulations/bparticles/emitters.cpp
+++ b/source/blender/simulations/bparticles/emitters.cpp
@@ -22,7 +22,7 @@ class PointEmitter : public Emitter {
 
   void emit(EmitterInterface &interface) override
   {
-    EmitTarget &target = interface.request(0, 1);
+    auto &target = interface.request(0, 1);
     target.set_float3("Position", {m_point});
     target.set_float3("Velocity", {float3{-1, -1, 0}});
     target.set_birth_moment(1.0f);
@@ -70,7 +70,7 @@ class SurfaceEmitter : public Emitter {
       velocities.append(m_transform.transform_direction(normal * m_normal_velocity));
     }
 
-    EmitTarget &target = interface.request(m_particle_type_id, positions.size());
+    auto &target = interface.request(m_particle_type_id, positions.size());
     target.set_float3("Position", positions);
     target.set_float3("Velocity", velocities);
     target.set_randomized_birth_moments();
@@ -102,7 +102,7 @@ class PathEmitter : public Emitter {
       }
     }
 
-    EmitTarget &target = interface.request(0, positions.size());
+    auto &target = interface.request(0, positions.size());
     target.set_float3("Position", positions);
     target.set_float3("Velocity", SmallVector<float3>(positions.size()));
     target.set_birth_moment(1.0f);
diff --git a/source/blender/simulations/bparticles/simulate.cpp b/source/blender/simulations/bparticles/simulate.cpp
index fd9de872813..ecb28062c6d 100644
--- a/source/blender/simulations/bparticles/simulate.cpp
+++ b/source/blender/simulations/bparticles/simulate.cpp
@@ -504,8 +504,8 @@ BLI_NOINLINE static void emit_new_particles_from_emitter(BlockAllocator &block_a
   EmitterInterface interface(block_allocator);
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list