summaryrefslogtreecommitdiffstats
path: root/TextureLoader/src
diff options
context:
space:
mode:
authorEgor Yusov <egor.yusov@gmail.com>2019-06-27 16:12:22 +0000
committerEgor Yusov <egor.yusov@gmail.com>2019-06-27 16:12:22 +0000
commitf589ed9931f49ab02e853a8abab215778e218a9b (patch)
tree37c16405a4b00ff0a90d50f2380b3f299cfcdde5 /TextureLoader/src
parentUpdated readme: added license and contributing sections (diff)
downloadDiligentTools-f589ed9931f49ab02e853a8abab215778e218a9b.tar.gz
DiligentTools-f589ed9931f49ab02e853a8abab215778e218a9b.zip
Minor updates to image loading functions
Diffstat (limited to 'TextureLoader/src')
-rw-r--r--TextureLoader/src/Image.cpp71
-rw-r--r--TextureLoader/src/TextureUtilities.cpp68
2 files changed, 69 insertions, 70 deletions
diff --git a/TextureLoader/src/Image.cpp b/TextureLoader/src/Image.cpp
index be05fe0..b7703ab 100644
--- a/TextureLoader/src/Image.cpp
+++ b/TextureLoader/src/Image.cpp
@@ -38,6 +38,8 @@
#include "RefCntAutoPtr.h"
#include "Align.h"
#include "GraphicsAccessories.h"
+#include "BasicFileStream.h"
+#include "StringTools.h"
namespace Diligent
{
@@ -424,9 +426,9 @@ Image::Image( IReferenceCounters* pRefCounters,
}
}
-void Image::CreateFromDataBlob(IDataBlob *pFileData,
+void Image::CreateFromDataBlob(IDataBlob* pFileData,
const ImageLoadInfo& LoadInfo,
- Image **ppImage)
+ Image** ppImage)
{
*ppImage = MakeNewRCObj<Image>()(pFileData, LoadInfo);
(*ppImage)->AddRef();
@@ -689,4 +691,69 @@ EImageFileFormat Image::GetFileFormat(const Uint8* pData, size_t Size)
return EImageFileFormat::unknown;
}
+
+EImageFileFormat CreateImageFromFile(const Char* FilePath,
+ Image** ppImage,
+ IDataBlob** ppRawData)
+{
+ EImageFileFormat ImgFileFormat = EImageFileFormat::unknown;
+ try
+ {
+ RefCntAutoPtr<BasicFileStream> pFileStream(MakeNewRCObj<BasicFileStream>()(FilePath, EFileAccessMode::Read));
+ if(!pFileStream->IsValid())
+ LOG_ERROR_AND_THROW("Failed to open image file \"", FilePath, '\"');
+
+ RefCntAutoPtr<IDataBlob> pFileData(MakeNewRCObj<DataBlobImpl>()(0));
+ pFileStream->Read(pFileData);
+
+ ImgFileFormat = Image::GetFileFormat(reinterpret_cast<Uint8*>(pFileData->GetDataPtr()), pFileData->GetSize());
+ if (ImgFileFormat == EImageFileFormat::unknown)
+ {
+ LOG_WARNING_MESSAGE("Unable to derive image format from the header for file \"", FilePath, "\". Trying to analyze extension.");
+
+ // Try to use extension to derive format
+ auto *pDotPos = strrchr(FilePath, '.');
+ if (pDotPos == nullptr)
+ LOG_ERROR_AND_THROW("Unable to recognize file format: file name \"", FilePath, "\" does not contain extension");
+
+ auto *pExtension = pDotPos + 1;
+ if (*pExtension == 0)
+ LOG_ERROR_AND_THROW("Unable to recognize file format: file name \"", FilePath, "\" contain empty extension");
+
+ String Extension = StrToLower(pExtension);
+ if (Extension == "png")
+ ImgFileFormat = EImageFileFormat::png;
+ else if (Extension == "jpeg" || Extension == "jpg")
+ ImgFileFormat = EImageFileFormat::jpeg;
+ else if (Extension == "tiff" || Extension == "tif")
+ ImgFileFormat = EImageFileFormat::tiff;
+ else if (Extension == "dds")
+ ImgFileFormat = EImageFileFormat::dds;
+ else if (Extension == "ktx")
+ ImgFileFormat = EImageFileFormat::ktx;
+ else
+ LOG_ERROR_AND_THROW("Unsupported file format ", Extension);
+ }
+
+ if (ImgFileFormat == EImageFileFormat::png ||
+ ImgFileFormat == EImageFileFormat::jpeg ||
+ ImgFileFormat == EImageFileFormat::tiff)
+ {
+ ImageLoadInfo ImgLoadInfo;
+ ImgLoadInfo.Format = ImgFileFormat;
+ Image::CreateFromDataBlob(pFileData, ImgLoadInfo, ppImage);
+ }
+ else if(ppRawData != nullptr)
+ {
+ *ppRawData = pFileData.Detach();
+ }
+ }
+ catch (std::runtime_error &err)
+ {
+ LOG_ERROR("Failed to create image from file: ", err.what());
+ }
+
+ return ImgFileFormat;
+}
+
} // namespace Diligent
diff --git a/TextureLoader/src/TextureUtilities.cpp b/TextureLoader/src/TextureUtilities.cpp
index 7a41c7a..e136f07 100644
--- a/TextureLoader/src/TextureUtilities.cpp
+++ b/TextureLoader/src/TextureUtilities.cpp
@@ -26,80 +26,12 @@
#include "Errors.h"
#include "TextureLoader.h"
#include "Image.h"
-#include "BasicFileStream.h"
#include "RefCntAutoPtr.h"
#include "DataBlobImpl.h"
-#include "StringTools.h"
-
-using namespace Diligent;
namespace Diligent
{
-EImageFileFormat CreateImageFromFile(const Char* FilePath,
- Image** ppImage,
- IDataBlob** ppRawData)
-{
- EImageFileFormat ImgFileFormat = EImageFileFormat::unknown;
- try
- {
- RefCntAutoPtr<BasicFileStream> pFileStream(MakeNewRCObj<BasicFileStream>()(FilePath, EFileAccessMode::Read));
- if(!pFileStream->IsValid())
- LOG_ERROR_AND_THROW("Failed to open image file \"", FilePath, '\"');
-
- RefCntAutoPtr<IDataBlob> pFileData(MakeNewRCObj<DataBlobImpl>()(0));
- pFileStream->Read(pFileData);
-
- ImgFileFormat = Image::GetFileFormat(reinterpret_cast<Uint8*>(pFileData->GetDataPtr()), pFileData->GetSize());
- if (ImgFileFormat == EImageFileFormat::unknown)
- {
- LOG_WARNING_MESSAGE("Unable to derive image format from the header for file \"", FilePath, "\". Trying to analyze extension.");
-
- // Try to use extension to derive format
- auto *pDotPos = strrchr(FilePath, '.');
- if (pDotPos == nullptr)
- LOG_ERROR_AND_THROW("Unable to recognize file format: file name \"", FilePath, "\" does not contain extension");
-
- auto *pExtension = pDotPos + 1;
- if (*pExtension == 0)
- LOG_ERROR_AND_THROW("Unable to recognize file format: file name \"", FilePath, "\" contain empty extension");
-
- String Extension = StrToLower(pExtension);
- if (Extension == "png")
- ImgFileFormat = EImageFileFormat::png;
- else if (Extension == "jpeg" || Extension == "jpg")
- ImgFileFormat = EImageFileFormat::jpeg;
- else if (Extension == "tiff" || Extension == "tif")
- ImgFileFormat = EImageFileFormat::tiff;
- else if (Extension == "dds")
- ImgFileFormat = EImageFileFormat::dds;
- else if (Extension == "ktx")
- ImgFileFormat = EImageFileFormat::ktx;
- else
- LOG_ERROR_AND_THROW("Unsupported file format ", Extension);
- }
-
- if (ImgFileFormat == EImageFileFormat::png ||
- ImgFileFormat == EImageFileFormat::jpeg ||
- ImgFileFormat == EImageFileFormat::tiff)
- {
- ImageLoadInfo ImgLoadInfo;
- ImgLoadInfo.Format = ImgFileFormat;
- Image::CreateFromDataBlob(pFileData, ImgLoadInfo, ppImage);
- }
- else
- {
- *ppRawData = pFileData.Detach();
- }
- }
- catch (std::runtime_error &err)
- {
- LOG_ERROR("Failed to create image from file: ", err.what());
- }
-
- return ImgFileFormat;
-}
-
void CreateTextureFromFile(const Char* FilePath,
const TextureLoadInfo& TexLoadInfo,
IRenderDevice* pDevice,