【问题标题】:How do I know which version of OpenGL I am using?我如何知道我使用的是哪个版本的 OpenGL?
【发布时间】:2011-10-28 09:16:27
【问题描述】:

我开始用 C(目前)使用 GLFW 和 OpenGL 编写程序。我的问题是,我怎么知道我的程序将使用哪个版本的 OpenGL?我的笔记本电脑说我的视频卡有 OpenGL 3.3。输入“glxinfo | grep -i 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 会自动使用吗?

【问题讨论】:

  • 那么您是否自己找到了解决方案而忘记了您的问题,或者您还有一些不清楚的地方?在前一种情况下,仅仅放弃一个问题是非常糟糕的做法,而在后一种情况下,请随意询问有关现有答案的任何其他问题,如果与现有答案不同,甚至可以发布您自己的答案。
  • 如果你想从终端检查Linux上的GLEW版本,你可以安装glew-utils并运行visualinfo | grep "OpenGL version"

标签: opengl


【解决方案1】:

只需调用glGetString(GL_VERSION)(当然,一旦初始化上下文)并输出结果(我想这实际上与 glxinfo 相同):

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

您的程序应该自动使用您的硬件和驱动程序支持的最高版本,在您的情况下似乎是 3.3。但是要为 OpenGL 3+(已完全删除不推荐使用的功能)创建核心配置文件上下文,您必须采取特殊措施。但是由于 2.7 版 GLFW 可以使用 glfwOpenWindowHint 函数来执行此操作。但是,如果您不想明确禁止已弃用的功能,则可以使用 GLFW 的默认上下文创建函数提供给您的上下文,如前所述,它将支持您的硬件和驱动程序的最高版本。

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

【讨论】:

  • “但是如果我没记错的话,你需要一个特殊的函数来为高于 2.1 的版本创建一个 OpenGL 上下文。”不对。您无需使用 WGL/GLX_ARB_create_context_attribs 即可获得高于 GL 2.1 的版本。常规上下文创建 API 将为您提供与 2.1 向后兼容的上下文。因此,如果支持 3.3 兼容性,那么您将得到。
  • @NicolBolas 好的,更新了答案。我还没有实际的 3+ 经验,感谢您的澄清。
  • @Christian - 也特别是 Windows 限制。 MSFT 仅提供 opengl 1.1 实现,因此即使您的显卡驱动程序支持更新的东西,您也需要使用 GLEW 或手动加载 dll 并按地址调用函数
  • @MartinBeckett:这不仅仅是 Windows 的限制。大多数 Linux OpenGL 头文件只包含关于 OpenGL 1.2 左右的任何内容。您必须使用 glXGetProcAddress 来获取其他任何内容的函数指针。此外,您根本不必手动在 Windows 上加载 DLL;这就是 wglGetProcAddress 的用途。
猜你喜欢
  • 2011-05-15
  • 2017-10-09
  • 1970-01-01
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 2013-05-26
  • 2013-10-25
相关资源
最近更新 更多