Skip to content

Commit 209bdce

Browse files
Image: reworked loading
1 parent b26c016 commit 209bdce

File tree

2 files changed

+81
-56
lines changed

2 files changed

+81
-56
lines changed

TextureLoader/interface/Image.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,9 @@ struct Image : public ObjectBase<IObject>
187187
const ImageDesc& Desc,
188188
RefCntAutoPtr<IDataBlob> pPixels);
189189

190+
static bool Load(IMAGE_FILE_FORMAT FileFormat, const void* pSrcData, size_t SrcDataSize, IDataBlob* pDstPixels, ImageDesc& Desc);
191+
192+
190193
static void LoadTiffFile(const void* pData, size_t Size, IDataBlob* pDstPixels, ImageDesc& Desc);
191194

192195
ImageDesc m_Desc;

TextureLoader/src/Image.cpp

Lines changed: 78 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -356,70 +356,92 @@ static bool LoadImageSTB(const void* pSrcImage,
356356
return true;
357357
}
358358

359+
bool Image::Load(IMAGE_FILE_FORMAT FileFormat, const void* pSrcData, size_t SrcDataSize, IDataBlob* pDstPixels, ImageDesc& Desc)
360+
{
361+
bool Result = false;
362+
switch (FileFormat)
363+
{
364+
case IMAGE_FILE_FORMAT_TIFF:
365+
try
366+
{
367+
LoadTiffFile(pSrcData, SrcDataSize, pDstPixels, Desc);
368+
Result = true;
369+
}
370+
catch (...)
371+
{
372+
LOG_ERROR_MESSAGE("Failed to load TIFF image");
373+
Result = false;
374+
}
375+
break;
376+
377+
case IMAGE_FILE_FORMAT_HDR:
378+
Result = LoadImageSTB(pSrcData, SrcDataSize, VT_FLOAT32, pDstPixels, &Desc);
379+
if (!Result)
380+
{
381+
LOG_ERROR_MESSAGE("Failed to load HDR image from memory. STB only supports 32-bit rle rgbe textures");
382+
}
383+
break;
384+
385+
case IMAGE_FILE_FORMAT_TGA:
386+
Result = LoadImageSTB(pSrcData, SrcDataSize, VT_UINT8, pDstPixels, &Desc);
387+
if (!Result)
388+
{
389+
LOG_ERROR_MESSAGE("Failed to load TGA image");
390+
}
391+
break;
392+
393+
case IMAGE_FILE_FORMAT_PNG:
394+
Result = DecodePng(pSrcData, SrcDataSize, pDstPixels, &Desc) == DECODE_PNG_RESULT_OK;
395+
if (!Result)
396+
{
397+
LOG_ERROR_MESSAGE("Failed to load png image");
398+
}
399+
break;
400+
401+
case IMAGE_FILE_FORMAT_JPEG:
402+
Result = DecodeJpeg(pSrcData, SrcDataSize, pDstPixels, &Desc) == DECODE_JPEG_RESULT_OK;
403+
if (!Result)
404+
{
405+
LOG_ERROR_MESSAGE("Failed to load jpeg image");
406+
}
407+
break;
408+
409+
case IMAGE_FILE_FORMAT_SGI:
410+
Result = LoadSGI(pSrcData, SrcDataSize, pDstPixels, &Desc);
411+
if (!Result)
412+
{
413+
LOG_ERROR_MESSAGE("Failed to load SGI image");
414+
}
415+
break;
416+
417+
case IMAGE_FILE_FORMAT_DDS:
418+
Result = false;
419+
LOG_ERROR_MESSAGE("An image can't be created from DDS file. Use CreateTextureFromFile() or CreateTextureFromDDS() functions.");
420+
break;
421+
422+
case IMAGE_FILE_FORMAT_KTX:
423+
Result = false;
424+
LOG_ERROR_MESSAGE("An image can't be created from KTX file. Use CreateTextureFromFile() or CreateTextureFromKTX() functions.");
425+
break;
426+
427+
default:
428+
Result = false;
429+
LOG_ERROR_MESSAGE("Unknown image format.");
430+
break;
431+
}
432+
433+
return Result;
434+
}
435+
359436
Image::Image(IReferenceCounters* pRefCounters,
360437
const void* pSrcData,
361438
size_t SrcDataSize,
362439
const ImageLoadInfo& LoadInfo) :
363440
TBase{pRefCounters},
364441
m_pData{DataBlobImpl::Create(LoadInfo.pAllocator)}
365442
{
366-
if (LoadInfo.Format == IMAGE_FILE_FORMAT_TIFF)
367-
{
368-
LoadTiffFile(pSrcData, SrcDataSize, m_pData, m_Desc);
369-
}
370-
else if (LoadInfo.Format == IMAGE_FILE_FORMAT_HDR)
371-
{
372-
if (!LoadImageSTB(pSrcData, SrcDataSize, VT_FLOAT32, m_pData, &m_Desc))
373-
{
374-
LOG_ERROR_MESSAGE("Failed to load HDR image from memory. STB only supports 32-bit rle rgbe textures");
375-
return;
376-
}
377-
}
378-
else if (LoadInfo.Format == IMAGE_FILE_FORMAT_TGA)
379-
{
380-
if (!LoadImageSTB(pSrcData, SrcDataSize, VT_UINT8, m_pData, &m_Desc))
381-
{
382-
LOG_ERROR_MESSAGE("Failed to load TGA image");
383-
return;
384-
}
385-
}
386-
else if (LoadInfo.Format == IMAGE_FILE_FORMAT_PNG)
387-
{
388-
if (DecodePng(pSrcData, SrcDataSize, m_pData, &m_Desc) != DECODE_PNG_RESULT_OK)
389-
{
390-
LOG_ERROR_MESSAGE("Failed to decode png image");
391-
return;
392-
}
393-
}
394-
else if (LoadInfo.Format == IMAGE_FILE_FORMAT_JPEG)
395-
{
396-
if (DecodeJpeg(pSrcData, SrcDataSize, m_pData, &m_Desc) != DECODE_JPEG_RESULT_OK)
397-
{
398-
LOG_ERROR_MESSAGE("Failed to decode jpeg image");
399-
return;
400-
}
401-
}
402-
else if (LoadInfo.Format == IMAGE_FILE_FORMAT_SGI)
403-
{
404-
if (!LoadSGI(pSrcData, SrcDataSize, m_pData, &m_Desc))
405-
{
406-
LOG_ERROR_MESSAGE("Failed to load SGI image");
407-
return;
408-
}
409-
}
410-
else if (LoadInfo.Format == IMAGE_FILE_FORMAT_DDS)
411-
{
412-
LOG_ERROR_MESSAGE("An image can't be created from DDS file. Use CreateTextureFromFile() or CreateTextureFromDDS() functions.");
413-
return;
414-
}
415-
else if (LoadInfo.Format == IMAGE_FILE_FORMAT_KTX)
416-
{
417-
LOG_ERROR_MESSAGE("An image can't be created from KTX file. Use CreateTextureFromFile() or CreateTextureFromKTX() functions.");
418-
return;
419-
}
420-
else
443+
if (!Load(LoadInfo.Format, pSrcData, SrcDataSize, m_pData, m_Desc))
421444
{
422-
LOG_ERROR_MESSAGE("Unknown image format.");
423445
return;
424446
}
425447

0 commit comments

Comments
 (0)