使用驱动程序不支持的更高版本的 OpenGL 常量是否安全



例如,我正在使用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。除非我必须这样做,因为它使事情变得更加困难和复杂。

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

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

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

相关内容

  • 没有找到相关文章