diff options
author | Jacques Lucke <jacques@blender.org> | 2021-01-19 20:01:22 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2021-01-19 20:01:22 +0300 |
commit | 05179a0ba4898c716a4b9b2d5e169c09b57e84fb (patch) | |
tree | 8e43ac2011bf00268fb250cbc98f23b0e00a0a70 /source/blender/blenkernel/intern | |
parent | 8b777ee6d69d4805c64756cf6a33db894160ce29 (diff) |
Volumes: fix calling BKE_volume_load from multiple threads
`BKE_volume_is_loaded` uses `grids.filepath` to determine if the
grids are already loaded. The issue was that `grids.filepath` was
set before the grids were loaded, resulting in incorrect early
returns for other threads.
Differential Revision: https://developer.blender.org/D10150
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/volume.cc | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/volume.cc b/source/blender/blenkernel/intern/volume.cc index eadb01c43fc..9e7a3736141 100644 --- a/source/blender/blenkernel/intern/volume.cc +++ b/source/blender/blenkernel/intern/volume.cc @@ -783,21 +783,22 @@ bool BKE_volume_load(Volume *volume, Main *bmain) /* Get absolute file path at current frame. */ const char *volume_name = volume->id.name + 2; - volume_filepath_get(bmain, volume, grids.filepath); + char filepath[FILE_MAX]; + volume_filepath_get(bmain, volume, filepath); - CLOG_INFO(&LOG, 1, "Volume %s: load %s", volume_name, grids.filepath); + CLOG_INFO(&LOG, 1, "Volume %s: load %s", volume_name, filepath); /* Test if file exists. */ - if (!BLI_exists(grids.filepath)) { + if (!BLI_exists(filepath)) { char filename[FILE_MAX]; - BLI_split_file_part(grids.filepath, filename, sizeof(filename)); + BLI_split_file_part(filepath, filename, sizeof(filename)); grids.error_msg = filename + std::string(" not found"); CLOG_INFO(&LOG, 1, "Volume %s: %s", volume_name, grids.error_msg.c_str()); return false; } /* Open OpenVDB file. */ - openvdb::io::File file(grids.filepath); + openvdb::io::File file(filepath); openvdb::GridPtrVec vdb_grids; try { @@ -814,11 +815,13 @@ bool BKE_volume_load(Volume *volume, Main *bmain) /* Add grids read from file to own vector, filtering out any NULL pointers. */ for (const openvdb::GridBase::Ptr &vdb_grid : vdb_grids) { if (vdb_grid) { - VolumeFileCache::Entry template_entry(grids.filepath, vdb_grid); + VolumeFileCache::Entry template_entry(filepath, vdb_grid); grids.emplace_back(template_entry, volume->runtime.default_simplify_level); } } + BLI_strncpy(grids.filepath, filepath, FILE_MAX); + return grids.error_msg.empty(); #else UNUSED_VARS(bmain, volume); |