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:
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.cc10
1 files changed, 6 insertions, 4 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 30ec9e948fd..1081528ece1 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
@@ -98,7 +98,7 @@ void ObjectRuntimeBackup::restore_to_object(Object *object)
object->runtime = runtime;
object->runtime.data_orig = data_orig;
object->runtime.bb = bb;
- if (ELEM(object->type, OB_MESH, OB_LATTICE) && data_eval != nullptr) {
+ if (ELEM(object->type, OB_MESH, OB_LATTICE, OB_CURVE, OB_FONT) && data_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
@@ -112,9 +112,11 @@ void ObjectRuntimeBackup::restore_to_object(Object *object)
BKE_object_free_derived_caches(object);
}
else {
- /* Do same thing as object update: override actual object data
- * pointer with evaluated datablock. */
- object->data = data_eval;
+ /* Do same thing as object update: override actual object data pointer with evaluated
+ * datablock, but only if the evaluated data has the same type as the original data. */
+ if (GS(((ID *)object->data)->name) == GS(data_eval->name)) {
+ object->data = data_eval;
+ }
/* Evaluated mesh simply copied edit_mesh pointer from
* original mesh during update, need to make sure no dead