diff options
author | mano-wii <germano.costa@ig.com.br> | 2019-12-04 21:07:09 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2019-12-04 21:07:35 +0300 |
commit | 8b30847952080ebc2d36d347de2e6a1f814959f8 (patch) | |
tree | 2897cafbfa72bc87d79ff2e0e5b0250885723ef9 /source/blender/draw/engines/select | |
parent | 7868db9343d577784aa754418f2b888793a01d25 (diff) |
Fix T72076: Edit mode circle selection inconsistency with animation
The solution is to check for updates on `data->recalc`.
Diffstat (limited to 'source/blender/draw/engines/select')
-rw-r--r-- | source/blender/draw/engines/select/select_engine.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/source/blender/draw/engines/select/select_engine.c b/source/blender/draw/engines/select/select_engine.c index f6e54eef4ed..23399056582 100644 --- a/source/blender/draw/engines/select/select_engine.c +++ b/source/blender/draw/engines/select/select_engine.c @@ -223,6 +223,19 @@ static void select_cache_init(void *vedata) /* Check if the viewport has changed. */ float(*persmat)[4] = draw_ctx->rv3d->persmat; e_data.context.is_dirty = !compare_m4m4(e_data.context.persmat, persmat, FLT_EPSILON); + + if (!e_data.context.is_dirty) { + /* Check if any of the drawn objects have been transformed. */ + Object **ob = &e_data.context.objects_drawn[0]; + for (uint i = e_data.context.objects_drawn_len; i--; ob++) { + DrawData *data = DRW_drawdata_get(&(*ob)->id, &draw_engine_select_type); + if (data && (data->recalc & ID_RECALC_TRANSFORM) != 0) { + data->recalc &= ~ID_RECALC_TRANSFORM; + e_data.context.is_dirty = true; + } + } + } + if (e_data.context.is_dirty) { /* Remove all tags from drawn or culled objects. */ copy_m4_m4(e_data.context.persmat, persmat); @@ -280,6 +293,7 @@ static void select_cache_populate(void *vedata, Object *ob) sel_data = (SELECTID_ObjectData *)DRW_drawdata_ensure( &ob->id, &draw_engine_select_type, sizeof(SELECTID_ObjectData), NULL, NULL); } + sel_data->dd.recalc = 0; sel_data->drawn_index = e_data.context.objects_drawn_len; sel_data->is_drawn = true; |