查询GL_MAJOR_VERSION会抛出“无效的枚举”

时间:2014-01-20 08:49:31

标签: c++ opengl

我在Windows 7上使用3.2版创建OpenGL上下文。然后我启动了GLEW:

    GLenum err = glewInit();
glGetError();  
if (err != GLEW_OK){
    throw Exception(std::string((const char*)glewGetErrorString(err)));
     }

这部分在所有测试用例中均可通过。

接下来,我查询GL版本以确保这是预期的版本:

     GLint major =0, minor = 0;
 GL_ASSERT(glGetIntegerv(GL_MAJOR_VERSION, &major ));
 GL_ASSERT(glGetIntegerv(GL_MINOR_VERSION, &minor ));

在4台机器中,我在第一次查询时已经收到“无效枚举”:

 GL_ASSERT(glGetIntegerv(GL_MAJOR_VERSION, &major ));

经测试的机器硬件:

  1. 笔记本 - Nvidia GeForce GT 630m,OpenGL 4.3 - 失败。

  2. 台式电脑-Nvidia GeForce 550GTX,OpenGL 4.3失败。

  3. 台式电脑-Nvidia Quadro K4000,OpenGL 4.4 - 通过。

  4. 台式电脑-Nvidia Quadro 4000,OpenGL 4.3 - 通过。

  5. 这真的很奇怪,因为所有这些机器都安装了最新的驱动程序并运行基于OpenGL的应用程序,直到安装的驱动程序支持的最高版本就好了。另外,如果我不对该版本执行查询,则其余的应用程序工作正常。为什么会发生?

1 个答案:

答案 0 :(得分:2)

{p> glGetIntegerv GL_MAJOR_VERSIONGL_MINOR_VERSION仅支持版本3.0及更高版本的GL上下文。见https://www.opengl.org/wiki/Get_Context_Info。如果你得到一个"无效的枚举"为了响应其中任何一个,您创建的上下文很可能不支持OpenGL 3.0或更高版本。