Depsgraph: Only bind ID-data and indices to depsgraph callbacks
authorSergey Sharybin <sergey.vfx@gmail.com>
Tue, 3 Apr 2018 15:23:43 +0000 (17:23 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 4 Apr 2018 07:48:41 +0000 (09:48 +0200)
commit4674e02562637f36a9900bff5f5f4acc9aff482d
tree4fca4fb97dad7c2e34533950d44faeb5ce94e2c0
parentfa01a1738bd1e3a6750ffbe523a282bc22de3991
Depsgraph: Only bind ID-data and indices to depsgraph callbacks

This is a part of copy-on-write sanitization, to avoid all the checks
which were attempting to keep sub-data pointers intact.

Point is: ID pointers never change for CoW datablocks, but nested
data pointers might change when updating existing copy.

Solution: Only bind ID data pointers and index of sub-data.
This will make CoW datablock 7update function was easier in 2.8.

In master we were only using pose channel pointers in callbacks,
this is exactly what this commit addresses. A linear lookup array
is created on pose evaluation init and is thrown away afterwards.

One thing we might consider doing is to keep indexed array of
poses, similar to chanhash.

Reviewers: campbellbarton

Reviewed By: campbellbarton

Subscribers: dfelinto

Differential Revision: https://developer.blender.org/D3124
source/blender/blenkernel/BKE_armature.h
source/blender/blenkernel/intern/armature_update.c
source/blender/blenloader/intern/readfile.c
source/blender/depsgraph/intern/builder/deg_builder_nodes.h
source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
source/blender/makesdna/DNA_action_types.h