我没有在网上找到任何有效的资源,可以更新并比较桌面版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
如果我直接查询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;
虽然在这里尼科尔说不要依赖glGet
而是依靠扩展。
据我所知,所有这些都是有损的,对吧?
谷歌搜索S3TC/DXTx/BCx似乎是在线记录最多的一个,但它也非常古老,并且性能也优于更现代的格式。
一个非常好的网站比较了它们,但它是针对移动设备的,也是我发现的唯一一个解释 DXT3 和 DXT5 不同目标的网站。但它错过了EC2,这似乎是GLES3和GL4.3的强制性要求。
另一个有趣的网站是这个。
PVRTC在性能方面似乎是最好的,但不幸的是,它只能在专用硬件上运行。ASTC也有很好的前景,但具有与PVRTC相同的缺点。ATITC的名字似乎也很古老(ATI纹理压缩(
因此,我想知道您认为哪种是台式机上GL3 +的最佳压缩格式。
编辑:添加另一个有趣的链接,来自Nvidia的纹理压缩,并在ASTC上
看来您已经对可用的压缩格式进行了深入研究。
这是我的 2 美分贡献:大多数压缩格式都是有损的。我想只有GL_OES_compressed_paletted_texture没有损耗,但它只支持 16 或 256 种颜色,并且对性能有一些担忧。Adreno GPU以及一些Intel和Mali hw也支持它。此外,它也没有被广泛支持为ETC1。如果保真度至关重要,请考虑使用大小合适的未压缩纹理。您可以调整尺寸 (256/512/1024( 和颜色深度 (565/888(,直到找到最佳的平衡质量/性能。您可以通过允许可配置的纹理质量让您的客户选择最适合他/她的产品。
此外,如果您选择了可用的"最佳"格式,如果您的目标客户端硬件不支持它,这并不重要。如果您的应用程序面向广泛的受众,则必须注意必须降低图形要求。
另一件事。如今,大多数"台式机"实际上是由英特尔显卡驱动的笔记本电脑。除非您有足够的资源为当前无数显卡(NVidia,AMD,Intel(编写替代路径,否则最好坚持使用最常见的解决方案。
但是什么是最常用/最可用的压缩格式?好吧,检查一些数据库作为OpenGL数据库和OpenGL ES数据库 Delphigl.de 并考虑为每个平台报告的一些压缩格式的覆盖范围。请注意,一些旧的硬件甚至不支持压缩纹理。
作为默认选项,保留一组未压缩的纹理和一组压缩的 S3TC(DXT1、DXT3、DXT5(或 ETC/ETC2(对于没有透明度的 RGB 来说足够好(。
祝你好运!