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_EXT
或 GL_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。您显示的测试代码似乎没有这样做。
我检查了几个 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_EXT
或 GL_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。您显示的测试代码似乎没有这样做。