GL_EXT_packed_pixels 对比 GL_APPLE_packed_pixels

GL_EXT_packed_pixels vs GL_APPLE_packed_pixels

我的应用程序在使用 UNSIGNED_INT_8_8_8_8_EXT 等打包像素格式之前检查 GL_EXT_packed_pixels 扩展名。在我的 MacBook 上,我的代码找不到这个扩展,尽管使用打包像素格式似乎仍然有效。

OpenGL Extension Viewer 似乎暗示它在 OS X:

上有一个特殊的名称

有什么区别?在评估是否支持 UNSIGNED_INT_8_8_8_8_EXT 时,我应该只检查 GL_EXT_packed_pixels or GL_APPLE_packed_pixels 吗?

EXT_packed_pixels 有这些定义:

UNSIGNED_BYTE_3_3_2_EXT         0x8032
UNSIGNED_SHORT_4_4_4_4_EXT      0x8033
UNSIGNED_SHORT_5_5_5_1_EXT      0x8034
UNSIGNED_INT_8_8_8_8_EXT        0x8035
UNSIGNED_INT_10_10_10_2_EXT     0x8036

虽然 APPLE_packed_pixels 有这些:

UNSIGNED_BYTE_3_3_2         0x8032
UNSIGNED_BYTE_2_3_3_REV     0x8362
UNSIGNED_SHORT_5_6_5        0x8363
UNSIGNED_SHORT_5_6_5_REV    0x8364
UNSIGNED_SHORT_4_4_4_4      0x8033
UNSIGNED_SHORT_4_4_4_4_REV  0x8365
UNSIGNED_SHORT_5_5_5_1      0x8034
UNSIGNED_SHORT_1_5_5_5_REV  0x8366
UNSIGNED_INT_8_8_8_8        0x8035
UNSIGNED_INT_8_8_8_8_REV    0x8367
UNSIGNED_INT_10_10_10_2     0x8036
UNSIGNED_INT_2_10_10_10_REV 0x8368

两者比较,EXT_packed_pixelsAPPLE_packed_pixels的子集,共享值相同。因此,如果支持 APPLE_packed_pixels,您可以安全地使用 EXT_packed_pixels.

中的所有定义

正如您的扩展查看器屏幕截图所示,GL_EXT_packed_pixels 自 OpenGL 1.2 以来一直是核心功能。所以在大多数情况下,您不必在扩展字符串中测试任何这些。如果您首先检查版本,它至少是 1.2,那么您已经知道该功能可用。测试逻辑可能如下所示:

if (strcmp(glGetString(GL_VERSION), "1.2") >= 0 ||
    strstr(glGetString(GL_EXTENSIONS), "_packed_pixels") != NULL)
{
    // supported
}