在linux上,opengl的DirectDraw表面(DDS)格式相当于什么?

DDS格式已经为directX做好了吗? 所以它应该为它优化,而不是我猜的OpenGL。

那么还有另一种格式? 如果是的话,什么格式是一个不错的select? 什么原因?

另外,因为我在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。

没有什么特别的D3D-关于DDS的“优化”。

一旦正确读取标题,(可选)预压缩数据与S3TC是二进制兼容的。 DDS和OpenGL的等价物( KTX )都能够在单个图像文件中存储立方体贴图数组和mipmap,这是他们的主要吸引力。

使用其他格式,您可能会使用驱动程序来压缩和/或生成mipmap,而驱动程序通常在质量方面做得不好。 驱动程序通常设计为快速执行此操作,因为它们有很多需要压缩/ mipmap的纹理。 您可以离线使用更高质量的mipmap缩减采样过滤/压缩实施,因为完成所需的时间并不重要。

DDS / KTX的主要优点是:

  1. 离线计算mipmap
  2. 离线压缩
  3. 存储纹理数组/立方体贴图的所有图层

(1)(2)脱机可以提高图像质量,并减少在运行时加载纹理的开销。 (3)大多是为了方便,而是一个受欢迎的。

我认为最接近DDS的DirectX是KTX ,但是即使DDS在OpenGL下也能正常工作。