【发布时间】: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 ));
被测机器硬件:
笔记本 - 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 的应用程序,最高支持已安装的驱动程序就好了。另外,如果我不执行版本的查询,其余的应用运行正常。为什么会这样?
【问题讨论】:
-
您确定您已成功创建 OpenGL 上下文吗?
-
当然 100%。正如我所说,如果我不执行查询,应用程序可以正常工作。此外,我对上下文也有异常处理。如果失败,它会在那里抛出。
-
从 glGetError 获取错误并返回错误信息
-
有一个名为 GPU Caps 的工具,我用它来检查我的 openGL 版本和外接程序等。试试吧,它会给你什么。如果它成功可能是你的上下文问题。