Improve detection of sRGB texture formats in dds files (doesn't currently affect any exposed API).

This commit is contained in:
Alex Szpakowski
2019-09-15 19:08:25 -03:00
parent 33bc8aabfc
commit a6f8e7dac6
3 changed files with 25 additions and 5 deletions
+13 -5
View File
@@ -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:
+3
View File
@@ -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,