Blender Git Commits

Blender Git "undo-experiments-swap-reread-datablocks" branch commits.

Page: 7 / 11

January 30, 2020, 20:56 (GMT)
undoexp: tweak `setup_app_data()` to better handle undo case.

The way we detected undo case there was somewhat weak, now we have a
stronger way to do it from `BlendFileReadParams`.
January 30, 2020, 20:56 (GMT)
undoexp: fix memleak after recent change of WM/SCR/WS IDs handling.
January 30, 2020, 14:29 (GMT)
undoexp: tweak `setup_app_data()` to better handle undo case.

The way we detected undo case there was somewhat weak, now we have a
stronger way to do it from `BlendFileReadParams`.
January 30, 2020, 14:11 (GMT)
undoexp: fix memleak after recent change of WM/SCR/WS IDs handling.
January 30, 2020, 11:36 (GMT)
Merge branch 'undo-experiments' into undo-experiments-swap-reread-datablocks

Conflicts:
source/blender/blenloader/intern/readfile.c
January 30, 2020, 11:29 (GMT)
Merge branch 'master' into undo-experiments
January 30, 2020, 11:27 (GMT)
undoexp: fix bug/crash in recent refactor of WM/SCR/WS IDs handling.

Mismatch when partial undo was not enabled.
January 30, 2020, 11:10 (GMT)
undoexp: Better handling of recalc flags in undo/redo case.

Main idea here is to accumulate all recalc flags used on an ID over the
whole time between two memfile savings.

Since our IDs are now almost never fully re-evaluated in depsgraph on
undo, this should give us a best 'precise' info required to update
actually changed things in the DEG update just after the undo.
January 29, 2020, 20:37 (GMT)
undoexp: better handling of recalc flags in undo case.

Fixes the 'object that not update its position when undoing the very
first undo step' issue.

Just like with the 'unchanged' detection, when going backward, i.e.
actual undo from n to n-1 stages, the 'recalc' flag stored in ID is not
that useful, as it actually marks the updates needed from n-2 to n-1 stages.

So we need a way to get 'future' recacl flags, i.e. the last recalc
flags used by the last despgraph update, for the current ID, and set
them into the newly read ID's racalc flags.

Note that am not sure how strong this approach is, it is relatively
simple, but may require some more involved handling (like accumulating
all flags used in-between two undo steps storage, or something
similar?).
January 29, 2020, 11:00 (GMT)
Merge branch 'undo-experiments' into undo-experiments-swap-reread-datablocks

Conflicts:
source/blender/blenloader/intern/readfile.c
January 29, 2020, 10:52 (GMT)
undoexp: cleanup/simplify handling of WM/SCR/WS IDs.

Re-read from memfile WindowManagers, Screens and WorkSpaces
are never actually used in undo situation. This allows us to simply
early abort on those ID types, even if we do not find them in current
(old) bmain for some reason.
January 29, 2020, 10:05 (GMT)
Merge branch 'undo-experiments' into undo-experiments-swap-reread-datablocks
January 29, 2020, 10:05 (GMT)
undoexp: style cleanup.
January 28, 2020, 20:22 (GMT)
undoexp: initial implementation of ID swapping.

Goal is to reuse same address also for changed IDs during an undo step.
This will allow for a given ID to almost always keep its same address
along a whole editing session, reducing a lot useless updates required
by current memfile undo.

Note that this commit has a lot of things to be investigated & fixed
still, at the very least:
* Refcounting is not really taken care of yet. This is fine for now
since we remap everything still, but at some point plan is to not remap
(liblink) reused unchanged IDs at all...
* We keep the double libmap for now, getting rid of it requires further
investigations (especially in some corner cases).
* 'UI' IDs (WM, screen and WS) are likely troublemakers given their
current weird specific handling. This might actually be seriously
simplified with this new approach?
* Since even changed IDs keep the same address, we are going to have to
improve a lot the `id->recalc` handling - unless we accept a
brute-force complete depsgraph update of the changed IDs.

Last point is especially interesting, as with current code, updates do
happen as expected most of the time (proper updates are missing
sometimes). This means that even undo moving of a very highly
modifier-subdivided object can be done "instantaneously" as that object
updates does not requires a geometry update.

Handling it properly will likely require to store the 'future' update
flag (as we do currently with the future unchanged status). Not sure
we'll catch all cases though, if that goes too far we may just force
full update as a first step. :/
January 28, 2020, 20:06 (GMT)
undoexp: BKE_id_swap: add 'full' swapping.

Add a new func to do a full swapping of two ID data, including all of
the ID strcut content itself.

Also make both idswap functions resilient to a NULL given bmain pointer
(they simply do not do internal remapping of pointers to itself then).
January 28, 2020, 15:14 (GMT)
Merge branch 'master' into undo-experiments
January 28, 2020, 10:32 (GMT)
Merge branch 'undo-experiments' into undo-experiments-swap-reread-datablocks
January 28, 2020, 10:31 (GMT)
Merge branch 'master' into undo-experiments
January 26, 2020, 20:07 (GMT)
Reset to current undo-experiments branch.
January 26, 2020, 20:03 (GMT)
Merge branch 'master' into undo-experiments-swap-reread-datablocks
By: Miika HämäläinenLast update: Nov-07-2014 14:18MiikaHweb | 2003-2021