Opengl是当今桌面上最好的纹理压缩格式

ele*_*ect 4 compression format textures opengl-3 opengl-4

我没有在网上找到任何有效的更新资源并比较桌面版 OpenGL 的纹理压缩格式。一切要么已经过时,要么适合移动设备。

查看我的平台,我看到许多不同的格式:

GL_ARB_compressed_texture_pixel_storage
GL_ARB_texture_compression
GL_ARB_texture_compression_bptc
GL_ARB_texture_compression_rgtc
GL_EXT_texture_compression_dxt1
GL_EXT_texture_compression_latc
GL_EXT_texture_compression_rgtc
GL_EXT_texture_compression_s3tc
GL_NV_texture_compression_vtc
Run Code Online (Sandbox Code Playgroud)

如果我直接查询,我还有其他一些GL_COMPRESSED_TEXTURE_FORMATS

  public static final int GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 33776;
  public static final int GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 33778;
  public static final int GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 33779;

  public static final int GL_PALETTE4_RGB8_OES = 0x8B90 = 35728;
  public static final int GL_PALETTE4_RGBA8_OES = 0x8B91;
  public static final int GL_PALETTE4_R5_G6_B5_OES = 0x8B92;
  public static final int GL_PALETTE4_RGBA4_OES = 0x8B93;
  public static final int GL_PALETTE4_RGB5_A1_OES = 0x8B94;
  public static final int GL_PALETTE8_RGB8_OES = 0x8B95;
  public static final int GL_PALETTE8_RGBA8_OES = 0x8B96;
  public static final int GL_PALETTE8_R5_G6_B5_OES = 0x8B97;
  public static final int GL_PALETTE8_RGBA4_OES = 0x8B98;
  public static final int GL_PALETTE8_RGB5_A1_OES = 0x8B99 = 35737;

  public static final int GL_COMPRESSED_RGB8_ETC2 = 0x9274 = 37492;
  public static final int GL_COMPRESSED_SRGB8_ETC2 = 0x9275;
  public static final int GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
  public static final int GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
  public static final int GL_COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
  public static final int GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279 = 37497;
  public static final int GL_COMPRESSED_R11_EAC = 0x9270 = 37488;
  public static final int GL_COMPRESSED_SIGNED_R11_EAC = 0x9271;
  public static final int GL_COMPRESSED_RG11_EAC = 0x9272;
  public static final int GL_COMPRESSED_SIGNED_RG11_EAC = 0x9273 = 37491;
Run Code Online (Sandbox Code Playgroud)

虽然尼科尔在这里说不要依赖glGet而是依赖扩展..

据我所知,它们都是有损的,对吗?

谷歌搜索 S3TC/DXTx/BCx 似乎是网上记录最多的一种,但它也很古老,而且也比更现代的格式要好。

是一个非常好的比较它们的网站,但它是针对移动设备的,也是我发现的唯一一个解释 DXT3 和 DXT5 不同目标的网站。但它错过了EC2,这在 GLES3 和 GL4.3 上似乎是强制性的。

另一个有趣的网站是这个

PVRTC就性能而言似乎是最好的,但不幸的是它只能在专用硬件上运行。 ASTC也很有前景,但也有与 PVRTC 相同的缺点。ATITC 的名字似乎也很古老(ATI 纹理压缩)

所以,我想知道您认为目前桌面上 GL3+ 的最佳压缩格式是什么。

编辑:添加 Nvidia 关于纹理压缩的另一个有趣链接,重点是 ASTC

Ale*_*rth 5

看来您已经对可用的压缩格式进行了深入研究。

这是我的 2 美分贡献:大多数压缩格式都是有损的。我猜只有 GL_OES_compressed_pa​​letted_texture 不是有损的,但它只支持 16 或 256 色,并且对性能有一些担忧。它受 Adreno GPU 以及某些 Intel 和 Mali 硬件的支持。此外,它也没有像 ETC1 那样得到广泛支持。如果保真度至关重要,请考虑使用尺寸合适的未压缩纹理。您可以调整尺寸 (256/512/1024) 和颜色深度 (565/888),直到找到质量/性能的最佳平衡点。您可以通过允许配置纹理质量,让您的客户选择最适合他/她的东西。

此外,如果您的目标客户端硬件不支持它,那么您是否选择了可用的“最佳”格式也没关系。如果您的应用程序面向广泛的受众,您必须意识到必须降低图形要求。

另一件事。当今大多数“台式”PC 实际上都是采用英特尔显卡的笔记本电脑。除非您有足够的资源为多种当前显卡(NVidia、AMD、Intel)编写替代路径,否则最好坚持使用最常见的解决方案。

但是最常用/最可用的压缩格式是什么?好吧,检查一些数据库,如Delphigl.de OpenGL 数据库OpenGL ES 数据库,并考虑为每个平台报告的一些压缩格式的覆盖范围。请注意,一些旧硬件甚至不支持压缩纹理。

作为默认选项,保留一组未压缩的纹理和一组压缩的 S3TC(DXT1、DXT3、DXT5)或 ETC/ETC2(对于没有透明度的 RGB 来说足够好)。

祝你好运!