[Bf-blender-cvs] [3be92ce31bf] functions: function to simulate a block
Jacques Lucke
noreply at git.blender.org
Fri Jun 28 16:43:16 CEST 2019
Commit: 3be92ce31bfa847b56dc51002597cd6450a8a81e
Author: Jacques Lucke
Date: Fri Jun 28 16:41:18 2019 +0200
Branches: functions
https://developer.blender.org/rB3be92ce31bfa847b56dc51002597cd6450a8a81e
function to simulate a block
===================================================================
M source/blender/simulations/bparticles/simulate.cpp
===================================================================
diff --git a/source/blender/simulations/bparticles/simulate.cpp b/source/blender/simulations/bparticles/simulate.cpp
index 81ea59a5429..b756684733b 100644
--- a/source/blender/simulations/bparticles/simulate.cpp
+++ b/source/blender/simulations/bparticles/simulate.cpp
@@ -344,6 +344,19 @@ BLI_NOINLINE static void step_particle_set(BlockAllocator &block_allocator,
apply_remaining_offsets(remaining_particles, ideal_offsets);
}
+BLI_NOINLINE static void simulate_block(BlockAllocator &block_allocator,
+ ParticlesBlock &block,
+ ParticleType &particle_type,
+ ArrayRef<float> durations,
+ float end_time)
+{
+ step_particle_set(block_allocator,
+ ParticleSet(block, static_number_range_ref(0, block.active_amount())),
+ durations,
+ end_time,
+ particle_type);
+}
+
class BlockAllocators {
private:
ParticlesState &m_state;
@@ -412,23 +425,20 @@ BLI_NOINLINE static void simulate_block_time_span_cb(void *__restrict userdata,
const ParallelRangeTLS *__restrict tls)
{
SimulateTimeSpanData *data = (SimulateTimeSpanData *)userdata;
- ParticlesBlock &block = *data->blocks[index];
BlockAllocator &block_allocator = data->block_allocators.get_threadlocal_allocator(
tls->thread_id);
+ ParticlesBlock &block = *data->blocks[index];
ParticlesState &state = block_allocator.particles_state();
uint particle_type_id = state.particle_container_id(block.container());
-
ParticleType &particle_type = data->step_description.particle_type(particle_type_id);
- uint active_amount = block.active_amount();
- ParticleSet active_particles(block, static_number_range_ref(0, active_amount));
- step_particle_set(block_allocator,
- active_particles,
- data->all_durations.take_front(active_amount),
- data->end_time,
- particle_type);
+ simulate_block(block_allocator,
+ block,
+ particle_type,
+ data->all_durations.take_back(block.active_amount()),
+ data->end_time);
}
BLI_NOINLINE static void simulate_blocks_for_time_span(BlockAllocators &block_allocators,
@@ -466,26 +476,23 @@ BLI_NOINLINE static void simulate_block_from_birth_cb(void *__restrict userdata,
const ParallelRangeTLS *__restrict tls)
{
SimulateFromBirthData *data = (SimulateFromBirthData *)userdata;
- ParticlesBlock &block = *data->blocks[index];
BlockAllocator &block_allocator = data->block_allocators.get_threadlocal_allocator(
tls->thread_id);
+ ParticlesBlock &block = *data->blocks[index];
ParticlesState &state = block_allocator.particles_state();
- uint particle_type_id = state.particle_container_id(block.container());
+ uint particle_type_id = state.particle_container_id(block.container());
ParticleType &particle_type = data->step_description.particle_type(particle_type_id);
uint active_amount = block.active_amount();
SmallVector<float> durations(active_amount);
-
auto birth_times = block.slice_active().get_float("Birth Time");
for (uint i = 0; i < active_amount; i++) {
durations[i] = data->end_time - birth_times[i];
}
-
- ParticleSet active_particles(block, static_number_range_ref(0, active_amount));
- step_particle_set(block_allocator, active_particles, durations, data->end_time, particle_type);
+ simulate_block(block_allocator, block, particle_type, durations, data->end_time);
}
BLI_NOINLINE static void simulate_blocks_from_birth_to_current_time(
More information about the Bf-blender-cvs
mailing list