我正在尝试启动并运行一个非常基本的openGL应用程序。我有一台GTX 770,我安装了nvidia-361驱动程序。当我运行glxinfo | grep version
时,我得到:
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。 1.11.0中添加了OpenGL 4.5支持。所以我不认为GLEW是问题,但我无法弄清楚发生了什么。
答案 0 :(得分:6)
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_ARB
和GLX_CONTEXT_MINOR_VERSION_ARB
属性。