glewGetString(GLEW_VERSION) 和 glewIsSupported 之间的区别

Difference between glewGetString(GLEW_VERSION) and glewIsSupported

我按照 https://www.opengl.org/wiki/Creating_an_OpenGL_Context_(WGL) 中的描述在 Windows 7 机器上创建了 OpenGL 上下文。

上下文创建成功,但似乎有一些问题。

因为我需要 vertex/fragment 着色器,我至少需要 OpenGL 2.0 版(或一些扩展)。 初始化上下文并调用 glewInit 后,我​​使用以下命令检查了 OpenGL 上下文版本:

  1. glewGetString(GLEW_VERSION) 其中 returns "1.9.0"
  2. glewIsSupported("GL_VERSION_2_0") 其中 returns 1

两个 GLEW 函数报告不同的版本似乎很奇怪。 http://glew.sourceforge.net/basic.html .

上对两者进行了(部分)解释

此外,我认为对于 nvidia gtx 460,OpenGL 版本至少应为 4.0。我还想补充一点,所有 shader/program 函数指针(例如 glUseProgram)都不是 NULL 指针,它们可以工作.

是否有可靠的方法来判断创建的上下文的 OpenGL 版本?

编辑: 好的,这是解决方案。似乎 OpenGL/GLEW 具有相似的 function/parameter 名称,但 return 不同的版本。这是摘要:

  1. glewGetString(GLEW_VERSION) returns GLEW 版本
  2. glGetString(GL_VERSION) returns OpenGL 版本但仅适用于 3.0 以下的 OpenGL
  3. glewIsSupported("GL_VERSION_2_0") 检查是否支持 OpenGL 2.0 版
  4. if (GLEW_VERSION_2_0) 检查是否支持 OpenGL 2.0 版(不是 GLEW!!!)
  5. glGetIntegerv(GL_MAJOR_VERSION) 和 glGetIntegerv(GL_MINOR_VERSION) return OpenGL 版本,但仅适用于 OpenGL 3.0 及更高版本

此致

这两种方法不return相同的信息:

glGetString(GLEW_VERSION) returns GLEW 库的版本,而不是使用的 OpenGL 版本。相反,glewIsSupported 检查是否支持 OpenGL 版本。

为了获得上下文中使用的 OpenGL 版本,可以使用 glGetIntegerv 函数提供 GL_MAJOR_VERSION 和 GL_MINOR_VERSION 作为第一个参数。