Fix T70919: Proxies crash after building motion path

Was cause by recent fix for T65134 which assigned original object's
proxy_from to an evaluated pointer.

This is because motion path depsgraph does not include proxies, so
the pointer in an evaluated object was kept pointing to an original
object.
This commit is contained in:
Sergey Sharybin 2019-10-18 15:42:45 +02:00
parent 725b59d9b4
commit 6183688c35
Notes: blender-bot 2023-02-14 03:00:45 +01:00
Referenced by commit 2e06a6bec3, Fix T72820: Linked objects jumping around during render
Referenced by issue #70919, Motion Path on proxy armature invalidates drivers, eventually segfaults.
1 changed files with 20 additions and 0 deletions

View File

@ -755,6 +755,25 @@ void update_animation_data_after_copy(const ID *id_orig, ID *id_cow)
update_nla_tracks_orig_pointers(&anim_data_orig->nla_tracks, &anim_data_cow->nla_tracks);
}
/* Some builders (like motion path one) will ignore proxies from being built. This code makes it so
* proxy and proxy_group pointers never point to an original objects, preventing evaluation code
* from assign evaluated pointer to an original proxy->proxy_from. */
void update_proxy_pointers_after_copy(const Depsgraph * /*depsgraph*/,
const Object * /*object_orig*/,
Object *object_cow)
{
if (object_cow->proxy != NULL) {
if ((object_cow->proxy->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0) {
object_cow->proxy = NULL;
}
}
if (object_cow->proxy_group != NULL) {
if ((object_cow->proxy_group->id.tag & LIB_TAG_COPIED_ON_WRITE) == 0) {
object_cow->proxy_group = NULL;
}
}
}
/* Do some special treatment of data transfer from original ID to it's
* CoW complementary part.
*
@ -788,6 +807,7 @@ void update_id_after_copy(const Depsgraph *depsgraph,
}
update_particles_after_copy(depsgraph, object_orig, object_cow);
update_modifiers_orig_pointers(object_orig, object_cow);
update_proxy_pointers_after_copy(depsgraph, object_orig, object_cow);
break;
}
case ID_SCE: {