2016-09-13 110 views
1

我试图让一个非常基本的OpenGL应用程序运行起来。我有一个GTX 770,我已经安装了nvidia-361驱动程序。当我运行glxinfo | grep version,我得到:GL_VERSION字符串和glxinfo版本字符串不同意?

OpenGL core profile version string: 4.5.0 NVIDIA 361.42

OpenGL core profile shading language version string: 4.5.0 NVIDIA

OpenGL version string: 4.5.0 NVIDIA

这将导致一个相信你的驱动程序支持的OpenGL 4.5,对不对?

现在,我在我的基本应用程序中使用GLEW。我得到的版本字符串和打印:

const GLubyte* version = glGetString(GL_VERSION); 
printf("version: %s\n", version); 

,当我运行该程序,我得到:

version: 3.2.0 NVIDIA 361.42

??????????????? ??????????

这里发生了什么事?我检查了我的libglew-dev版本,它是1.13.0。 OpenGL 4.5支持在1.11.0中添加。所以我不认为GLEW是问题,但我无法弄清楚发生了什么。

回答

5

glGetString(GL_VERSION)返回当前GL上下文提供的版本,不一定是GL实施支持的最高版本。

GLEW与此无关,它只是加载GL函数指针。相关的是你的方式创建的上下文。你在这里看到的是nvidia驱动程序在最新版本中的正常行为:当你问它一些GL x.y上下文时,它确实返回版本x.y,而不是它仍然支持的更高版本。

如果你想要一个4.5上下文,只需要一个GL 4.5上下文。如何做到这一点取决于你创建上下文的方式。如果您使用GLFW,GLUT,SDL,Qt等库,请参阅有关如何请求特定上下文版本的文档。如果通过glX手动创建上下文,请使用glXCreateContextAttribsARB以及合适的GLX_CONTEXT_MAJOR_VERSION_ARBGLX_CONTEXT_MINOR_VERSION_ARB属性。

+0

谢谢!我是一个新手,这对我有很大帮助! – amagumori