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:
authormano-wii <germano.costa@ig.com.br>2019-12-04 21:07:09 +0300
committermano-wii <germano.costa@ig.com.br>2019-12-04 21:07:35 +0300
commit8b30847952080ebc2d36d347de2e6a1f814959f8 (patch)
tree2897cafbfa72bc87d79ff2e0e5b0250885723ef9 /source/blender/draw/engines/select
parent7868db9343d577784aa754418f2b888793a01d25 (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.c14
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;