我在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 ));
经测试的机器硬件:
笔记本 - 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的应用程序,直到安装的驱动程序支持的最高版本就好了。另外,如果我不对该版本执行查询,则其余的应用程序工作正常。为什么会发生?
答案 0 :(得分:2)
glGetIntegerv
GL_MAJOR_VERSION
或GL_MINOR_VERSION
仅支持版本3.0及更高版本的GL上下文。见https://www.opengl.org/wiki/Get_Context_Info。如果你得到一个"无效的枚举"为了响应其中任何一个,您创建的上下文很可能不支持OpenGL 3.0或更高版本。