(linux)我如何知道c++;程序是否支持OpenGL4? 如果在运行的计算机上支持OpenGL 4,我想在C++内部检测。

(linux)我如何知道c++;程序是否支持OpenGL4? 如果在运行的计算机上支持OpenGL 4,我想在C++内部检测。,c++,linux,opengl,drivers,video-card,C++,Linux,Opengl,Drivers,Video Card,我不知道我在谷歌上搜索时是否使用了错误/不好的词汇(我的英语技能…),但令人惊讶的是,我没有找到任何例子。。。如果你告诉我这个问题是重复的,我不会感到惊讶 知道如何从正在运行的计算机上的显卡和显卡使用的驱动程序中获取更多有用的数据对我来说最终会很有用。我没有花时间四处看看,想知道怎么做,但如果你有一些有用的链接,请随时与我分享。 步骤1:创建OpenGL上下文;首先尝试使用“attrib”方法,请求您想要的minium OpenGL版本。如果成功了,你就完了 第2步:如果这不起作用,您可以优雅地

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

知道如何从正在运行的计算机上的显卡和显卡使用的驱动程序中获取更多有用的数据对我来说最终会很有用。我没有花时间四处看看,想知道怎么做,但如果你有一些有用的链接,请随时与我分享。

  • 步骤1:创建OpenGL上下文;首先尝试使用“attrib”方法,请求您想要的minium OpenGL版本。如果成功了,你就完了

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

  • 第3步:如果您希望在2.1和您的最佳版本之间有一些可移植且可靠的上下文,请在循环中尝试attribs方法,减少您的需求,直到成功为止


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

@n.m.:这只是告诉您可用的GLX版本,这与OpenGL完全无关。嗯,对不起,是个疏忽。Opengl被视为第三方库,它附带.lib文件和.dll文件。您所需要做的就是将这些文件包含在编译器的目录中,并设置IDE环境以运行它。编译器将依靠这些.lib和.dll文件编译和执行Opengl程序。@Juniar??我猜题目错了。我不知道我是否理解你的问题。你用C++来设置OpenGL吗?或者你已经准备好了?是linux操作系统平台吗?好吧。“理论上,图形卡可以热插拔”是的。。。实际上。。。你哭了。。。谢谢。@bob thetrashygravedigger:噢,我完全可以从不同的X服务器机器和本地OpenGL客户端库将ssh-YC完美地安装到同一台计算机中,但不同显示的功能可能会有很大的不同。同样,在将来,使用Wayland图形模型和可能构建在其上的间接显示服务器,可以动态地确定本地渲染还是远程渲染更可取(例如,对于远程显示服务器上的UI渲染,通常更可取,因为渲染UI元素的命令比传输图像占用的带宽更少).好的,对于SSH,我在无头计算机上这样做。但我不确定计算机是否可以在胸前没有视频卡的情况下启动…对于wayland,如果没有图形卡也可以启动,我会感到惊讶…但我不知道。我用virtualGL和无头计算机一起使opengl工作,但这需要视频卡,我猜这需要视频卡Well与wayland相同。使用virtualGL+VNC,您可以拥有一个完整的远程X服务器;)@bob thetrashygravedigger:wayland只是一个帧缓冲区丢弃协议,而不是实际的显示服务器。您可以使用它来连接以某种方式在相同的帧缓冲区上运行的进程,如绘制到帧缓冲区的应用程序,然后由某种合成器进行合成。绘图程序和政策的实际实施完全超出了Wayland的范围。OpenGL不属于Wayland的范围。然而,Wayland孵化的图形模型使GPU热插拔等事情变得更加简单。@bob thetrashygravedigger:就个人而言,我不太喜欢Wayland。我认为它在某些方面做得太多,而在其他方面做得太少。我最不喜欢的是,它的设计是基于这样的假设,即它将成为前端显示服务器的基础。如果您去掉了一些东西(比如整个输入事件传递,这对于具有异构输入配置的环境来说是缺乏的),并使协议了解底层硬件(它故意设计为不了解底层硬件),那么实现display server的后端将是非常好的。