From d5954ef11c973069aeb62d0d9edecac617234bb4 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Thu, 18 Jun 2020 18:26:15 +0200 Subject: LibOverride: only tag actually changed orig IDs for automatic override diffing. This makes any operation (including mere bone selection) several times faster on some complex production character, since we typically now only need to diff a single ID, instead of tens of them. --- source/blender/depsgraph/intern/eval/deg_eval_flush.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'source/blender/depsgraph/intern') diff --git a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc index df6c139e916..50469d57a34 100644 --- a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc +++ b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc @@ -251,7 +251,10 @@ void flush_editors_id_update(Depsgraph *graph, const DEGEditorUpdateContext *upd if (graph->is_active && id_node->is_user_modified) { deg_editors_id_update(update_ctx, id_orig); } - if (ID_IS_OVERRIDE_LIBRARY(id_orig)) { + if (ID_IS_OVERRIDE_LIBRARY(id_orig) && id_orig->recalc != 0) { + /* We only want to tag an ID for liboverride autorefresh if it was actually tagged as + * changed. CoW IDs indirectly modified because of changes in other IDs should never + * require a liboverride diffing. */ id_orig->tag |= LIB_TAG_OVERRIDE_LIBRARY_AUTOREFRESH; } /* Inform draw engines that something was changed. */ -- cgit v1.2.3