DDS格式是针对directX做的吗?所以应该针对它进行优化,而不是针对openGL进行优化.
那么,还有另一种格式吗?如果是的话,什么格式是一个不错的选择?是什么原因?
另外,既然我在linux上工作,我也担心在linux上制作纹理.所以我需要一种可以由gimp导入/导出的格式.
DDS格式对于存储压缩纹理非常有用.如果您将文件存储在与存储在GPU内存中相同的压缩中,则无需对GPU存储进行解码和重新编码,而只需将其直接移动到内存即可.
DDS格式主要用于存储S3纹理压缩数据.内部DDS格式DTX3和DTX5是例如OpenGL也支持的S3TC格式:http: //www.opengl.org/wiki/S3_Texture_Compression
DDS还可以存储预先计算的mipmap.同样,这是减少加载时间的权衡(更大的文件大小),因为mipmap也可以在加载时计算.如您所见,如果您有正确的代码来解析DDS文件,例如,有效载荷将以其压缩形式获取而不在主机上解码,那么使用DDS是完全正常的.
另一方面,@ CoffeeandCode 在他的回答中指出了KTX格式.这些文件使用不同的压缩算法(请参见此处).优点是这种压缩在较新的OpenGL版本中是强制性的,而S3TC压缩始终仅作为扩展(并且具有专利问题).我不知道他们如何在质量上进行比较,以及您是否可以在目标平台上使用OpenGL 4.3.
我的看法:如果您的目标是最近的硬件和OpenGL支持(OpenGL ES 3或OpenGL 4.3),您应该使用KTX格式和相应的纹理格式(libktx将为您生成纹理对象).如果您需要能够在较旧的硬件上运行或者已经拥有大量DDS数据,那么您应该暂时坚持使用DDS.