[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