diff --git a/code/glTFAsset.h b/code/glTFAsset.h index 0c3de16a5..e1daf27a2 100644 --- a/code/glTFAsset.h +++ b/code/glTFAsset.h @@ -649,7 +649,7 @@ namespace glTF int width, height; private: - uint8_t* mData; + std::unique_ptr mData; size_t mDataLength; public: @@ -664,7 +664,7 @@ namespace glTF { return mDataLength; } inline const uint8_t* GetData() const - { return mData; } + { return mData.get(); } inline uint8_t* StealData(); diff --git a/code/glTFAsset.inl b/code/glTFAsset.inl index ee4f93e2f..b01957f3b 100644 --- a/code/glTFAsset.inl +++ b/code/glTFAsset.inl @@ -601,7 +601,6 @@ T Accessor::Indexer::GetValue(int i) inline Image::Image() : width(0) , height(0) - , mData(0) , mDataLength(0) { @@ -624,8 +623,8 @@ inline void Image::Read(Value& obj, Asset& r) Ref bv = r.bufferViews.Get(bufferViewId); if (bv) { mDataLength = bv->byteLength; - mData = new uint8_t[mDataLength]; - memcpy(mData, bv->buffer->GetPointer() + bv->byteOffset, mDataLength); + mData.reset(new uint8_t[mDataLength]); + memcpy(mData.get(), bv->buffer->GetPointer() + bv->byteOffset, mDataLength); } } } @@ -640,7 +639,9 @@ inline void Image::Read(Value& obj, Asset& r) if (ParseDataURI(uristr, uri->GetStringLength(), dataURI)) { mimeType = dataURI.mediaType; if (dataURI.base64) { - mDataLength = Util::DecodeBase64(dataURI.data, dataURI.dataLength, mData); + uint8_t *ptr = nullptr; + mDataLength = Util::DecodeBase64(dataURI.data, dataURI.dataLength, ptr); + mData.reset(ptr); } } else { @@ -652,10 +653,8 @@ inline void Image::Read(Value& obj, Asset& r) inline uint8_t* Image::StealData() { - uint8_t* data = mData; mDataLength = 0; - mData = 0; - return data; + return mData.release(); } inline void Image::SetData(uint8_t* data, size_t length, Asset& r) @@ -670,7 +669,7 @@ inline void Image::SetData(uint8_t* data, size_t length, Asset& r) bufferView->byteOffset = b->AppendData(data, length); } else { // text file: will be stored as a data uri - this->mData = data; + this->mData.reset(data); this->mDataLength = length; } } diff --git a/code/glTFImporter.cpp b/code/glTFImporter.cpp index 5d1b5afab..381e459fd 100644 --- a/code/glTFImporter.cpp +++ b/code/glTFImporter.cpp @@ -616,7 +616,7 @@ void glTFImporter::ImportEmbeddedTextures(glTF::Asset& r) // Add the embedded textures for (size_t i = 0; i < r.images.Size(); ++i) { - Image img = r.images[i]; + Image &img = r.images[i]; if (!img.HasData()) continue; int idx = mScene->mNumTextures++;