[Bf-blender-cvs] [8b308479520] master: Fix T72076: Edit mode circle selection inconsistency with animation

mano-wii noreply at git.blender.org
Wed Dec 4 19:11:24 CET 2019


Commit: 8b30847952080ebc2d36d347de2e6a1f814959f8
Author: mano-wii
Date:   Wed Dec 4 15:07:09 2019 -0300
Branches: master
https://developer.blender.org/rB8b30847952080ebc2d36d347de2e6a1f814959f8

Fix T72076: Edit mode circle selection inconsistency with animation

The solution is to check for updates on `data->recalc`.

===================================================================

M	source/blender/draw/engines/select/select_engine.c

===================================================================

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;



More information about the Bf-blender-cvs mailing list