diff --git a/libraries/gpu/src/gpu/Texture.cpp b/libraries/gpu/src/gpu/Texture.cpp index 5cd1ebd31f..2be495dcdb 100755 --- a/libraries/gpu/src/gpu/Texture.cpp +++ b/libraries/gpu/src/gpu/Texture.cpp @@ -389,12 +389,14 @@ const Element& Texture::getStoredMipFormat() const { } void Texture::assignStoredMip(uint16 level, Size size, const Byte* bytes) { - storage::StoragePointer storage { new storage::MemoryStorage(size, bytes) }; + auto rawStoragePointer = new storage::MemoryStorage(size, bytes); + storage::StoragePointer storage = rawStoragePointer->shared_from_this(); assignStoredMip(level, storage); } void Texture::assignStoredMipFace(uint16 level, uint8 face, Size size, const Byte* bytes) { - storage::StoragePointer storage { new storage::MemoryStorage(size, bytes) }; + auto rawStoragePointer = new storage::MemoryStorage(size, bytes); + storage::StoragePointer storage = rawStoragePointer->shared_from_this(); assignStoredMipFace(level, face, storage); } @@ -973,4 +975,3 @@ Texture::ExternalUpdates Texture::getUpdates() const { void Texture::setStorage(std::unique_ptr& newStorage) { _storage.swap(newStorage); } - diff --git a/libraries/shared/src/shared/Storage.cpp b/libraries/shared/src/shared/Storage.cpp index 7075d9c6f7..f887ec1181 100644 --- a/libraries/shared/src/shared/Storage.cpp +++ b/libraries/shared/src/shared/Storage.cpp @@ -12,7 +12,10 @@ using namespace storage; -ViewStoragePointer Storage::createView(size_t viewSize, size_t offset) const { +ViewStorage::ViewStorage(const storage::StoragePointer& owner, size_t size, const uint8_t* data) + : _owner(owner), _size(size), _data(data) {} + +StoragePointer Storage::createView(size_t viewSize, size_t offset) const { auto selfSize = size(); if (0 == viewSize) { viewSize = selfSize; @@ -20,14 +23,16 @@ ViewStoragePointer Storage::createView(size_t viewSize, size_t offset) const { if ((viewSize + offset) > selfSize) { throw std::runtime_error("Invalid mapping range"); } - return ViewStoragePointer(new ViewStorage(shared_from_this(), viewSize, data() + offset)); + auto viewPointer = new ViewStorage(shared_from_this(), viewSize, data() + offset); + return viewPointer->shared_from_this(); } -MemoryStoragePointer Storage::toMemoryStorage() const { - return MemoryStoragePointer(new MemoryStorage(size(), data())); +StoragePointer Storage::toMemoryStorage() const { + auto rawPointer = new MemoryStorage(size(), data()); + return rawPointer->shared_from_this(); } -FileStoragePointer Storage::toFileStorage(const QString& filename) const { +StoragePointer Storage::toFileStorage(const QString& filename) const { return FileStorage::create(filename, size(), data()); } @@ -38,7 +43,7 @@ MemoryStorage::MemoryStorage(size_t size, const uint8_t* data) { } } -FileStoragePointer FileStorage::create(const QString& filename, size_t size, const uint8_t* data) { +StoragePointer FileStorage::create(const QString& filename, size_t size, const uint8_t* data) { QFile file(filename); if (!file.open(QFile::ReadWrite | QIODevice::Truncate)) { throw std::runtime_error("Unable to open file for writing"); diff --git a/libraries/shared/src/shared/Storage.h b/libraries/shared/src/shared/Storage.h index b79b9d6080..4b97e14178 100644 --- a/libraries/shared/src/shared/Storage.h +++ b/libraries/shared/src/shared/Storage.h @@ -19,12 +19,6 @@ namespace storage { class Storage; using StoragePointer = std::shared_ptr; - class MemoryStorage; - using MemoryStoragePointer = std::shared_ptr; - class FileStorage; - using FileStoragePointer = std::shared_ptr; - class ViewStorage; - using ViewStoragePointer = std::shared_ptr; class Storage : public std::enable_shared_from_this { public: @@ -32,9 +26,9 @@ namespace storage { virtual const uint8_t* data() const = 0; virtual size_t size() const = 0; - ViewStoragePointer createView(size_t size = 0, size_t offset = 0) const; - FileStoragePointer toFileStorage(const QString& filename) const; - MemoryStoragePointer toMemoryStorage() const; + StoragePointer createView(size_t size = 0, size_t offset = 0) const; + StoragePointer toFileStorage(const QString& filename) const; + StoragePointer toMemoryStorage() const; // Aliases to prevent having to re-write a ton of code inline size_t getSize() const { return size(); } @@ -53,7 +47,7 @@ namespace storage { class FileStorage : public Storage { public: - static FileStoragePointer create(const QString& filename, size_t size, const uint8_t* data); + static StoragePointer create(const QString& filename, size_t size, const uint8_t* data); FileStorage(const QString& filename); ~FileStorage(); // Prevent copying @@ -69,7 +63,7 @@ namespace storage { class ViewStorage : public Storage { public: - ViewStorage(const storage::StoragePointer& owner, size_t size, const uint8_t* data) : _owner(owner), _size(size), _data(data) {} + ViewStorage(const storage::StoragePointer& owner, size_t size, const uint8_t* data); const uint8_t* data() const override { return _data; } size_t size() const override { return _size; } private: