2016-09-13 105 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