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
看来您已经对可用的压缩格式进行了深入研究。
这是我的 2 美分贡献:大多数压缩格式都是有损的。我猜只有 GL_OES_compressed_paletted_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 来说足够好)。
祝你好运!
| 归档时间: |
|
| 查看次数: |
4744 次 |
| 最近记录: |