Blender Git Commit Log

Git Commits -> Revision df1ff76

Revision df1ff76 by Bastien Montagne (master)
June 15, 2020, 13:35 (GMT)
Fix T77774: New undo code broken by 'make local' behavior.

This is actually a nice issue due to too much optimization...
* Making an ID local just reuse the linked one whenever possible, instead of
actually making a copy of it.
* Therefore, the collection containing that ID is seen as unchanged, since
the pointer itself remained the same.
* But on undo step, there is no way to reuse that local object, which then
gets deleted, and linked one gets re-created - at a different address.
* Collection, however, since unchanged, is not updated at all and thus keeps
reference to the to-be-deleted local object, instead of the linked one.
* Issue gets even worse with viewlayers, this leads to the crash.

To address this, this patch adds a 'virtual' update flags that does nothing
in update case, but will ensure that the affected IDs using the one made local
are properly detected as changed across the relevant undo step.

Note that the recalc flags were chosen mostly for a logical reason, and also
because they are already properly dealt with and cleared by undo code,
so this looks like the optimal solution.

Reviewed By: brecht

Maniphest Tasks: T77774

Differential Revision: https://developer.blender.org/D8006

Commit Details:

Full Hash: df1ff76ee207f97fd274f3400c305e1fd8c19f19
Parent Commit: 0945a79
Lines Changed: +38, -2

2 Modified Paths:

/source/blender/blenkernel/intern/lib_id.c (+29, -2) (Diff)
/source/blender/makesdna/DNA_ID.h (+9, -0) (Diff)
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021