diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-04-04 16:07:37 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-05-01 17:02:27 +0300 |
commit | 89826e0a0d8ac55881569e021c487ac5541c6612 (patch) | |
tree | c80797e8c804d43fc84a8e91396a8a86cf3a79b7 /source/blender/blenkernel/BKE_cachefile.h | |
parent | a72a831570822190f782e6bbecfd57b45dc2e872 (diff) |
Alembic: integrate cache file into the dependency graph
* The cache file datablock is now evaluated as part of the dependency graph,
creating/freeing the Alembic file handle matching the current frame.
Modifiers and constraints depend on this evaluation.
* Cache file handles and readers now only exist on COW datablocks, never the
original ones.
* Object data paths are flushed back to the original for the user interface.
* The cache file keeps a list of all readers associated with its handle, and
automatically frees them when the handle is freed. This kind of sharing of
data across datablocks is weak but we have no better mechanism for it.
Fix T62720: Alembic sequences not working and crashing
Differential Revision: https://developer.blender.org/D4774
Diffstat (limited to 'source/blender/blenkernel/BKE_cachefile.h')
-rw-r--r-- | source/blender/blenkernel/BKE_cachefile.h | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/source/blender/blenkernel/BKE_cachefile.h b/source/blender/blenkernel/BKE_cachefile.h index b991ac24284..257975e3c17 100644 --- a/source/blender/blenkernel/BKE_cachefile.h +++ b/source/blender/blenkernel/BKE_cachefile.h @@ -29,8 +29,10 @@ extern "C" { #endif struct CacheFile; +struct CacheReader; struct Depsgraph; struct Main; +struct Object; struct Scene; void BKE_cachefiles_init(void); @@ -52,24 +54,27 @@ void BKE_cachefile_make_local(struct Main *bmain, struct CacheFile *cache_file, const bool lib_local); -void BKE_cachefile_reload(const struct Main *bmain, struct CacheFile *cache_file); +void BKE_cachefile_reload(struct Depsgraph *depsgraph, struct CacheFile *cache_file); -void BKE_cachefile_ensure_handle(const struct Main *bmain, struct CacheFile *cache_file); - -void BKE_cachefile_update_frame(struct Main *bmain, - struct Depsgraph *depsgraph, - struct Scene *scene, - const float ctime, - const float fps); +void BKE_cachefile_eval(struct Main *bmain, + struct Depsgraph *depsgraph, + struct CacheFile *cache_file); bool BKE_cachefile_filepath_get(const struct Main *bmain, + const struct Depsgraph *depsgrah, const struct CacheFile *cache_file, - float frame, char r_filename[1024]); -float BKE_cachefile_time_offset(struct CacheFile *cache_file, const float time, const float fps); +float BKE_cachefile_time_offset(const struct CacheFile *cache_file, + const float time, + const float fps); -void BKE_cachefile_clean(struct Main *bmain, struct CacheFile *cache_file); +/* Modifiers and constraints open and free readers through these. */ +void BKE_cachefile_reader_open(struct CacheFile *cache_file, + struct CacheReader **reader, + struct Object *object, + const char *object_path); +void BKE_cachefile_reader_free(struct CacheFile *cache_file, struct CacheReader **reader); #ifdef __cplusplus } |