[Bf-blender-cvs] [938bd0edc45] functions: ParticleSet should know the block it is in
Jacques Lucke
noreply at git.blender.org
Thu Jun 27 15:49:48 CEST 2019
Commit: 938bd0edc45dc34d4a39abca7e6515194d9dc964
Author: Jacques Lucke
Date: Thu Jun 27 11:13:48 2019 +0200
Branches: functions
https://developer.blender.org/rB938bd0edc45dc34d4a39abca7e6515194d9dc964
ParticleSet should know the block it is in
===================================================================
M source/blender/simulations/bparticles/core.hpp
M source/blender/simulations/bparticles/simulate.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/core.hpp b/source/blender/simulations/bparticles/core.hpp
index d60af1f87c2..88c50215926 100644
--- a/source/blender/simulations/bparticles/core.hpp
+++ b/source/blender/simulations/bparticles/core.hpp
@@ -27,7 +27,7 @@ using std::unique_ptr;
struct ParticleSet {
private:
- AttributeArrays m_attributes;
+ ParticlesBlock &m_block;
/* Indices into the attribute arrays.
* Invariants:
@@ -36,14 +36,19 @@ struct ParticleSet {
ArrayRef<uint> m_particle_indices;
public:
- ParticleSet(AttributeArrays attributes, ArrayRef<uint> particle_indices)
- : m_attributes(attributes), m_particle_indices(particle_indices)
+ ParticleSet(ParticlesBlock &block, ArrayRef<uint> particle_indices)
+ : m_block(block), m_particle_indices(particle_indices)
{
}
+ ParticlesBlock &block()
+ {
+ return m_block;
+ }
+
AttributeArrays attributes()
{
- return m_attributes;
+ return m_block.slice_all();
}
ArrayRef<uint> indices()
diff --git a/source/blender/simulations/bparticles/simulate.cpp b/source/blender/simulations/bparticles/simulate.cpp
index 3ce7a3a47e7..2a93ce01fdd 100644
--- a/source/blender/simulations/bparticles/simulate.cpp
+++ b/source/blender/simulations/bparticles/simulate.cpp
@@ -110,14 +110,14 @@ BLI_NOINLINE static void find_unfinished_particles(
}
}
-BLI_NOINLINE static void run_actions(AttributeArrays attributes,
+BLI_NOINLINE static void run_actions(ParticlesBlock &block,
ArrayRef<SmallVector<uint>> particles_per_event,
ArrayRef<Event *> events,
ArrayRef<Action *> action_per_event)
{
for (uint event_index = 0; event_index < events.size(); event_index++) {
Action *action = action_per_event[event_index];
- ParticleSet particles(attributes, particles_per_event[event_index]);
+ ParticleSet particles(block, particles_per_event[event_index]);
ActionInterface interface(particles);
action->execute(interface);
@@ -197,7 +197,7 @@ BLI_NOINLINE static void simulate_to_next_event(ParticleSet particles,
SmallVector<SmallVector<uint>> particles_per_event(particle_type.events().size());
find_particles_per_event(particles.indices(), next_event_indices, particles_per_event);
- run_actions(particles.attributes(),
+ run_actions(particles.block(),
particles_per_event,
particle_type.events(),
particle_type.action_per_event());
@@ -227,7 +227,7 @@ BLI_NOINLINE static void simulate_with_max_n_events(
r_unfinished_particle_indices.clear();
r_remaining_durations.clear();
- ParticleSet particles_to_simulate(particles.attributes(), remaining_particle_indices);
+ ParticleSet particles_to_simulate(particles.block(), remaining_particle_indices);
simulate_to_next_event(particles_to_simulate,
durations,
end_time,
@@ -288,7 +288,7 @@ BLI_NOINLINE static void step_individual_particles(ParticleSet particles,
unfinished_particle_indices,
remaining_durations);
- ParticleSet remaining_particles(particles.attributes(), unfinished_particle_indices);
+ ParticleSet remaining_particles(particles.block(), unfinished_particle_indices);
simulate_ignoring_events(remaining_particles, remaining_durations, particle_type);
}
@@ -303,11 +303,10 @@ BLI_NOINLINE static void step_individual_particles_cb(
void *__restrict userdata, const int index, const ParallelRangeTLS *__restrict UNUSED(tls))
{
StepBlocksParallelData *data = (StepBlocksParallelData *)userdata;
- ParticlesBlock *block = data->blocks[index];
+ ParticlesBlock &block = *data->blocks[index];
- uint active_amount = block->active_amount();
- ParticleSet active_particles(block->slice_active(),
- static_number_range_ref().take_front(active_amount));
+ uint active_amount = block.active_amount();
+ ParticleSet active_particles(block, static_number_range_ref().take_front(active_amount));
step_individual_particles(active_particles,
data->all_durations.take_front(active_amount),
data->end_time,
@@ -388,7 +387,7 @@ BLI_NOINLINE static void emit_new_particles_from_emitter(StepDescription &descri
for (uint i = 0; i < targets.size(); i++) {
EmitterTarget &target = targets[i];
- ParticlesBlock *block = blocks[i];
+ ParticlesBlock &block = *blocks[i];
ParticleType &particle_type = *particle_types[i];
AttributeArrays emitted_attributes = target.attributes().take_front(target.emitted_amount());
@@ -405,8 +404,8 @@ BLI_NOINLINE static void emit_new_particles_from_emitter(StepDescription &descri
initial_step_durations.append(time_span.end() - birth_time);
}
- block->active_amount() += target.emitted_amount();
- ParticleSet emitted_particles(emitted_attributes,
+ block.active_amount() += target.emitted_amount();
+ ParticleSet emitted_particles(block,
static_number_range_ref().take_front(emitted_attributes.size()));
step_individual_particles(
emitted_particles, initial_step_durations, time_span.end(), particle_type);
More information about the Bf-blender-cvs
mailing list