mirror of
https://github.com/love2d/love.git
synced 2026-08-20 12:40:20 +02:00
Improve detection of sRGB texture formats in dds files (doesn't currently affect any exposed API).
This commit is contained in:
@@ -82,19 +82,25 @@ static Format parseDX10Format(DXGIFormat fmt)
|
|||||||
{
|
{
|
||||||
case DXGI_FORMAT_BC1_TYPELESS:
|
case DXGI_FORMAT_BC1_TYPELESS:
|
||||||
case DXGI_FORMAT_BC1_UNORM:
|
case DXGI_FORMAT_BC1_UNORM:
|
||||||
case DXGI_FORMAT_BC1_UNORM_SRGB:
|
|
||||||
f = FORMAT_DXT1;
|
f = FORMAT_DXT1;
|
||||||
break;
|
break;
|
||||||
|
case DXGI_FORMAT_BC1_UNORM_SRGB:
|
||||||
|
f = FORMAT_DXT1srgb;
|
||||||
|
break;
|
||||||
case DXGI_FORMAT_BC2_TYPELESS:
|
case DXGI_FORMAT_BC2_TYPELESS:
|
||||||
case DXGI_FORMAT_BC2_UNORM:
|
case DXGI_FORMAT_BC2_UNORM:
|
||||||
case DXGI_FORMAT_BC2_UNORM_SRGB:
|
|
||||||
f = FORMAT_DXT3;
|
f = FORMAT_DXT3;
|
||||||
break;
|
break;
|
||||||
|
case DXGI_FORMAT_BC2_UNORM_SRGB:
|
||||||
|
f = FORMAT_DXT3srgb;
|
||||||
|
break;
|
||||||
case DXGI_FORMAT_BC3_TYPELESS:
|
case DXGI_FORMAT_BC3_TYPELESS:
|
||||||
case DXGI_FORMAT_BC3_UNORM:
|
case DXGI_FORMAT_BC3_UNORM:
|
||||||
case DXGI_FORMAT_BC3_UNORM_SRGB:
|
|
||||||
f = FORMAT_DXT5;
|
f = FORMAT_DXT5;
|
||||||
break;
|
break;
|
||||||
|
case DXGI_FORMAT_BC3_UNORM_SRGB:
|
||||||
|
f = FORMAT_DXT5srgb;
|
||||||
|
break;
|
||||||
case DXGI_FORMAT_BC4_TYPELESS:
|
case DXGI_FORMAT_BC4_TYPELESS:
|
||||||
case DXGI_FORMAT_BC4_UNORM:
|
case DXGI_FORMAT_BC4_UNORM:
|
||||||
f = FORMAT_BC4;
|
f = FORMAT_BC4;
|
||||||
@@ -126,7 +132,7 @@ static Format parseDX10Format(DXGIFormat fmt)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,7 +153,6 @@ bool isDDS(const void *data, size_t dataSize)
|
|||||||
|
|
||||||
DDSHeader *header = (DDSHeader *) &readData[offset];
|
DDSHeader *header = (DDSHeader *) &readData[offset];
|
||||||
|
|
||||||
|
|
||||||
// Verify header to validate DDS data.
|
// Verify header to validate DDS data.
|
||||||
if (header->size != sizeof(DDSHeader) || header->format.size != sizeof(DDSPixelFormat))
|
if (header->size != sizeof(DDSHeader) || header->format.size != sizeof(DDSPixelFormat))
|
||||||
return false;
|
return false;
|
||||||
@@ -242,12 +247,15 @@ size_t Parser::parseImageSize(Format fmt, int width, int height) const
|
|||||||
switch (fmt)
|
switch (fmt)
|
||||||
{
|
{
|
||||||
case FORMAT_DXT1:
|
case FORMAT_DXT1:
|
||||||
|
case FORMAT_DXT1srgb:
|
||||||
case FORMAT_BC4:
|
case FORMAT_BC4:
|
||||||
case FORMAT_BC4s:
|
case FORMAT_BC4s:
|
||||||
numBytesPerBlock = 8;
|
numBytesPerBlock = 8;
|
||||||
break;
|
break;
|
||||||
case FORMAT_DXT3:
|
case FORMAT_DXT3:
|
||||||
|
case FORMAT_DXT3srgb:
|
||||||
case FORMAT_DXT5:
|
case FORMAT_DXT5:
|
||||||
|
case FORMAT_DXT5srgb:
|
||||||
case FORMAT_BC5s:
|
case FORMAT_BC5s:
|
||||||
case FORMAT_BC5:
|
case FORMAT_BC5:
|
||||||
case FORMAT_BC6H:
|
case FORMAT_BC6H:
|
||||||
|
|||||||
@@ -36,8 +36,11 @@ namespace dds
|
|||||||
enum Format
|
enum Format
|
||||||
{
|
{
|
||||||
FORMAT_DXT1,
|
FORMAT_DXT1,
|
||||||
|
FORMAT_DXT1srgb,
|
||||||
FORMAT_DXT3,
|
FORMAT_DXT3,
|
||||||
|
FORMAT_DXT3srgb,
|
||||||
FORMAT_DXT5,
|
FORMAT_DXT5,
|
||||||
|
FORMAT_DXT5srgb,
|
||||||
FORMAT_BC4,
|
FORMAT_BC4,
|
||||||
FORMAT_BC4s,
|
FORMAT_BC4s,
|
||||||
FORMAT_BC5,
|
FORMAT_BC5,
|
||||||
|
|||||||
@@ -96,10 +96,19 @@ PixelFormat DDSHandler::convertFormat(dds::Format ddsformat, bool &sRGB)
|
|||||||
{
|
{
|
||||||
case dds::FORMAT_DXT1:
|
case dds::FORMAT_DXT1:
|
||||||
return PIXELFORMAT_DXT1;
|
return PIXELFORMAT_DXT1;
|
||||||
|
case dds::FORMAT_DXT1srgb:
|
||||||
|
sRGB = true;
|
||||||
|
return PIXELFORMAT_DXT1;
|
||||||
case dds::FORMAT_DXT3:
|
case dds::FORMAT_DXT3:
|
||||||
return PIXELFORMAT_DXT3;
|
return PIXELFORMAT_DXT3;
|
||||||
|
case dds::FORMAT_DXT3srgb:
|
||||||
|
sRGB = true;
|
||||||
|
return PIXELFORMAT_DXT3;
|
||||||
case dds::FORMAT_DXT5:
|
case dds::FORMAT_DXT5:
|
||||||
return PIXELFORMAT_DXT5;
|
return PIXELFORMAT_DXT5;
|
||||||
|
case dds::FORMAT_DXT5srgb:
|
||||||
|
sRGB = true;
|
||||||
|
return PIXELFORMAT_DXT5;
|
||||||
case dds::FORMAT_BC4:
|
case dds::FORMAT_BC4:
|
||||||
return PIXELFORMAT_BC4;
|
return PIXELFORMAT_BC4;
|
||||||
case dds::FORMAT_BC4s:
|
case dds::FORMAT_BC4s:
|
||||||
|
|||||||
Reference in New Issue
Block a user