Alembic: store a pointer to the object reader in the cache modifiers and
authorKévin Dietrich <kevin.dietrich@mailoo.org>
Sat, 29 Oct 2016 10:23:09 +0000 (12:23 +0200)
committerKévin Dietrich <kevin.dietrich@mailoo.org>
Sat, 29 Oct 2016 10:23:09 +0000 (12:23 +0200)
commit753edafcb77d9aaf07fe869372319b841dd80681
tree676445ce05cf2a8a53ced9deedf5bcba37fd9653
parent0c13792437b3e501c06605876a0396e187c0f7da
Alembic: store a pointer to the object reader in the cache modifiers and
constraints.

This avoids traversing the archive everytime object data is needed and
gives an overall consistent ~2x speedup here with files containing
between 136 and 500 Alembic objects. Also this somewhat nicely de-
duplicates code between data creation (upon import) and data streaming
(modifiers and constraints).

The only worying part is what happens when a CacheFile is deleted and/or
has its path changed. For now, we traverse the whole scene and for each
object using the CacheFile we free the pointer and NULL-ify it (see
BKE_cachefile_clean), but at some point this should be re-considered and
make use of the dependency graph.
22 files changed:
source/blender/alembic/ABC_alembic.h
source/blender/alembic/intern/abc_curves.cc
source/blender/alembic/intern/abc_curves.h
source/blender/alembic/intern/abc_mesh.cc
source/blender/alembic/intern/abc_mesh.h
source/blender/alembic/intern/abc_object.cc
source/blender/alembic/intern/abc_object.h
source/blender/alembic/intern/abc_points.cc
source/blender/alembic/intern/abc_points.h
source/blender/alembic/intern/abc_util.cc
source/blender/alembic/intern/abc_util.h
source/blender/alembic/intern/alembic_capi.cc
source/blender/blenkernel/BKE_cachefile.h
source/blender/blenkernel/intern/cachefile.c
source/blender/blenkernel/intern/constraint.c
source/blender/makesdna/DNA_cachefile_types.h
source/blender/makesdna/DNA_constraint_types.h
source/blender/makesdna/DNA_modifier_types.h
source/blender/makesrna/intern/rna_cachefile.c
source/blender/makesrna/intern/rna_constraint.c
source/blender/makesrna/intern/rna_modifier.c
source/blender/modifiers/intern/MOD_meshsequencecache.c