diff options
| author | assiduous <assiduous@diligentgraphics.com> | 2020-04-08 01:14:11 +0000 |
|---|---|---|
| committer | assiduous <assiduous@diligentgraphics.com> | 2020-04-08 01:14:11 +0000 |
| commit | 0b7d07f841d8ed1f6da94a8f4a2900c2eff6355d (patch) | |
| tree | 9102a5baca9316e363aa78fc7581d54dcfa9b821 /TextureLoader/interface | |
| parent | Moved ImGuiScopedDisabler to ImGui namespace and renamed to ScopedDisabler (diff) | |
| download | DiligentTools-0b7d07f841d8ed1f6da94a8f4a2900c2eff6355d.tar.gz DiligentTools-0b7d07f841d8ed1f6da94a8f4a2900c2eff6355d.zip | |
Reworked PNG and JPEG image decoding to fix incompatibility of setjmp with c++ destructors. Added JPEG and PNG encoding/decoding tests
Diffstat (limited to 'TextureLoader/interface')
| -rw-r--r-- | TextureLoader/interface/Image.h (renamed from TextureLoader/interface/Image.hpp) | 78 |
1 files changed, 42 insertions, 36 deletions
diff --git a/TextureLoader/interface/Image.hpp b/TextureLoader/interface/Image.h index dd8cc32..9b15e30 100644 --- a/TextureLoader/interface/Image.hpp +++ b/TextureLoader/interface/Image.h @@ -27,64 +27,70 @@ #pragma once -#include <vector> - #include "../../../DiligentCore/Graphics/GraphicsEngine/interface/GraphicsTypes.h" #include "../../../DiligentCore/Primitives/interface/FileStream.h" #include "../../../DiligentCore/Primitives/interface/DataBlob.h" -#include "../../../DiligentCore/Common/interface/RefCntAutoPtr.hpp" -#include "../../../DiligentCore/Common/interface/ObjectBase.hpp" -namespace Diligent -{ +#if DILIGENT_CPP_INTERFACE +# include <vector> + +# include "../../../DiligentCore/Common/interface/RefCntAutoPtr.hpp" +# include "../../../DiligentCore/Common/interface/ObjectBase.hpp" +#endif + +DILIGENT_BEGIN_NAMESPACE(Diligent) /// Image file format -enum class EImageFileFormat -{ +DILIGENT_TYPED_ENUM(IMAGE_FILE_FORMAT, Uint8){ /// Unknown format - unknown = 0, + IMAGE_FILE_FORMAT_UNKNOWN = 0, /// The image is encoded in JPEG format - jpeg, + IMAGE_FILE_FORMAT_JPEG, /// The image is encoded in PNG format - png, + IMAGE_FILE_FORMAT_PNG, /// The image is encoded in TIFF format - tiff, + IMAGE_FILE_FORMAT_TIFF, /// DDS file - dds, + IMAGE_FILE_FORMAT_DDS, /// KTX file - ktx -}; + IMAGE_FILE_FORMAT_KTX}; /// Image loading information struct ImageLoadInfo { /// Image file format - EImageFileFormat Format = EImageFileFormat::unknown; + IMAGE_FILE_FORMAT Format DEFAULT_INITIALIZER(IMAGE_FILE_FORMAT_UNKNOWN); }; +typedef struct ImageLoadInfo ImageLoadInfo; /// Image description struct ImageDesc { /// Image width in pixels - Uint32 Width = 0; + Uint32 Width DEFAULT_INITIALIZER(0); /// Image height in pixels - Uint32 Height = 0; + Uint32 Height DEFAULT_INITIALIZER(0); /// Component type - VALUE_TYPE ComponentType = VT_UNDEFINED; + VALUE_TYPE ComponentType DEFAULT_INITIALIZER(VT_UNDEFINED); /// Number of color components - Uint32 NumComponents = 0; + Uint32 NumComponents DEFAULT_INITIALIZER(0); /// Image row stride in bytes - Uint32 RowStride = 0; + Uint32 RowStride DEFAULT_INITIALIZER(0); }; +typedef struct ImageDesc ImageDesc; + + + +#if DILIGENT_CPP_INTERFACE /// Implementation of a 2D image struct Image : public ObjectBase<IObject> @@ -103,14 +109,14 @@ struct Image : public ObjectBase<IObject> struct EncodeInfo { - Uint32 Width = 0; - Uint32 Height = 0; - TEXTURE_FORMAT TexFormat = TEX_FORMAT_UNKNOWN; - bool KeepAlpha = false; - const void* pData = nullptr; - Uint32 Stride = 0; - EImageFileFormat FileFormat = EImageFileFormat::jpeg; - int JpegQuality = 95; + Uint32 Width = 0; + Uint32 Height = 0; + TEXTURE_FORMAT TexFormat = TEX_FORMAT_UNKNOWN; + bool KeepAlpha = false; + const void* pData = nullptr; + Uint32 Stride = 0; + IMAGE_FILE_FORMAT FileFormat = IMAGE_FILE_FORMAT_JPEG; + int JpegQuality = 95; }; static void Encode(const EncodeInfo& Info, IDataBlob** ppEncodedData); @@ -128,7 +134,7 @@ struct Image : public ObjectBase<IObject> TEXTURE_FORMAT DstFormat, bool KeepAlpha); - static EImageFileFormat GetFileFormat(const Uint8* pData, size_t Size); + static IMAGE_FILE_FORMAT GetFileFormat(const Uint8* pData, size_t Size); private: template <typename AllocatorType, typename ObjectType> @@ -138,9 +144,7 @@ private: IDataBlob* pFileData, const ImageLoadInfo& LoadInfo); - void LoadPngFile(IDataBlob* pFileData, const ImageLoadInfo& LoadInfo); void LoadTiffFile(IDataBlob* pFileData, const ImageLoadInfo& LoadInfo); - void LoadJpegFile(IDataBlob* pFileData, const ImageLoadInfo& LoadInfo); ImageDesc m_Desc; RefCntAutoPtr<IDataBlob> m_pData; @@ -154,8 +158,10 @@ private: /// \param [out] ppRawData - If the file format is not recognized by the function, it will load raw bytes /// and return them in the data blob. This parameter can be null. /// \return Image file format. -EImageFileFormat CreateImageFromFile(const Char* FilePath, - Image** ppImage, - IDataBlob** ppRawData = nullptr); +IMAGE_FILE_FORMAT CreateImageFromFile(const Char* FilePath, + Image** ppImage, + IDataBlob** ppRawData = nullptr); + +#endif -} // namespace Diligent +DILIGENT_END_NAMESPACE // namespace Diligent |
