summaryrefslogtreecommitdiffstats
path: root/TextureLoader/src/TextureUtilities.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TextureLoader/src/TextureUtilities.cpp')
-rw-r--r--TextureLoader/src/TextureUtilities.cpp65
1 files changed, 37 insertions, 28 deletions
diff --git a/TextureLoader/src/TextureUtilities.cpp b/TextureLoader/src/TextureUtilities.cpp
index 48f5bd5..3bd8442 100644
--- a/TextureLoader/src/TextureUtilities.cpp
+++ b/TextureLoader/src/TextureUtilities.cpp
@@ -40,40 +40,49 @@ void CreateImageFromFile( const Diligent::Char *FilePath,
Image **ppImage,
IDataBlob **ppDDSData)
{
- auto *pDotPos = strrchr( FilePath, '.' );
- if( pDotPos == nullptr )
- LOG_ERROR_AND_THROW( "File path ", FilePath, " does not contain extension" );
+ try
+ {
+ auto *pDotPos = strrchr(FilePath, '.');
+ if (pDotPos == nullptr)
+ LOG_ERROR_AND_THROW("File path \"", FilePath, "\" does not contain extension");
- auto *pExtension = pDotPos + 1;
- if( *pExtension == 0 )
- LOG_ERROR_AND_THROW( "File path ", FilePath, " contains empty extension" );
+ auto *pExtension = pDotPos + 1;
+ if (*pExtension == 0)
+ LOG_ERROR_AND_THROW("File path \"", FilePath, "\" contains empty extension");
- String Extension(pExtension);
- std::transform( Extension.begin(), Extension.end(), Extension.begin(), ::tolower );
+ String Extension(pExtension);
+ std::transform(Extension.begin(), Extension.end(), Extension.begin(), ::tolower);
- Diligent::RefCntAutoPtr<BasicFileStream> pFileStream( new BasicFileStream( FilePath, EFileAccessMode::Read ) );
+ RefCntAutoPtr<BasicFileStream> pFileStream(MakeNewRCObj<BasicFileStream>()(FilePath, EFileAccessMode::Read));
+ if(!pFileStream->IsValid())
+ LOG_ERROR_AND_THROW("Failed to open image file \"", FilePath, '\"');
- if( Extension == "dds" )
- {
- VERIFY_EXPR(ppDDSData != nullptr);
- *ppDDSData = new DataBlobImpl;
- pFileStream->Read(*ppDDSData);
- (*ppDDSData)->AddRef();
- }
- else
- {
- ImageLoadInfo ImgLoadInfo;
- if( Extension == "png" )
- ImgLoadInfo.Format = EImageFileFormat::png;
- else if( Extension == "jpeg" || Extension == "jpg" )
- ImgLoadInfo.Format = EImageFileFormat::jpeg;
- else if( Extension == "tiff" || Extension == "tif" )
- ImgLoadInfo.Format = EImageFileFormat::tiff;
+ if (Extension == "dds")
+ {
+ VERIFY_EXPR(ppDDSData != nullptr);
+ *ppDDSData = MakeNewRCObj<DataBlobImpl>()(0);
+ pFileStream->Read(*ppDDSData);
+ (*ppDDSData)->AddRef();
+ }
else
- LOG_ERROR_AND_THROW( "Unsupported file format ", Extension );
+ {
+ ImageLoadInfo ImgLoadInfo;
+ if (Extension == "png")
+ ImgLoadInfo.Format = EImageFileFormat::png;
+ else if (Extension == "jpeg" || Extension == "jpg")
+ ImgLoadInfo.Format = EImageFileFormat::jpeg;
+ else if (Extension == "tiff" || Extension == "tif")
+ ImgLoadInfo.Format = EImageFileFormat::tiff;
+ else
+ LOG_ERROR_AND_THROW("Unsupported file format ", Extension);
- *ppImage = new Image(pFileStream, ImgLoadInfo);
- (*ppImage)->AddRef();
+ *ppImage = MakeNewRCObj<Image>()(pFileStream, ImgLoadInfo);
+ (*ppImage)->AddRef();
+ }
+ }
+ catch (std::runtime_error &err)
+ {
+ LOG_ERROR("Failed to create image from file: ", err.what())
}
}