diff options
author | Brecht Van Lommel <brecht@blender.org> | 2020-02-28 14:59:18 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2020-02-28 15:01:02 +0300 |
commit | da1140f75e08ac5228474e5cdbb995ec7c0df579 (patch) | |
tree | 0603441863f1ec4537d363217c29be745848b386 /source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc | |
parent | 7a8a074a30b045eafbef6eeb5293f1e76a3cb5a7 (diff) |
Revert "Objects: make evaluated data runtime storage usable for types other than mesh"
This reverts commit f2b95b9eae2ee913c99cff7595527b18d8b49d0a.
Fix T74283: modifier display lost when moving object in edit mode.
The cause is not immediately obvious so better to revert and look at this
carefully.
Diffstat (limited to 'source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc')
-rw-r--r-- | source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc index acbcd4d551d..df7338e1076 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_runtime_backup_object.cc @@ -44,6 +44,7 @@ ObjectRuntimeBackup::ObjectRuntimeBackup(const Depsgraph * /*depsgraph*/) void ObjectRuntimeBackup::init_from_object(Object *object) { /* Store evaluated mesh and curve_cache, and make sure we don't free it. */ + Mesh *mesh_eval = object->runtime.mesh_eval; runtime = object->runtime; BKE_object_runtime_reset(object); /* Keep bbox (for now at least). */ @@ -51,7 +52,9 @@ void ObjectRuntimeBackup::init_from_object(Object *object) /* Object update will override actual object->data to an evaluated version. * Need to make sure we don't have data set to evaluated one before free * anything. */ - object->data = runtime.data_orig; + if (mesh_eval != nullptr && object->data == mesh_eval) { + object->data = runtime.mesh_orig; + } /* Make a backup of base flags. */ base_flag = object->base_flag; base_local_view_bits = object->base_local_view_bits; @@ -95,13 +98,12 @@ void ObjectRuntimeBackup::backup_pose_channel_runtime_data(Object *object) void ObjectRuntimeBackup::restore_to_object(Object *object) { - ID *data_orig = object->runtime.data_orig; - ID *data_eval = object->runtime.data_eval; + Mesh *mesh_orig = object->runtime.mesh_orig; BoundBox *bb = object->runtime.bb; object->runtime = runtime; - object->runtime.data_orig = data_orig; + object->runtime.mesh_orig = mesh_orig; object->runtime.bb = bb; - if (object->type == OB_MESH && data_eval != nullptr) { + if (object->type == OB_MESH && object->runtime.mesh_eval != nullptr) { if (object->id.recalc & ID_RECALC_GEOMETRY) { /* If geometry is tagged for update it means, that part of * evaluated mesh are not valid anymore. In this case we can not @@ -109,24 +111,20 @@ void ObjectRuntimeBackup::restore_to_object(Object *object) * * We restore object's data datablock to an original copy of * that datablock. */ - object->data = data_orig; + object->data = mesh_orig; /* After that, immediately free the invalidated caches. */ BKE_object_free_derived_caches(object); } else { + Mesh *mesh_eval = object->runtime.mesh_eval; /* Do same thing as object update: override actual object data * pointer with evaluated datablock. */ - object->data = data_eval; - + object->data = mesh_eval; /* Evaluated mesh simply copied edit_mesh pointer from * original mesh during update, need to make sure no dead * pointers are left behind. */ - if (object->type == OB_MESH) { - Mesh *mesh_eval = (Mesh *)data_eval; - Mesh *mesh_orig = (Mesh *)data_orig; - mesh_eval->edit_mesh = mesh_orig->edit_mesh; - } + mesh_eval->edit_mesh = mesh_orig->edit_mesh; } } object->base_flag = base_flag; |