【问题标题】:Query for GL_MAJOR_VERSION throws "invalid enumerant"查询 GL_MAJOR_VERSION 抛出“无效枚举”
【发布时间】:2016-12-13 11:19:32
【问题描述】:

我在 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 台机器中的 2 台机器上,我在第一次查询时已经得到“无效的枚举数”:

 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 -通过。

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

【问题讨论】:

  • 您确定您已成功创建 OpenGL 上下文吗?
  • 当然 100%。正如我所说,如果我不执行查询,应用程序可以正常工作。此外,我对上下文也有异常处理。如果失败,它会在那里抛出。
  • 从 glGetError 获取错误并返回错误信息
  • 有一个名为 GPU Caps 的工具,我用它来检查我的 openGL 版本和外接程序等。试试吧,它会给你什么。如果它成功可能是你的上下文问题。

标签: c++ opengl


【解决方案1】:

glGetIntegervGL_MAJOR_VERSIONGL_MINOR_VERSION 仅在 3.0 及更高版本的 GL 上下文中受支持。见https://www.opengl.org/wiki/Get_Context_Info。如果您在响应其中任何一个时收到“无效枚举”,则很有可能您创建的上下文不支持 OpenGL 3.0 或更高版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多