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

时间:2013-09-12 02:27:00

标签: opengl opengl-3 opengl-4 opengl-2.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版本并打开每个版本的常量。
  4. 我应该选择什么? 我不想采取3.除非我不得不因为它使事情变得更加困难和复杂。

1 个答案:

答案 0 :(得分:3)

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

解决GL_LUMINANCE_ALPHA两难问题远不只是简单地交换令牌GL_RG8。您需要在着色器中使用纹理调色或调色才能使纹理的颜色为(R,R,R,G)

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