diff options
author | Lukas Tönne <lukas.toenne@gmail.com> | 2015-03-18 17:37:08 +0300 |
---|---|---|
committer | Lukas Tönne <lukas.toenne@gmail.com> | 2015-03-18 17:37:08 +0300 |
commit | cf2c1a906271509857f7c2b098c18050d2899ebb (patch) | |
tree | c98618327fd589cf301da9b1203dbbeae41b70bd /source/blender/editors | |
parent | 2392ee950504513bfebaa596298b9b01a52a17c0 (diff) |
Calculate bounding boxes for cached DMs to avoid visual popping when
using the original Object's bb.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 6bc5e173c53..297e5861b16 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2051,10 +2051,13 @@ static void draw_dupli_objects_color( if (dob) dob_next = dupli_step(dob->next); for (; dob; dob_prev = dob, dob = dob_next, dob_next = dob_next ? dupli_step(dob_next->next) : NULL) { - DerivedMesh *final_dm; /* for restoring after override */ + /* for restoring after override */ + DerivedMesh *store_final_dm; + BoundBox *store_bb; tbase.object = dob->ob; - final_dm = dob->ob->derivedFinal; + store_final_dm = dob->ob->derivedFinal; + store_bb = dob->ob->bb; /* Make sure lod is updated from dupli's position */ @@ -2092,11 +2095,16 @@ static void draw_dupli_objects_color( } /* override final DM */ + bb_tmp = NULL; if (base->object->dup_cache) { DupliObjectData *dob_data = BKE_dupli_cache_find_data(base->object->dup_cache, tbase.object); - if (dob_data->cache_dm) + if (dob_data->cache_dm) { tbase.object->derivedFinal = dob_data->cache_dm; + tbase.object->bb = bb_tmp = &dob_data->bb; + } } + if (!bb_tmp) + bb_tmp = BKE_object_boundbox_get(dob->ob); /* generate displist, test for new object */ if (dob_prev && dob_prev->ob != dob->ob) { @@ -2106,7 +2114,7 @@ static void draw_dupli_objects_color( use_displist = false; } - if ((bb_tmp = BKE_object_boundbox_get(dob->ob))) { + if (bb_tmp) { bb = *bb_tmp; /* must make a copy */ testbb = true; } @@ -2167,7 +2175,10 @@ static void draw_dupli_objects_color( tbase.object->dtx = dtx; tbase.object->transflag = transflag; tbase.object->currentlod = savedlod; - tbase.object->derivedFinal = final_dm; + + /* restore final DM */ + tbase.object->derivedFinal = store_final_dm; + tbase.object->bb = store_bb; } if (apply_data) { |