diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-05-15 15:50:24 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-05-15 18:20:02 +0300 |
commit | 2d0efe2e7863c5ebc5e88b2ae17cd20cb3c7e8e6 (patch) | |
tree | 0b67d1166a52b5857bbe07fc6fc2bf7d0502d8a8 /source/blender/blenkernel/intern/particle.c | |
parent | a104c41759613899e314c328e48d6b16cd634d1a (diff) |
Particle edit: Need to check DONE flag from evaluated psys
Diffstat (limited to 'source/blender/blenkernel/intern/particle.c')
-rw-r--r-- | source/blender/blenkernel/intern/particle.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c index 75d4d5cf736..940263ded09 100644 --- a/source/blender/blenkernel/intern/particle.c +++ b/source/blender/blenkernel/intern/particle.c @@ -289,7 +289,7 @@ void psys_enable_all(Object *ob) psys->flag &= ~PSYS_DISABLED; } -ParticleSystem *psys_original_get(ParticleSystem *psys) +ParticleSystem *psys_orig_get(ParticleSystem *psys) { if (psys->orig_psys == NULL) { return psys; @@ -297,7 +297,22 @@ ParticleSystem *psys_original_get(ParticleSystem *psys) return psys->orig_psys; } -static PTCacheEdit *psys_original_edit_get(ParticleSystem *psys) +struct ParticleSystem *psys_eval_get(Depsgraph *depsgraph, + Object *object, + ParticleSystem *psys) +{ + Object *object_eval = DEG_get_evaluated_object(depsgraph, object); + ParticleSystem *psys_eval = object_eval->particlesystem.first; + while (psys_eval != NULL) { + if (psys_eval->orig_psys == psys) { + return psys_eval; + } + psys_eval = psys_eval->next; + } + return psys_eval; +} + +static PTCacheEdit *psys_orig_edit_get(ParticleSystem *psys) { if (psys->orig_psys == NULL) { return psys->edit; @@ -317,7 +332,7 @@ bool psys_in_edit_mode(Depsgraph *depsgraph, ParticleSystem *psys) if (object->mode != OB_MODE_PARTICLE_EDIT) { return false; } - ParticleSystem *psys_orig = psys_original_get(psys); + ParticleSystem *psys_orig = psys_orig_get(psys); return (psys_orig->edit || psys->pointcache->edit) && (use_render_params == false); } @@ -1907,7 +1922,7 @@ static bool psys_thread_context_init_path( if (psys_in_edit_mode(sim->depsgraph, psys)) { ParticleEditSettings *pset = &scene->toolsettings->particle; - if ((use_render_params == 0) && (psys_original_edit_get(psys) == NULL || pset->flag & PE_DRAW_PART) == 0) + if ((use_render_params == 0) && (psys_orig_edit_get(psys) == NULL || pset->flag & PE_DRAW_PART) == 0) totchild = 0; segments = 1 << pset->draw_step; @@ -2001,7 +2016,7 @@ static void psys_thread_create_path(ParticleTask *task, struct ChildParticle *cp ParticleSystem *psys = ctx->sim.psys; ParticleSettings *part = psys->part; ParticleCacheKey **cache = psys->childcache; - PTCacheEdit *edit = psys_original_edit_get(psys); + PTCacheEdit *edit = psys_orig_edit_get(psys); ParticleCacheKey **pcache = psys_in_edit_mode(ctx->sim.depsgraph, psys) && edit ? edit->pathcache : psys->pathcache; ParticleCacheKey *child, *key[4]; ParticleTexture ptex; |