mirror of
https://github.com/lubosz/overte.git
synced 2025-08-07 17:41:12 +02:00
Fix shared pointer usage in storage abstraction
This commit is contained in:
parent
e94f803b84
commit
62fcd238ae
3 changed files with 20 additions and 20 deletions
|
@ -389,12 +389,14 @@ const Element& Texture::getStoredMipFormat() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Texture::assignStoredMip(uint16 level, Size size, const Byte* bytes) {
|
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);
|
assignStoredMip(level, storage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Texture::assignStoredMipFace(uint16 level, uint8 face, Size size, const Byte* bytes) {
|
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);
|
assignStoredMipFace(level, face, storage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -973,4 +975,3 @@ Texture::ExternalUpdates Texture::getUpdates() const {
|
||||||
void Texture::setStorage(std::unique_ptr<Storage>& newStorage) {
|
void Texture::setStorage(std::unique_ptr<Storage>& newStorage) {
|
||||||
_storage.swap(newStorage);
|
_storage.swap(newStorage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,10 @@
|
||||||
|
|
||||||
using namespace storage;
|
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();
|
auto selfSize = size();
|
||||||
if (0 == viewSize) {
|
if (0 == viewSize) {
|
||||||
viewSize = selfSize;
|
viewSize = selfSize;
|
||||||
|
@ -20,14 +23,16 @@ ViewStoragePointer Storage::createView(size_t viewSize, size_t offset) const {
|
||||||
if ((viewSize + offset) > selfSize) {
|
if ((viewSize + offset) > selfSize) {
|
||||||
throw std::runtime_error("Invalid mapping range");
|
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 {
|
StoragePointer Storage::toMemoryStorage() const {
|
||||||
return MemoryStoragePointer(new MemoryStorage(size(), data()));
|
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());
|
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);
|
QFile file(filename);
|
||||||
if (!file.open(QFile::ReadWrite | QIODevice::Truncate)) {
|
if (!file.open(QFile::ReadWrite | QIODevice::Truncate)) {
|
||||||
throw std::runtime_error("Unable to open file for writing");
|
throw std::runtime_error("Unable to open file for writing");
|
||||||
|
|
|
@ -19,12 +19,6 @@
|
||||||
namespace storage {
|
namespace storage {
|
||||||
class Storage;
|
class Storage;
|
||||||
using StoragePointer = std::shared_ptr<const Storage>;
|
using StoragePointer = std::shared_ptr<const Storage>;
|
||||||
class MemoryStorage;
|
|
||||||
using MemoryStoragePointer = std::shared_ptr<const MemoryStorage>;
|
|
||||||
class FileStorage;
|
|
||||||
using FileStoragePointer = std::shared_ptr<const FileStorage>;
|
|
||||||
class ViewStorage;
|
|
||||||
using ViewStoragePointer = std::shared_ptr<const ViewStorage>;
|
|
||||||
|
|
||||||
class Storage : public std::enable_shared_from_this<Storage> {
|
class Storage : public std::enable_shared_from_this<Storage> {
|
||||||
public:
|
public:
|
||||||
|
@ -32,9 +26,9 @@ namespace storage {
|
||||||
virtual const uint8_t* data() const = 0;
|
virtual const uint8_t* data() const = 0;
|
||||||
virtual size_t size() const = 0;
|
virtual size_t size() const = 0;
|
||||||
|
|
||||||
ViewStoragePointer createView(size_t size = 0, size_t offset = 0) const;
|
StoragePointer createView(size_t size = 0, size_t offset = 0) const;
|
||||||
FileStoragePointer toFileStorage(const QString& filename) const;
|
StoragePointer toFileStorage(const QString& filename) const;
|
||||||
MemoryStoragePointer toMemoryStorage() const;
|
StoragePointer toMemoryStorage() const;
|
||||||
|
|
||||||
// Aliases to prevent having to re-write a ton of code
|
// Aliases to prevent having to re-write a ton of code
|
||||||
inline size_t getSize() const { return size(); }
|
inline size_t getSize() const { return size(); }
|
||||||
|
@ -53,7 +47,7 @@ namespace storage {
|
||||||
|
|
||||||
class FileStorage : public Storage {
|
class FileStorage : public Storage {
|
||||||
public:
|
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(const QString& filename);
|
||||||
~FileStorage();
|
~FileStorage();
|
||||||
// Prevent copying
|
// Prevent copying
|
||||||
|
@ -69,7 +63,7 @@ namespace storage {
|
||||||
|
|
||||||
class ViewStorage : public Storage {
|
class ViewStorage : public Storage {
|
||||||
public:
|
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; }
|
const uint8_t* data() const override { return _data; }
|
||||||
size_t size() const override { return _size; }
|
size_t size() const override { return _size; }
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in a new issue