diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2014-10-06 20:58:41 +0400 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2015-01-20 11:30:03 +0300 |
commit | fe8fad54b16b01b52811fab7b002ff7ea72cb800 (patch) | |
tree | a9215830e5caa55cfd49dcc09ac4406ef984b1c1 /source/blender/blenkernel/BKE_particle.h | |
parent | c1f4542f0f5d00ed47b679bc41ce1d5d33d462ab (diff) |
Use the generic task scheduler for threaded particle tasks, i.e.
distribution and path caching for child particles.
This gives a significant improvement of viewport playback performance
with higher child particle counts. Particles previously used their own
threads and had a rather high limit for threading. Also threading
apparently was disabled because only 1 thread was being used ...
Diffstat (limited to 'source/blender/blenkernel/BKE_particle.h')
-rw-r--r-- | source/blender/blenkernel/BKE_particle.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h index 39cf5505382..15d3c2f5ee8 100644 --- a/source/blender/blenkernel/BKE_particle.h +++ b/source/blender/blenkernel/BKE_particle.h @@ -160,11 +160,11 @@ typedef struct ParticleThreadContext { float *vg_effector; } ParticleThreadContext; -typedef struct ParticleThread { +typedef struct ParticleTask { ParticleThreadContext *ctx; struct RNG *rng, *rng_path; - int num, tot; -} ParticleThread; + int begin, end; +} ParticleTask; typedef struct ParticleBillboardData { struct Object *ob; @@ -347,8 +347,9 @@ void psys_get_dupli_texture(struct ParticleSystem *psys, struct ParticleSettings void psys_get_dupli_path_transform(struct ParticleSimulationData *sim, struct ParticleData *pa, struct ChildParticle *cpa, struct ParticleCacheKey *cache, float mat[4][4], float *scale); -ParticleThread *psys_threads_create(struct ParticleSimulationData *sim); -void psys_threads_free(ParticleThread *threads); +void psys_thread_context_init(struct ParticleThreadContext *ctx, struct ParticleSimulationData *sim); +void psys_tasks_create(struct ParticleThreadContext *ctx, int totpart, struct ParticleTask **r_tasks, int *r_numtasks); +void psys_tasks_free(struct ParticleTask *tasks, int numtasks); void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3], float zvec[3], float center[3]); void psys_apply_hair_lattice(struct Scene *scene, struct Object *ob, struct ParticleSystem *psys); |