在上下文初始化之前查询支持的最高 OpenGL 版本?

Query highest supported OpenGL version before context initialization?

本文关键字:OpenGL 版本 支持 初始化 上下文 查询      更新时间:2023-10-16

我想知道是否有办法(理想情况下是跨平台,但如果不是只兼容POSIX或至少在Linux中)来查询当前系统中支持的最高OpenGL版本。

我希望能够将 GLFW 窗口实例化为支持的最高版本,而不是盲目尝试不同的版本,直到允许有效的上下文初始化。

编辑:

假设我没有创建上下文。想象一下,我想复制glxinfo的功能。换句话说,我希望能够在不创建上下文的情况下查询已安装的OpenGL版本。

当你要求版本X.Y时,你不是在要求版本X.Y;你要求至少是版本X.Y.允许实现给你与X.Y向后兼容的最高版本。

因此,如果您要求 3.3 核心配置文件,您很可能会获得 4.6 核心配置文件。实现返回较低版本是没有意义的。

因此,只需针对最低OpenGL版本编写代码,然后要求。你会得到实现给你的任何内容,你可以查询你以后得到什么。


想象一下,我想复制glxinfo的功能。

glxinfo通过创建上下文来执行它所做的事情。看看它的源代码就知道了。

但是,GLX_MESA_query_renderer扩展确实允许询问将为特定显示/屏幕/渲染器组合创建的上下文。当然,这只能通过MESA工作;不通过MESA系统的驱动程序将无法通过此系统。

您是否尝试在不查询特定版本的情况下创建 OpenGL 上下文?

当我使用本机OpenGL函数(glxCreateContext()或wglCreateContext())来创建新的OpenGL上下文时,它们总是创建一个具有我的显卡(4.6)支持的最高OpenGL版本的上下文。

我不知道GLFW是否有相同的行为...

问题编辑答案: 创建上下文时无法查询任何OpenGL信息,因为您无法调用创建上下文glXXX()函数中的任何一个。相反,您可以创建一个虚拟上下文(不向用户显示,而是保留在内存中的某个位置)来查询所需的所有OpenGL信息,并在完成后将其删除(不用担心,许多软件,库和游戏引擎都这样做,甚至是我自己的)