diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-12-17 14:28:16 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2018-12-17 14:33:37 +0300 |
commit | a84c823b891fcf440e134eb284024ea06aa1a9ff (patch) | |
tree | ae07aaa5b4d32a8817ffefe96dc6416b0957c27d /source/blender/blenkernel/intern/library.c | |
parent | dcc11360c619f51a70466e7b3622cc1aebe08fd9 (diff) |
Fix T58652: Crash editing shape keys weirdness with instances
This is a second attempt to get the crash fixed. The original fix
worked, but it was reverted by d3e0d7f0825.
Now the logic goes as:
- All pointers which we can not have shared (the ones which are
owned by the runtime) are cleared.
- The rest of runtime stays untouched.
This seems to be enough to keep particles happy.
Diffstat (limited to 'source/blender/blenkernel/intern/library.c')
-rw-r--r-- | source/blender/blenkernel/intern/library.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 84585d3bd64..4ddfb0d55f6 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -518,25 +518,25 @@ static int id_copy_libmanagement_cb(void *user_data, ID *UNUSED(id_self), ID **i return IDWALK_RET_NOP; } -static void id_copy_clear_runtime_if_needed(ID *id, int flag) +static void id_copy_clear_runtime_pointers(ID *id, int UNUSED(flag)) { if (id == NULL) { return; } - if (flag & LIB_ID_COPY_RUNTIME) { - return; - } + /* TODO(sergey): We might want to do a deep-copy of all the pointers inside. + * This isn't currently needed, and is quite involved change (to cover all + * things like batch cache and such). */ switch ((ID_Type)GS(id->name)) { case ID_OB: { Object *object = (Object *)id; - BKE_object_runtime_reset(object); + BKE_object_runtime_reset_on_copy(object); break; } case ID_ME: { Mesh *mesh = (Mesh *)id; - BKE_mesh_runtime_reset(mesh); + BKE_mesh_runtime_reset_on_copy(mesh); break; } default: @@ -709,7 +709,7 @@ bool BKE_id_copy_ex(Main *bmain, const ID *id, ID **r_newid, const int flag, con (*r_newid)->lib = id->lib; } - id_copy_clear_runtime_if_needed(*r_newid, flag); + id_copy_clear_runtime_pointers(*r_newid, flag); return true; } |