mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 09:28:46 +02:00
Store offset to min mip kv in KtxStorage
This commit is contained in:
parent
4395cd7ee1
commit
47cf44dc60
3 changed files with 10 additions and 10 deletions
|
@ -330,6 +330,7 @@ public:
|
||||||
|
|
||||||
std::string _filename;
|
std::string _filename;
|
||||||
std::atomic<uint8_t> _minMipLevelAvailable;
|
std::atomic<uint8_t> _minMipLevelAvailable;
|
||||||
|
size_t _offsetToMinMipKV;
|
||||||
|
|
||||||
ktx::KTXDescriptorPointer _ktxDescriptor;
|
ktx::KTXDescriptorPointer _ktxDescriptor;
|
||||||
friend class Texture;
|
friend class Texture;
|
||||||
|
|
|
@ -109,18 +109,18 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) {
|
||||||
if (_ktxDescriptor->images.size() < _ktxDescriptor->header.numberOfMipmapLevels) {
|
if (_ktxDescriptor->images.size() < _ktxDescriptor->header.numberOfMipmapLevels) {
|
||||||
qWarning() << "Bad images found in ktx";
|
qWarning() << "Bad images found in ktx";
|
||||||
}
|
}
|
||||||
auto& keyValues = _ktxDescriptor->keyValues;
|
|
||||||
auto found = std::find_if(keyValues.begin(), keyValues.end(), [](const ktx::KeyValue& val) -> bool {
|
_offsetToMinMipKV = _ktxDescriptor->getValueOffsetForKey(ktx::HIFI_MIN_POPULATED_MIP_KEY);
|
||||||
return val._key.compare(ktx::HIFI_MIN_POPULATED_MIP_KEY) == 0;
|
if (_offsetToMinMipKV) {
|
||||||
});
|
auto data = storage->data() + ktx::KTX_HEADER_SIZE + _offsetToMinMipKV;
|
||||||
if (found != keyValues.end()) {
|
_minMipLevelAvailable = *data;
|
||||||
_minMipLevelAvailable = found->_value[0];
|
|
||||||
} else {
|
} else {
|
||||||
// Assume all mip levels are available
|
// Assume all mip levels are available
|
||||||
_minMipLevelAvailable = 0;
|
_minMipLevelAvailable = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// now that we know the ktx, let's get the header info to configure this Texture::Storage:
|
// now that we know the ktx, let's get the header info to configure this Texture::Storage:
|
||||||
Format mipFormat = Format::COLOR_BGRA_32;
|
Format mipFormat = Format::COLOR_BGRA_32;
|
||||||
Format texelFormat = Format::COLOR_SRGBA_32;
|
Format texelFormat = Format::COLOR_SRGBA_32;
|
||||||
|
@ -195,7 +195,6 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor
|
||||||
imageData += ktx::KTX_HEADER_SIZE + _ktxDescriptor->header.bytesOfKeyValueData + _ktxDescriptor->images[level]._imageOffset;
|
imageData += ktx::KTX_HEADER_SIZE + _ktxDescriptor->header.bytesOfKeyValueData + _ktxDescriptor->images[level]._imageOffset;
|
||||||
imageData += ktx::IMAGE_SIZE_WIDTH;
|
imageData += ktx::IMAGE_SIZE_WIDTH;
|
||||||
|
|
||||||
auto offset = _ktxDescriptor->getValueOffsetForKey(ktx::HIFI_MIN_POPULATED_MIP_KEY);
|
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock { _cacheFileWriteMutex };
|
std::lock_guard<std::mutex> lock { _cacheFileWriteMutex };
|
||||||
|
|
||||||
|
@ -206,8 +205,8 @@ void KtxStorage::assignMipData(uint16 level, const storage::StoragePointer& stor
|
||||||
|
|
||||||
memcpy(imageData, storage->data(), _ktxDescriptor->images[level]._imageSize);
|
memcpy(imageData, storage->data(), _ktxDescriptor->images[level]._imageSize);
|
||||||
_minMipLevelAvailable = level;
|
_minMipLevelAvailable = level;
|
||||||
if (offset > 0) {
|
if (_offsetToMinMipKV > 0) {
|
||||||
auto minMipKeyData = file->mutableData() + ktx::KTX_HEADER_SIZE + ktx::KV_SIZE_WIDTH + offset;
|
auto minMipKeyData = file->mutableData() + ktx::KTX_HEADER_SIZE + _offsetToMinMipKV;
|
||||||
memcpy(minMipKeyData, (void*)&_minMipLevelAvailable, 1);
|
memcpy(minMipKeyData, (void*)&_minMipLevelAvailable, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -126,7 +126,7 @@ size_t KTXDescriptor::getValueOffsetForKey(const std::string& key) const {
|
||||||
size_t offset { 0 };
|
size_t offset { 0 };
|
||||||
for (auto& kv : keyValues) {
|
for (auto& kv : keyValues) {
|
||||||
if (kv._key == key) {
|
if (kv._key == key) {
|
||||||
return offset + kv._key.size() + 1;
|
return offset + ktx::KV_SIZE_WIDTH + kv._key.size() + 1;
|
||||||
}
|
}
|
||||||
offset += kv.serializedByteSize();
|
offset += kv.serializedByteSize();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue