mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-29 19:02:55 +02:00
Fix gpu access of ktx file not being thread-safe
This commit is contained in:
parent
149f87e734
commit
d8e4604b18
2 changed files with 7 additions and 6 deletions
|
@ -324,11 +324,11 @@ public:
|
||||||
void reset() override { }
|
void reset() override { }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::shared_ptr<storage::FileStorage> maybeOpenFile();
|
std::shared_ptr<storage::FileStorage> maybeOpenFile() const;
|
||||||
|
|
||||||
std::mutex _cacheFileCreateMutex;
|
mutable std::mutex _cacheFileCreateMutex;
|
||||||
std::mutex _cacheFileWriteMutex;
|
mutable std::mutex _cacheFileWriteMutex;
|
||||||
std::weak_ptr<storage::FileStorage> _cacheFile;
|
mutable std::weak_ptr<storage::FileStorage> _cacheFile;
|
||||||
|
|
||||||
std::string _filename;
|
std::string _filename;
|
||||||
std::atomic<uint8_t> _minMipLevelAvailable;
|
std::atomic<uint8_t> _minMipLevelAvailable;
|
||||||
|
|
|
@ -128,7 +128,7 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<storage::FileStorage> KtxStorage::maybeOpenFile() {
|
std::shared_ptr<storage::FileStorage> KtxStorage::maybeOpenFile() const {
|
||||||
std::shared_ptr<storage::FileStorage> file = _cacheFile.lock();
|
std::shared_ptr<storage::FileStorage> file = _cacheFile.lock();
|
||||||
if (file) {
|
if (file) {
|
||||||
return file;
|
return file;
|
||||||
|
@ -154,7 +154,8 @@ PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const {
|
||||||
auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face);
|
auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face);
|
||||||
auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face);
|
auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face);
|
||||||
if (faceSize != 0 && faceOffset != 0) {
|
if (faceSize != 0 && faceOffset != 0) {
|
||||||
result = std::make_shared<storage::FileStorage>(_filename.c_str())->createView(faceSize, faceOffset)->toMemoryStorage();
|
auto file = maybeOpenFile();
|
||||||
|
result = file->createView(faceSize, faceOffset)->toMemoryStorage();
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue