0

例如,我使用 GL_LUMINANCE_ALPHA 将两个组件数据传输到纹理。有人告诉我,像 GL_LUMINACE_ALPHA 这样的内部格式常量在 OpenGL 3.0(可能是 4.0?)或更高版本中已弃用,因此请使用 GL_RG 或 GL_RG8 等。

但是,我的目标 OpenGL 版本是 2.0 或更高版本,并且 OpenGL 2.0 的规范不包含 GL_RG/GL_RG8。在这种情况下,我认为有三种可能:

  1. 如果程序可以在仅支持 OpenGL 2.0 的设备上运行良好,请使用 GL_RG/GL_RG8。
  2. 如果程序可以在 OpenGL 版本高到不推荐使用旧常量的设备上运行良好,请保留旧常量。
  3. 在运行时检测 OpenGL 版本并为每个版本切换常量。

我应该选择什么?我不想拿 3。除非我必须这样做,因为它使事情变得更加困难和复杂。

4

1 回答 1

3

不,使用驱动程序一无所知的 OpenGL 令牌是不安全的。幸运的是,绝大多数 API 调用只会引发GL_INVALID_ENUM错误,并且操作会在有机会真正搞砸之前提前失败。

解决您的GL_LUMINANCE_ALPHA困境不仅仅是简单地交换代币GL_RG8。您将不得不在着色器中使用纹理混合或混合来使纹理的颜色为(R, R, R, G)

尽早确定您所针对的 OpenGL 版本,或编写单独的代码路径。但它永远不会像在运行时切换枚举值那么简单。

于 2013-09-12T03:26:02.577 回答