diff --git a/interface/resources/images/Default-Sky-9-ambient.jpg b/interface/resources/images/Default-Sky-9-ambient.jpg deleted file mode 100644 index 8fb383c5e8..0000000000 Binary files a/interface/resources/images/Default-Sky-9-ambient.jpg and /dev/null differ diff --git a/interface/resources/images/Default-Sky-9-cubemap.jpg b/interface/resources/images/Default-Sky-9-cubemap.jpg deleted file mode 100644 index 697fd9aeea..0000000000 Binary files a/interface/resources/images/Default-Sky-9-cubemap.jpg and /dev/null differ diff --git a/interface/resources/images/Default-Sky-9-cubemap.ktx b/interface/resources/images/Default-Sky-9-cubemap.ktx new file mode 100644 index 0000000000..95710d2c08 Binary files /dev/null and b/interface/resources/images/Default-Sky-9-cubemap.ktx differ diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 32f6d9554e..f4699009ac 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1438,15 +1438,17 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(_window, SIGNAL(windowMinimizedChanged(bool)), this, SLOT(windowMinimizedChanged(bool))); qCDebug(interfaceapp, "Startup time: %4.2f seconds.", (double)startupTimer.elapsed() / 1000.0); - auto textureCache = DependencyManager::get(); + { + PROFILE_RANGE(render, "Process Default Skybox"); + auto textureCache = DependencyManager::get(); - QString skyboxUrl { PathUtils::resourcesPath() + "images/Default-Sky-9-cubemap.jpg" }; - QString skyboxAmbientUrl { PathUtils::resourcesPath() + "images/Default-Sky-9-ambient.jpg" }; + auto skyboxUrl = PathUtils::resourcesPath().toStdString() + "images/Default-Sky-9-cubemap.ktx"; - _defaultSkyboxTexture = textureCache->getImageTexture(skyboxUrl, image::TextureUsage::CUBE_TEXTURE, { { "generateIrradiance", false } }); - _defaultSkyboxAmbientTexture = textureCache->getImageTexture(skyboxAmbientUrl, image::TextureUsage::CUBE_TEXTURE, { { "generateIrradiance", true } }); + _defaultSkyboxTexture = gpu::Texture::unserialize(skyboxUrl); + _defaultSkyboxAmbientTexture = _defaultSkyboxTexture; - _defaultSkybox->setCubemap(_defaultSkyboxTexture); + _defaultSkybox->setCubemap(_defaultSkyboxTexture); + } EntityItem::setEntitiesShouldFadeFunction([this]() { SharedNodePointer entityServerNode = DependencyManager::get()->soloNodeOfType(NodeType::EntityServer); diff --git a/libraries/shared/src/shared/Storage.cpp b/libraries/shared/src/shared/Storage.cpp index aae1f8455f..f6585e6ecb 100644 --- a/libraries/shared/src/shared/Storage.cpp +++ b/libraries/shared/src/shared/Storage.cpp @@ -68,7 +68,7 @@ StoragePointer FileStorage::create(const QString& filename, size_t size, const u } FileStorage::FileStorage(const QString& filename) : _file(filename) { - if (_file.open(QFile::ReadWrite)) { + if (_file.open(QFile::ReadOnly)) { _mapped = _file.map(0, _file.size()); if (_mapped) { _valid = true; @@ -90,3 +90,34 @@ FileStorage::~FileStorage() { _file.close(); } } + +void FileStorage::ensureWriteAccess() { + if (_hasWriteAccess) { + return; + } + + if (_mapped) { + if (!_file.unmap(_mapped)) { + throw std::runtime_error("Unable to unmap file"); + } + } + if (_file.isOpen()) { + _file.close(); + } + _valid = false; + _mapped = nullptr; + + if (_file.open(QFile::ReadWrite)) { + _mapped = _file.map(0, _file.size()); + if (_mapped) { + _valid = true; + _hasWriteAccess = true; + } else { + qCWarning(storagelogging) << "Failed to map file " << _file.fileName(); + throw std::runtime_error("Failed to map file"); + } + } else { + qCWarning(storagelogging) << "Failed to open file " << _file.fileName(); + throw std::runtime_error("Failed to open file"); + } +} \ No newline at end of file diff --git a/libraries/shared/src/shared/Storage.h b/libraries/shared/src/shared/Storage.h index da5b773d52..4cad9fa083 100644 --- a/libraries/shared/src/shared/Storage.h +++ b/libraries/shared/src/shared/Storage.h @@ -60,11 +60,14 @@ namespace storage { FileStorage& operator=(const FileStorage& other) = delete; const uint8_t* data() const override { return _mapped; } - uint8_t* mutableData() override { return _mapped; } + uint8_t* mutableData() override { ensureWriteAccess(); return _mapped; } size_t size() const override { return _file.size(); } operator bool() const override { return _valid; } private: + void ensureWriteAccess(); + bool _valid { false }; + bool _hasWriteAccess { false }; QFile _file; uint8_t* _mapped { nullptr }; };