c - glewGetString(GLEW_VERSION) 和 glewIsSupported 之间的区别

标签 c opengl glew

我在 Windows 7 计算机上创建了 OpenGL 上下文,如 https://www.opengl.org/wiki/Creating_an_OpenGL_Context_(WGL) 中所述。 .

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

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

  1. glewGetString(GLEW_VERSION) 返回“1.9.0”
  2. glewIsSupported("GL_VERSION_2_0") 返回 1

两个 GLEW 函数报告不同的版本似乎很奇怪。两者(部分)在 http://glew.sourceforge.net/basic.html 上进行了解释.

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

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

编辑: 好的,这是解决方案。 OpenGL/GLEW 似乎具有相似的函数/参数名称,但返回不同的版本。这是摘要:

  1. glewGetString(GLEW_VERSION) 返回 GLEW 版本
  2. glGetString(GL_VERSION) 返回 OpenGL 版本,但仅适用于 OpenGL 3.0 以下版本
  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)​ 返回 OpenGL 版本,但仅适用于 OpenGL 3.0 及更高版本

问候

最佳答案

这两个方法不会返回相同的信息:

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

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

关于c - glewGetString(GLEW_VERSION) 和 glewIsSupported 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30728469/

相关文章:

c++ - 运行使用 OpenGL 3.3 的 mac os x c++ 程序

c++ - OpenGL 着色器不与着色器程序链接

c++ - GLEW 库和代码:: block

使用消息队列的 Java C 集成

c++ - 立即模式纹理奇怪的输出

c++ - 控制对 C++ 全局范围的访问?

opengl - 如何获取GPU多重采样模式描述?

c++ - 窗口在 NVIDIA 显卡上使用 OpenGL 渲染闪烁

c - 这两个声明 "int **matrix "和 "int matrix [] [] "有什么区别?

c - 纯 C 字符串替换整个单词