@@ -124,11 +124,11 @@ static TextureDesc TexDescFromTexLoadInfo(const TextureLoadInfo& TexLoadInfo, co
124124 return TexDesc;
125125}
126126
127- TextureLoaderImpl::TextureLoaderImpl (IReferenceCounters* pRefCounters,
128- const TextureLoadInfo& TexLoadInfo,
129- const Uint8* pData,
130- size_t DataSize,
131- RefCntAutoPtr<IDataBlob>&& pDataBlob) :
127+ TextureLoaderImpl::TextureLoaderImpl (IReferenceCounters* pRefCounters,
128+ const TextureLoadInfo& TexLoadInfo,
129+ const Uint8* pData,
130+ size_t DataSize,
131+ RefCntAutoPtr<IDataBlob> pDataBlob) :
132132 TBase{pRefCounters},
133133 m_pDataBlob{std::move (pDataBlob)},
134134 m_Name{TexLoadInfo.Name != nullptr ? TexLoadInfo.Name : " " },
@@ -158,8 +158,8 @@ TextureLoaderImpl::TextureLoaderImpl(IReferenceCounters* pRefCounters,
158158 ImgLoadInfo.pAllocator = TexLoadInfo.pAllocator ;
159159 RefCntAutoPtr<Image> pImage;
160160 Image::CreateFromDataBlob (m_pDataBlob, ImgLoadInfo, &pImage);
161- LoadFromImage (pImage, TexLoadInfo);
162161 m_pDataBlob.Release ();
162+ LoadFromImage (std::move (pImage), TexLoadInfo);
163163 }
164164 else
165165 {
@@ -181,12 +181,12 @@ TextureLoaderImpl::TextureLoaderImpl(IReferenceCounters* pRefCounters,
181181
182182TextureLoaderImpl::TextureLoaderImpl (IReferenceCounters* pRefCounters,
183183 const TextureLoadInfo& TexLoadInfo,
184- Image* pImage) :
184+ RefCntAutoPtr< Image> pImage) :
185185 TBase{pRefCounters},
186186 m_Name{TexLoadInfo.Name != nullptr ? TexLoadInfo.Name : " " },
187187 m_TexDesc{TexDescFromTexLoadInfo (TexLoadInfo, m_Name)}
188188{
189- LoadFromImage (pImage, TexLoadInfo);
189+ LoadFromImage (std::move ( pImage) , TexLoadInfo);
190190}
191191
192192void TextureLoaderImpl::CreateTexture (IRenderDevice* pDevice,
@@ -196,7 +196,7 @@ void TextureLoaderImpl::CreateTexture(IRenderDevice* pDevice,
196196 pDevice->CreateTexture (m_TexDesc, &InitData, ppTexture);
197197}
198198
199- void TextureLoaderImpl::LoadFromImage (Image* pImage, const TextureLoadInfo& TexLoadInfo)
199+ void TextureLoaderImpl::LoadFromImage (RefCntAutoPtr< Image> pImage, const TextureLoadInfo& TexLoadInfo)
200200{
201201 VERIFY_EXPR (pImage != nullptr );
202202
@@ -301,12 +301,14 @@ void TextureLoaderImpl::LoadFromImage(Image* pImage, const TextureLoadInfo& TexL
301301 }
302302
303303 CopyPixels (CopyAttribs);
304+ // Release original image
305+ pImage.Release ();
304306 }
305307 else
306308 {
307309 // Keep strong reference to the image to prevent it from being destroyed
308310 // since we are going to use its data directly.
309- m_pImage = pImage;
311+ m_pImage = std::move ( pImage) ;
310312 m_SubResources[0 ].pData = m_pImage->GetData ()->GetConstDataPtr ();
311313 m_SubResources[0 ].Stride = ImgDesc.RowStride ;
312314 }
@@ -459,6 +461,7 @@ void TextureLoaderImpl::CompressSubresources(Uint32 NumComponents, Uint32 NumSrc
459461
460462 SubResData.pData = CompressedMip->GetDataPtr ();
461463 SubResData.Stride = CompressedStride;
464+ m_Mips[SubResIndex].Release ();
462465 }
463466 }
464467
@@ -481,8 +484,8 @@ void CreateTextureLoaderFromFile(const char* FilePath,
481484 RefCntAutoPtr<DataBlobImpl> pFileData = DataBlobImpl::Create (TexLoadInfo.pAllocator );
482485 File->Read (pFileData);
483486
484- RefCntAutoPtr<ITextureLoader > pTexLoader{
485- MakeNewRCObj<TextureLoaderImpl>()(TexLoadInfo, pFileData->GetConstDataPtr <Uint8>(), pFileData->GetSize (), std::move (pFileData)) //
487+ RefCntAutoPtr<TextureLoaderImpl > pTexLoader{
488+ MakeNewRCObj<TextureLoaderImpl>()(TexLoadInfo, pFileData->GetConstDataPtr <Uint8>(), pFileData->GetSize (), std::move (pFileData)),
486489 };
487490 if (pTexLoader)
488491 pTexLoader->QueryInterface (IID_TextureLoader, reinterpret_cast <IObject**>(ppLoader));
@@ -541,7 +544,7 @@ void CreateTextureLoaderFromImage(Image* pSrcImage,
541544 VERIFY_EXPR (pSrcImage != nullptr );
542545 try
543546 {
544- RefCntAutoPtr<ITextureLoader> pTexLoader{MakeNewRCObj<TextureLoaderImpl>()(TexLoadInfo, pSrcImage)};
547+ RefCntAutoPtr<ITextureLoader> pTexLoader{MakeNewRCObj<TextureLoaderImpl>()(TexLoadInfo, RefCntAutoPtr<Image>{ pSrcImage} )};
545548 if (pTexLoader)
546549 pTexLoader->QueryInterface (IID_TextureLoader, reinterpret_cast <IObject**>(ppLoader));
547550 }
0 commit comments