diff --git a/src/libraries/ddsparse/ddsparse.cpp b/src/libraries/ddsparse/ddsparse.cpp index d583ff3af..6a598886c 100644 --- a/src/libraries/ddsparse/ddsparse.cpp +++ b/src/libraries/ddsparse/ddsparse.cpp @@ -82,19 +82,25 @@ static Format parseDX10Format(DXGIFormat fmt) { case DXGI_FORMAT_BC1_TYPELESS: case DXGI_FORMAT_BC1_UNORM: - case DXGI_FORMAT_BC1_UNORM_SRGB: f = FORMAT_DXT1; break; + case DXGI_FORMAT_BC1_UNORM_SRGB: + f = FORMAT_DXT1srgb; + break; case DXGI_FORMAT_BC2_TYPELESS: case DXGI_FORMAT_BC2_UNORM: - case DXGI_FORMAT_BC2_UNORM_SRGB: f = FORMAT_DXT3; break; + case DXGI_FORMAT_BC2_UNORM_SRGB: + f = FORMAT_DXT3srgb; + break; case DXGI_FORMAT_BC3_TYPELESS: case DXGI_FORMAT_BC3_UNORM: - case DXGI_FORMAT_BC3_UNORM_SRGB: f = FORMAT_DXT5; break; + case DXGI_FORMAT_BC3_UNORM_SRGB: + f = FORMAT_DXT5srgb; + break; case DXGI_FORMAT_BC4_TYPELESS: case DXGI_FORMAT_BC4_UNORM: f = FORMAT_BC4; @@ -126,7 +132,7 @@ static Format parseDX10Format(DXGIFormat fmt) default: break; } - + return f; } @@ -147,7 +153,6 @@ bool isDDS(const void *data, size_t dataSize) DDSHeader *header = (DDSHeader *) &readData[offset]; - // Verify header to validate DDS data. if (header->size != sizeof(DDSHeader) || header->format.size != sizeof(DDSPixelFormat)) return false; @@ -242,12 +247,15 @@ size_t Parser::parseImageSize(Format fmt, int width, int height) const switch (fmt) { case FORMAT_DXT1: + case FORMAT_DXT1srgb: case FORMAT_BC4: case FORMAT_BC4s: numBytesPerBlock = 8; break; case FORMAT_DXT3: + case FORMAT_DXT3srgb: case FORMAT_DXT5: + case FORMAT_DXT5srgb: case FORMAT_BC5s: case FORMAT_BC5: case FORMAT_BC6H: diff --git a/src/libraries/ddsparse/ddsparse.h b/src/libraries/ddsparse/ddsparse.h index d63875744..0becef74a 100644 --- a/src/libraries/ddsparse/ddsparse.h +++ b/src/libraries/ddsparse/ddsparse.h @@ -36,8 +36,11 @@ namespace dds enum Format { FORMAT_DXT1, + FORMAT_DXT1srgb, FORMAT_DXT3, + FORMAT_DXT3srgb, FORMAT_DXT5, + FORMAT_DXT5srgb, FORMAT_BC4, FORMAT_BC4s, FORMAT_BC5, diff --git a/src/modules/image/magpie/ddsHandler.cpp b/src/modules/image/magpie/ddsHandler.cpp index 3433c4808..ee7bfe6a1 100644 --- a/src/modules/image/magpie/ddsHandler.cpp +++ b/src/modules/image/magpie/ddsHandler.cpp @@ -96,10 +96,19 @@ PixelFormat DDSHandler::convertFormat(dds::Format ddsformat, bool &sRGB) { case dds::FORMAT_DXT1: return PIXELFORMAT_DXT1; + case dds::FORMAT_DXT1srgb: + sRGB = true; + return PIXELFORMAT_DXT1; case dds::FORMAT_DXT3: return PIXELFORMAT_DXT3; + case dds::FORMAT_DXT3srgb: + sRGB = true; + return PIXELFORMAT_DXT3; case dds::FORMAT_DXT5: return PIXELFORMAT_DXT5; + case dds::FORMAT_DXT5srgb: + sRGB = true; + return PIXELFORMAT_DXT5; case dds::FORMAT_BC4: return PIXELFORMAT_BC4; case dds::FORMAT_BC4s: