2011-10-26 106 views
21

我开始用C语言(现在)使用GLFW和OpenGL编写程序。我的问题是,我怎么知道我的程序将使用哪个版本的OpenGL?我的笔记本电脑说我的显卡有OpenGL 3.3。键入“glxinfo | grep -i opengl”返回:我如何知道我使用的是哪个版本的OpenGL?

OpenGL vendor string: NVIDIA Corporation 
OpenGL renderer string: GeForce 9600M GT/PCI/SSE2 
OpenGL version string: 3.3.0 NVIDIA 285.05.09 
OpenGL shading language version string: 3.30 NVIDIA via Cg compiler 
OpenGL extensions: 

那么OpenGL 3.3自动使用?

+1

那么你是否已经想出了自己的解决方案,并忘记了你的问题,或者你还有一些不明确之处?在前一种情况下,放弃一个问题是非常糟糕的做法,在后一种情况下,可以随时询问有关现有答案的任何进一步问题,或者如果与现有答案不同,则发布自己的答案。 –

+1

如果你想在终端上检查* Linux *上的* GLEW *版本,你可以安装'glew-utils'并运行'visualinfo | grep“OpenGL版本”'。 –

回答

16

只需拨打glGetString(GL_VERSION)(一旦环境被初始化,当然),并推出了结果(实际上是相同的是glxinfo呢,我想):

printf("%s\n", glGetString(GL_VERSION)); 

你的程序会自动使用最高可能的版本你的硬件和驱动程序支持,在你的情况下,似乎是3.3。但是,为了创建OpenGL 3+的核心配置文件上下文(其中一个不推荐使用的功能已被完全删除),您必须采取特殊措施。但自从V2.7版本开始,GLFW就有了使用glfwOpenWindowHint函数的方法。但是,如果您不想明确禁止弃用的功能,那么您可以使用GLFW的默认上下文创建功能给您提供的上下文,这将支持硬件和驱动程序的最高版本。

但是请记住,对于使用高于版本1.1的OpenGL功能,您需要检索相应的函数指针或使用为您处理此问题的库,如GLEW

+0

“但是如果我没有记错的话,你需要一个特殊的函数来为2.1以上的版本创建一个OpenGL上下文。”不对。您不需要使用WGL/GLX_ARB_create_context_attribs来获取高于GL 2.1。常规的上下文创建API将为您提供与2.1向后兼容的上下文。所以如果支持3.3兼容性,那就是你会得到的。 –

+0

@NicolBolas好的,更新了答案。我还没有实用的3+经验,谢谢澄清。 –

+0

@Christian - 也特别是一个窗口限制。 MSFT只发布了一个opengl 1.1的实现,所以即使你的图形卡驱动程序支持更新的东西,你需要使用GLEW或者手动加载DLL并通过地址调用函数 –

相关问题