Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <mail@jlucke.com>2020-01-02 16:23:12 +0300
committerJacques Lucke <mail@jlucke.com>2020-01-02 16:23:12 +0300
commit3e325b42bbf9985ecf31af6aa5c230c806bf9ee7 (patch)
tree8bf7922d0fa63e7a26e682036eebc6e5ada4ffc5 /source/blender/simulations/bparticles
parentf12b544515120af2b90829e9055960f205364c76 (diff)
run emitters in parallel
Diffstat (limited to 'source/blender/simulations/bparticles')
-rw-r--r--source/blender/simulations/bparticles/simulate.cpp13
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,