From ff3e9d0d90e105e0b6c9cd6e09189f420268d9ec Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 11 May 2018 12:18:37 +0200 Subject: Particle edit: Fix missing update after undo Old code was doing draw-time calculations in some cases. just do the same for now. --- source/blender/draw/modes/particle_mode.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/source/blender/draw/modes/particle_mode.c b/source/blender/draw/modes/particle_mode.c index b5a45a7e92d..dc08ba63cb3 100644 --- a/source/blender/draw/modes/particle_mode.c +++ b/source/blender/draw/modes/particle_mode.c @@ -139,10 +139,25 @@ static void particle_cache_init(void *vedata) DRW_shgroup_uniform_float(stl->g_data->tip_points_group, "outlineWidth", &outline_width, 1); } -static void particle_edit_cache_populate(void *vedata, PTCacheEdit *edit) +static void draw_update_ptcache_edit(Object *object, PTCacheEdit *edit) +{ + if (edit->psys && edit->psys->flag & PSYS_HAIR_UPDATED) { + const DRWContextState *draw_ctx = DRW_context_state_get(); + Scene *scene_orig = (Scene *)DEG_get_original_id(&draw_ctx->scene->id); + Object *object_orig = DEG_get_original_object(object); + PE_update_object(draw_ctx->depsgraph, scene_orig, object_orig, 0); + } + BLI_assert(edit->pathcache != NULL); +} + + +static void particle_edit_cache_populate(void *vedata, + Object *object, + PTCacheEdit *edit) { PARTICLE_StorageList *stl = ((PARTICLE_Data *)vedata)->stl; const DRWContextState *draw_ctx = DRW_context_state_get(); + draw_update_ptcache_edit(object, edit); ParticleEditSettings *pset = PE_settings(draw_ctx->scene); { struct Gwn_Batch *strands = DRW_cache_particles_get_edit_strands(edit); @@ -171,7 +186,7 @@ static void particle_cache_populate(void *vedata, Object *object) if (edit == NULL) { continue; } - particle_edit_cache_populate(vedata, edit); + particle_edit_cache_populate(vedata, object, edit); break; } } -- cgit v1.2.3