There were a bunch of other issues with dupli motion blur and syncing, the problem
being that there was no proper way to detect corresponding duplis between frames
or updates. As a solution, a persistent_id was added to the DupliObject. It's an
extension of the previous index value, with one index for each dupli level. This
can be used to reliably find matching dupli objects between frames. Works with
nested duplis, multiple particle systems, etc.
pBVH nodes buffers could share some pointers from pBVH itself,
and after updating pointers in pBVH we need to recreate this buffers.
This starts looking a bit awkward and seems it's mainly because of
assumptions made when was working on sculpting on deformed mesh.
Would revision such a sculpting and would try to make it more clear
later.
Issue was caused by call ED_sculpt_force_update from WM_file_write which frees
derived mesh and pBVH and forces them to be re-created. After this sculpt session
wasn't repairing properly.
Freeing data from WM_file_write is not nice by itself, but it exposed possible
real issue when sculpting on modifiers. Made it so BLI_pbvh_grids_update will
update pointers to material flags and hidden grids as well.
This isn't idea solution for particular circumstances from the report, since
pBVH would be rebuilt after save which ends up with small interface lags for
while pBVH is rebuilding.
Would be nice to have multires displacement propagation to higher levels
without freeing data.
Pressing ESC for renders now checks for modifier keys, and doesn't escape renders
when a modifier key is held. In Windows, SHIFT+CTRL+ESC brings up task manager,
and it seems to pass on the event.
this will give some speedup but its mainly to simplify the function.
- use bmesh adjacency data, was building its own data, left over from pre-bmesh.
- use a flag to store visited edges rather then a hash.
- store edge pointers in the heap rather then index values (was converting back and fourth a lot).
Two fixes for NDOF device:
- RNA item for setting turntable or trackball for ndof was using wrong variable
- Some moment the option "rotate around selection" stopped to work for ndof.
Note: the latter option doesn't do dolly in, use shift+ndof for that.
This is probably versioning issue happened when both trunk and tomato
were mixed to work on the same file.
Anyway, there're few files here locally and it's probably other users
do have the same files, so lets keep things safe here :)
Currently the only way is to invalidate the whole cache, for something
smarter we'll need a dependency graph which would be able to deal with
relations between clip and strip.
FLT_EPSILON was too small to use when checking if the edge collapse result is an error.
add invert_m3_m3_ex(), invert_m3_ex() functiosn which take an epsilon to check the determinant, saves calculating it twice per edge collapse.