@@ -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+
359436Image::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