diff options
author | Bastien Montagne <mont29> | 2022-03-16 19:52:16 +0300 |
---|---|---|
committer | Bastien Montagne <bastien@blender.org> | 2022-03-16 20:34:20 +0300 |
commit | 7e06fc11b7cbf532bd8017b270f53e3a11f21523 (patch) | |
tree | b4ae479c1c11701083bbede23c670629eb71bb10 /source/blender/blenkernel/BKE_lib_remap.h | |
parent | 2564d152d6edf65afcb573598a1303483c62eb06 (diff) |
Add 'multiple' variant of ID relink function.
Similar to other changes to ID remapping, gives huge speedups in some
cases, like certain types of liboverride creation.
Case from {T96092} goes from 1725 seconds (almost 30 minutes) to 45
seconds to generate the liboverride, on my machine.
Reviewed By: jbakker
Maniphest Tasks: T96092
Differential Revision: https://developer.blender.org/D14240
Diffstat (limited to 'source/blender/blenkernel/BKE_lib_remap.h')
-rw-r--r-- | source/blender/blenkernel/BKE_lib_remap.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_lib_remap.h b/source/blender/blenkernel/BKE_lib_remap.h index fd7d39fc250..b66d53b2321 100644 --- a/source/blender/blenkernel/BKE_lib_remap.h +++ b/source/blender/blenkernel/BKE_lib_remap.h @@ -26,6 +26,7 @@ extern "C" { struct ID; struct IDRemapper; +struct LinkNode; /* BKE_libblock_free, delete are declared in BKE_lib_id.h for convenience. */ @@ -133,6 +134,15 @@ void BKE_libblock_relink_ex(struct Main *bmain, void *old_idv, void *new_idv, short remap_flags) ATTR_NONNULL(1, 2); +/** + * Same as #BKE_libblock_relink_ex, but applies all rules defined in \a id_remapper to \a ids (or + * does cleanup if `ID_REMAP_TYPE_CLEANUP` is specified as \a remap_type). + */ +void BKE_libblock_relink_multiple(struct Main *bmain, + struct LinkNode *ids, + const eIDRemapType remap_type, + struct IDRemapper *id_remapper, + const short remap_flags); /** * Remaps ID usages of given ID to their `id->newid` pointer if not None, and proceeds recursively |