OpenGL - DDS 和 sRGB 色彩空间

OpenGL - DDS and sRGB colorspace

我检查了几个 DDS 加载器实现的例子。通常,检测 DXT 格式如下所示:

if (ddsHeader.ddsPixelFormat.dwFlags & DDSF_FOURCC) 
{
    switch (ddsHeader.ddsPixelFormat.dwFourCC) 
    {
    case FOURCC_DXT1:
    {
        format = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
        break;
    }
    //etc

检测标准 RGB 格式如下所示:

if (ddsHeader.ddsPixelFormat.dwFlags & DDPF_RGB) 
{
    if (ddsHeader.ddsPixelFormat.dwRGBBitCount == 24 &&
        ddsHeader.ddsPixelFormat.dwRBitMask == 0x000000FF &&
        ddsHeader.ddsPixelFormat.dwGBitMask == 0x0000FF00 &&
        ddsHeader.ddsPixelFormat.dwBBitMask == 0x00FF0000) 
    {
        format = GL_RGB8;
    }
    //etc

如何检测 sRGB 格式,例如 GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXTGL_SRGB8_EXT? DDS 是否支持 sRGB 格式?

D3D10 引入了 sRGB 图像的图像格式。 These formats could be used in an extended version of the DDS format,从而允许此类文件声明它们包含 sRGB 数据。包括 block-compressed 个版本。

但是,这需要支持 DDS-10 的压缩器和加载器。如果加载程序检查 "DX10" 的 FOURCC 并使用 DDS_HEADER_DXT10 header 获得 DXGI 格式,您可以判断它是否支持 DDS-10。您显示的测试代码似乎没有这样做。