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:
authorLukas Tönne <lukas.toenne@gmail.com>2015-03-18 17:37:08 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2015-03-18 17:37:08 +0300
commitcf2c1a906271509857f7c2b098c18050d2899ebb (patch)
treec98618327fd589cf301da9b1203dbbeae41b70bd /source/blender/editors
parent2392ee950504513bfebaa596298b9b01a52a17c0 (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.c21
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) {