Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/io/alembic/intern/alembic_capi.cc')
-rw-r--r--source/blender/io/alembic/intern/alembic_capi.cc22
1 files changed, 18 insertions, 4 deletions
diff --git a/source/blender/io/alembic/intern/alembic_capi.cc b/source/blender/io/alembic/intern/alembic_capi.cc
index d7b176eea50..58fc4dd599d 100644
--- a/source/blender/io/alembic/intern/alembic_capi.cc
+++ b/source/blender/io/alembic/intern/alembic_capi.cc
@@ -159,11 +159,25 @@ static bool gather_objects_paths(const IObject &object, ListBase *object_paths)
CacheArchiveHandle *ABC_create_handle(struct Main *bmain,
const char *filename,
+ const CacheFileLayer *layers,
ListBase *object_paths)
{
- ArchiveReader *archive = new ArchiveReader(bmain, filename);
+ std::vector<const char *> filenames;
+ filenames.push_back(filename);
- if (!archive->valid()) {
+ while (layers) {
+ if ((layers->flag & CACHEFILE_LAYER_HIDDEN) == 0) {
+ filenames.push_back(layers->filepath);
+ }
+ layers = layers->next;
+ }
+
+ /* We need to reverse the order as overriding archives should come first. */
+ std::reverse(filenames.begin(), filenames.end());
+
+ ArchiveReader *archive = ArchiveReader::get(bmain, filenames);
+
+ if (!archive || !archive->valid()) {
delete archive;
return nullptr;
}
@@ -447,9 +461,9 @@ static void import_startjob(void *user_data, short *stop, short *do_update, floa
WM_set_locked_interface(data->wm, true);
- ArchiveReader *archive = new ArchiveReader(data->bmain, data->filename);
+ ArchiveReader *archive = ArchiveReader::get(data->bmain, {data->filename});
- if (!archive->valid()) {
+ if (!archive || !archive->valid()) {
data->error_code = ABC_ARCHIVE_FAIL;
delete archive;
return;