diff options
author | Sergey Sharybin <sergey@blender.org> | 2022-02-02 14:20:03 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey@blender.org> | 2022-02-03 12:02:20 +0300 |
commit | c8cca888518182914e6b4f1b98e0f7b861add08d (patch) | |
tree | dd93675a11be5b9240e6112c3513c88c87607686 /source/blender/blenkernel/BKE_modifier.h | |
parent | 45d5773519bdd760d8ac1d8742a9471ebcbf5023 (diff) |
Fix assert in original modifiers pointer update function
The issue was happening with a specific file where the ID management
code was not fully copying all modifiers because of the extra check
in the `BKE_object_support_modifier_type_check()`.
While it is arguable that copy-on-write should be a 1:1 copy there is
no real need to maintain the per-modifier pointer to its original.
Use its SessionUUID to perform lookup in the original datablock.
Downside of this approach is that it is a linear lookup instead of
direct pointer access, but the upside is that there is less pointers
to manage and that the file with unsupported modifiers does behave
correct without any asserts.
Differential Revision: https://developer.blender.org/D13993
Diffstat (limited to 'source/blender/blenkernel/BKE_modifier.h')
-rw-r--r-- | source/blender/blenkernel/BKE_modifier.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h index 80889813b34..910b13b9b95 100644 --- a/source/blender/blenkernel/BKE_modifier.h +++ b/source/blender/blenkernel/BKE_modifier.h @@ -470,6 +470,8 @@ void BKE_modifiers_foreach_tex_link(struct Object *ob, TexWalkFunc walk, void *u struct ModifierData *BKE_modifiers_findby_type(const struct Object *ob, ModifierType type); struct ModifierData *BKE_modifiers_findby_name(const struct Object *ob, const char *name); +struct ModifierData *BKE_modifiers_findby_session_uuid(const struct Object *ob, + const SessionUUID *session_uuid); void BKE_modifiers_clear_errors(struct Object *ob); /** * used for buttons, to find out if the 'draw deformed in edit-mode option is there. @@ -568,7 +570,8 @@ const char *BKE_modifier_path_relbase_from_global(struct Object *ob); * For a given modifier data, get corresponding original one. * If the modifier data is already original, return it as-is. */ -struct ModifierData *BKE_modifier_get_original(struct ModifierData *md); +struct ModifierData *BKE_modifier_get_original(const struct Object *object, + struct ModifierData *md); struct ModifierData *BKE_modifier_get_evaluated(struct Depsgraph *depsgraph, struct Object *object, struct ModifierData *md); |