我正在 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 ));
测试机器硬件:
笔记本电脑 - Nvidia GeForce GT 630m,OpenGL 4.3 - 失败。
台式电脑 -Nvidia GeForce 550GTX,OpenGL 4.3 - 失败。
台式机 -Nvidia Quadro K4000,OpenGL 4.4 - 通过。
台式机 -Nvidia Quadro 4000,OpenGL 4.3 -通过。
这真的很奇怪,因为所有这些机器都安装了最新的驱动程序,并且运行基于 OpenGL 的应用程序达到安装的驱动程序支持的最高水平就好了。另外,如果我不执行版本查询,其余的应用程序运行正常。为什么会这样?
最佳答案
具有 GL_MAJOR_VERSION
或 GL_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/