Skip to content

Commit 6076255

Browse files
Texture Loader: added c++ version of CreateTextureLoaderFromDataBlob that takes data blob auto ptr
1 parent cfd603a commit 6076255

File tree

4 files changed

+38
-18
lines changed

4 files changed

+38
-18
lines changed

TextureLoader/interface/Image.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,9 +130,9 @@ struct Image : public ObjectBase<IObject>
130130
Image** ppImage);
131131

132132
/// Creates a new image from memory
133-
static void CreateFromMemory(const ImageDesc& Desc,
134-
IDataBlob* pPixels,
135-
Image** ppImage);
133+
static void CreateFromMemory(const ImageDesc& Desc,
134+
RefCntAutoPtr<IDataBlob> pPixels,
135+
Image** ppImage);
136136

137137
struct EncodeInfo
138138
{
@@ -179,9 +179,9 @@ struct Image : public ObjectBase<IObject>
179179
const IDataBlob* pFileData,
180180
const ImageLoadInfo& LoadInfo);
181181

182-
Image(IReferenceCounters* pRefCounters,
183-
const ImageDesc& Desc,
184-
IDataBlob* pPixels);
182+
Image(IReferenceCounters* pRefCounters,
183+
const ImageDesc& Desc,
184+
RefCntAutoPtr<IDataBlob> pPixels);
185185

186186
void LoadTiffFile(const IDataBlob* pFileData, const ImageLoadInfo& LoadInfo);
187187

TextureLoader/interface/TextureLoader.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
#include "../../../DiligentCore/Graphics/GraphicsEngine/interface/Texture.h"
3333
#include "Image.h"
3434

35+
#if DILIGENT_CPP_INTERFACE
36+
# include "../../../DiligentCore/Common/interface/RefCntAutoPtr.hpp"
37+
#endif
38+
3539
DILIGENT_BEGIN_NAMESPACE(Diligent)
3640

3741
struct Image;
@@ -271,6 +275,12 @@ void DILIGENT_GLOBAL_FUNCTION(CreateTextureLoaderFromDataBlob)(IDataBlob*
271275
const TextureLoadInfo REF TexLoadInfo,
272276
ITextureLoader** ppLoader);
273277

278+
#if DILIGENT_CPP_INTERFACE
279+
void CreateTextureLoaderFromDataBlob(RefCntAutoPtr<IDataBlob> pDataBlob,
280+
const TextureLoadInfo& TexLoadInfo,
281+
ITextureLoader** ppLoader);
282+
#endif
283+
274284
/// Writes texture data as DDS file.
275285

276286
/// \param [in] FilePath - DDS file path.

TextureLoader/src/Image.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -406,20 +406,20 @@ void Image::CreateFromDataBlob(const IDataBlob* pFileData,
406406
(*ppImage)->AddRef();
407407
}
408408

409-
Image::Image(IReferenceCounters* pRefCounters,
410-
const ImageDesc& Desc,
411-
IDataBlob* pPixels) :
409+
Image::Image(IReferenceCounters* pRefCounters,
410+
const ImageDesc& Desc,
411+
RefCntAutoPtr<IDataBlob> pPixels) :
412412
TBase{pRefCounters},
413413
m_Desc{Desc},
414-
m_pData{pPixels}
414+
m_pData{std::move(pPixels)}
415415
{
416416
}
417417

418-
void Image::CreateFromMemory(const ImageDesc& Desc,
419-
IDataBlob* pPixels,
420-
Image** ppImage)
418+
void Image::CreateFromMemory(const ImageDesc& Desc,
419+
RefCntAutoPtr<IDataBlob> pPixels,
420+
Image** ppImage)
421421
{
422-
*ppImage = MakeNewRCObj<Image>()(Desc, pPixels);
422+
*ppImage = MakeNewRCObj<Image>()(Desc, std::move(pPixels));
423423
(*ppImage)->AddRef();
424424
}
425425

TextureLoader/src/TextureLoaderImpl.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -525,13 +525,16 @@ void CreateTextureLoaderFromMemory(const void* pData,
525525
}
526526
}
527527

528-
void CreateTextureLoaderFromDataBlob(IDataBlob* pDataBlob,
529-
const TextureLoadInfo& TexLoadInfo,
530-
ITextureLoader** ppLoader)
528+
void CreateTextureLoaderFromDataBlob(RefCntAutoPtr<IDataBlob> pDataBlob,
529+
const TextureLoadInfo& TexLoadInfo,
530+
ITextureLoader** ppLoader)
531531
{
532532
try
533533
{
534-
RefCntAutoPtr<ITextureLoader> pTexLoader{MakeNewRCObj<TextureLoaderImpl>()(TexLoadInfo, pDataBlob->GetConstDataPtr<Uint8>(), pDataBlob->GetSize(), RefCntAutoPtr<IDataBlob>{pDataBlob})};
534+
const Uint8* pData = pDataBlob->GetConstDataPtr<Uint8>();
535+
const size_t Size = pDataBlob->GetSize();
536+
537+
RefCntAutoPtr<ITextureLoader> pTexLoader{MakeNewRCObj<TextureLoaderImpl>()(TexLoadInfo, pData, Size, std::move(pDataBlob))};
535538
if (pTexLoader)
536539
pTexLoader->QueryInterface(IID_TextureLoader, reinterpret_cast<IObject**>(ppLoader));
537540
}
@@ -541,6 +544,13 @@ void CreateTextureLoaderFromDataBlob(IDataBlob* pDataBlob,
541544
}
542545
}
543546

547+
void CreateTextureLoaderFromDataBlob(IDataBlob* pDataBlob,
548+
const TextureLoadInfo& TexLoadInfo,
549+
ITextureLoader** ppLoader)
550+
{
551+
CreateTextureLoaderFromDataBlob(RefCntAutoPtr<IDataBlob>{pDataBlob, IID_DataBlob}, TexLoadInfo, ppLoader);
552+
}
553+
544554
void CreateTextureLoaderFromImage(Image* pSrcImage,
545555
const TextureLoadInfo& TexLoadInfo,
546556
ITextureLoader** ppLoader)

0 commit comments

Comments
 (0)