diff options
Diffstat (limited to 'source/blender/blenkernel/intern/object_update.c')
-rw-r--r-- | source/blender/blenkernel/intern/object_update.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c index 7e15ac5de5d..4c0d0303c1f 100644 --- a/source/blender/blenkernel/intern/object_update.c +++ b/source/blender/blenkernel/intern/object_update.c @@ -67,14 +67,6 @@ #include "DEG_depsgraph.h" #include "DEG_depsgraph_query.h" -/** - * Restore the object->data to a non-modifier evaluated state. - * - * Some changes done directly in evaluated object require them to be reset - * before being re-evaluated. - * For example, we need to call this before #BKE_mesh_new_from_object(), - * in case we removed/added modifiers in the evaluated object. - */ void BKE_object_eval_reset(Object *ob_eval) { BKE_object_free_derived_caches(ob_eval); @@ -88,10 +80,10 @@ void BKE_object_eval_local_transform(Depsgraph *depsgraph, Object *ob) BKE_object_to_mat4(ob, ob->obmat); } -/* Evaluate parent */ -/* NOTE: based on solve_parenting(), but with the cruft stripped out */ void BKE_object_eval_parent(Depsgraph *depsgraph, Object *ob) { + /* NOTE: based on `solve_parenting()`, but with the cruft stripped out. */ + Object *par = ob->parent; float totmat[4][4]; @@ -282,7 +274,12 @@ void BKE_object_handle_data_update(Depsgraph *depsgraph, Scene *scene, Object *o /** Bounding box from evaluated geometry. */ static void object_sync_boundbox_to_original(Object *object_orig, Object *object_eval) { - BoundBox *bb = BKE_object_boundbox_get(object_eval); + BoundBox *bb = object_eval->runtime.bb; + if (!bb || (bb->flag & BOUNDBOX_DIRTY)) { + BKE_object_boundbox_calc_from_evaluated_geometry(object_eval); + } + + bb = BKE_object_boundbox_get(object_eval); if (bb != NULL) { if (object_orig->runtime.bb == NULL) { object_orig->runtime.bb = MEM_mallocN(sizeof(*object_orig->runtime.bb), __func__); |