c++ - 查询 GL_MAJOR_VERSION 抛出 "invalid enumerant"

标签 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 台机器中的 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 的应用程序达到安装的驱动程序支持的最高水平就好了。另外,如果我不执行版本查询,其余的应用程序运行正常。为什么会这样?

最佳答案

具有 GL_MAJOR_VERSIONGL_MINOR_VERSION

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

关于c++ - 查询 GL_MAJOR_VERSION 抛出 "invalid enumerant",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21229606/

相关文章:

c++ - 在 OpenGL 中填充自相交多边形

c++ - 实现自己的 memcpy(大小以字节为单位?)

C++单例与完全静态对象

c++ - 混合编程 - 包括 C++ 头文件到 Fortran

c++ - fatal error mysql.h :No such file or directory during compilation

opengl - 比较屏幕和 OpenGL 的真实世界坐标以获得成功

python - Pyglet OpenGL 设置雾颜色

c++ - winsock 缺失数据 c++ win32

multithreading - OpenGL 视频播放器的纹理缓冲区

OpenGL 转换(glScale、glTranslate 等)