diff options
author | Jacques Lucke <mail@jlucke.com> | 2020-01-02 16:23:12 +0300 |
---|---|---|
committer | Jacques Lucke <mail@jlucke.com> | 2020-01-02 16:23:12 +0300 |
commit | 3e325b42bbf9985ecf31af6aa5c230c806bf9ee7 (patch) | |
tree | 8bf7922d0fa63e7a26e682036eebc6e5ada4ffc5 /source/blender/simulations/bparticles | |
parent | f12b544515120af2b90829e9055960f205364c76 (diff) |
run emitters in parallel
Diffstat (limited to 'source/blender/simulations/bparticles')
-rw-r--r-- | source/blender/simulations/bparticles/simulate.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/source/blender/simulations/bparticles/simulate.cpp b/source/blender/simulations/bparticles/simulate.cpp index f0c921df99f..732939bd3d2 100644 --- a/source/blender/simulations/bparticles/simulate.cpp +++ b/source/blender/simulations/bparticles/simulate.cpp @@ -389,10 +389,19 @@ BLI_NOINLINE static void create_particles_from_emitters(SimulationState &simulat ArrayRef<Emitter *> emitters, FloatInterval time_span) { - for (Emitter *emitter : emitters) { + auto func = [&](uint emitter_index) { + Emitter &emitter = *emitters[emitter_index]; EmitterInterface interface(simulation_state, particle_allocator, time_span); - emitter->emit(interface); + emitter.emit(interface); + }; + +#ifdef WITH_TBB + tbb::parallel_for((uint)0, emitters.size(), func); +#else + for (uint i : emitters.index_iterator()) { + func(i); } +#endif } void simulate_particles(SimulationState &simulation_state, |