【问题标题】:(linux) How can I know inside a c++ program if Opengl 4 is supported?(linux) 如果支持 Opengl 4,我如何知道 c++ 程序内部?
【发布时间】:2014-09-01 17:39:26
【问题描述】:

我想在我的 C++ 程序内部检测运行的计算机是否支持 opengl 4。

我不知道我是否在 google 和 stackoverflow 上搜索时使用了错误/不好的术语(我的英语技能……),但令人惊讶的是我没有找到任何示例……如果你告诉我,我不会感到惊讶这个问题是重复的...

知道如何从显卡和它在运行的计算机上使用的驱动程序获取更多有用的数据最终对我很有用。我没有花时间环顾四周,知道如何做到这一点,但如果你有一些有用的链接,请随时与我分享。

【问题讨论】:

  • @n.m.:这只是告诉你可用的 GLX 版本,它与 OpenGL 完全无关。
  • 嗯,抱歉,一时失策。 opengl.org/wiki/Get_Context_Info
  • Opengl 被认为是第三方库,它带有 .lib 文件和 .dll 文件。您需要做的就是将这些文件包含在您的编译器目录中并设置您的 IDE 环境来运行它。然后编译器将依赖这些 .lib 和 .dll 文件来编译和执行 Opengl 程序。
  • @Juniar ??我猜错了话题
  • 我不知道我是否理解你的问题。您是否使用 C++ 设置 Opengl?或者你已经设置好了?它是 linux OS 平台吗?

标签: c++ linux opengl drivers video-card


【解决方案1】:
  • 第 1 步:创建 OpenGL 上下文;首先尝试通过“attrib”方法请求您想要的最小 OpenGL 版本。如果成功,您就完成了。

  • 第 2 步:如果这不起作用,您可以优雅地降级创建一个简洁的上下文 并调用glGetString(GL_VERSION) 以获取支持的实际上下文版本。请注意,在 MacOS X 上,这会将您限制为 2.1 及更早版本。

  • 第 3 步:如果您想要在 2.1 和您的最佳版本之间获得一些可移植且可靠的上下文,请尝试在循环中使用 attribs 方法,递减您的需求,直到成功为止。

请注意,无法提前确定 OpenGL 支持哪个版本。主要原因是,操作系统和图形层可能会根据请求和当前可用的资源(理论上显卡可以热插拔)来决定使用哪个本地可用的 OpenGL 版本。

【讨论】:

  • 好吧。 “显卡理论上可以热插拔”是的……实际上……你哭了……谢谢。
  • @bob-thetrashygravedigger:哦,我完全可以将ssh -YC 从不同的 X 服务器机器输入到同一台计算机上,并且本地 OpenGL 客户端库不会改变,但不同显示器的功能可能会有所不同很多。同样在未来使用 Wayland 图形模型和可能在其上构建的间接显示服务器时,可能会动态决定本地或远程渲染是否更可取(例如,对于在远程显示服务器上渲染的 UI,通常更可取,因为命令渲染 UI 元素比传输图像占用更少的带宽)。
  • 可以使用 SSH 我在无头计算机上这样做。但我不确定计算机是否会接受在胸前没有显卡的情况下启动...对于 Wayland,如果没有显卡也能正常工作,我会感到惊讶...但我不知道。我使用 virtualGL 和无头计算机来使 opengl 工作,但这需要一个视频卡,我想它与 wayland 相同。使用 virtualGL+VNC 你可以拥有一个完整的远程 X 服务器 ;)
  • @bob-thetrashygravedigger:Wayland 只是一个帧缓冲吊带协议,而不是一个实际的显示服务器。您可以使用它来连接以某种方式在相同帧缓冲区上运行的进程,例如绘制到帧缓冲区的应用程序,然后由某种合成器合成。绘制例程和策略的实际实现完全超出了 Wayland 的范围。 OpenGL 不在 Wayland 的范围内。然而,Wayland 孵化的图形模型让 GPU 热插拔之类的事情变得更加简单。
  • @bob-thetrashygravedigger:我个人不太喜欢 Wayland。恕我直言,它在某些领域做得太多,而在其他领域做得太少。大多数情况下,我不喜欢它是基于这样的假设设计的,即它将构成显示服务器前端的基础。如果您剥离了一些东西(例如整个输入事件传递,这是具有异构输入配置的环境所缺乏的)并使协议了解底层硬件(它故意设计为不这样做),那就太好了用于实现显示服务器的后端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2016-10-28
  • 2021-02-07
相关资源
最近更新 更多