在上下文初始化之前查询支持的最高 OpenGL 版本?
Query highest supported OpenGL version before context initialization?
我想知道是否有办法(最好是跨平台,但如果不只是 POSIX 兼容或至少在 Linux 中)查询当前支持的最高 OpenGL 版本系统.
我希望能够将 GLFW windows 实例化为支持的最高版本,而不是盲目尝试不同的版本,直到允许有效的上下文初始化。
编辑:
假设我没有创建上下文。想象一下,我想复制 glxinfo 所做的事情。换句话说,我希望能够在不创建上下文的情况下查询已安装的 OpenGL 版本。
当你请求版本X.Y时,你并不是在请求版本X.Y;您要求 至少 版本 X.Y。允许实现为您提供向后兼容 X.Y.
的最高版本
因此,如果您要求 3.3 核心配置文件,您很可能会获得 4.6 核心配置文件。返回较低版本的实现没有意义。
因此,只需针对最低 OpenGL 版本编写代码,然后提出要求。你会得到实现给你的任何东西,你可以查询你以后得到的东西。
Imagine I want to replicate what glxinfo does.
glxinfo
通过 创建上下文 来完成它的工作。就 look at its source code.
但是,GLX_MESA_query_renderer
extension 允许询问为特定 display/screen/renderer 组合创建的上下文。当然,这只能通过 MESA 进行;不通过 MESA 系统的驱动程序将不会通过此可见。
您是否尝试过在不查询特定版本的情况下创建 OpenGL 上下文?
当我使用本机 OpenGL 函数(glxCreateContext() 或 wglCreateContext())创建新的 OpenGL 上下文时,它们总是创建一个具有我的显卡支持的最高 OpenGL 版本 (4.6) 的上下文。
不知道GLFW有没有相同的行为...
问题编辑的答案:
在不创建上下文的情况下查询任何 OpenGL 信息是不可能的,因为在不创建上下文的情况下您无法调用任何 glXXX()
函数。您可以改为创建一个 dummy 上下文(不向用户显示,但保留在内存中的某个位置)来查询您想要的所有 OpenGL 信息,并在完成后将其删除(不要不用担心,许多软件、库和游戏引擎都这样做,甚至我的 own)
我想知道是否有办法(最好是跨平台,但如果不只是 POSIX 兼容或至少在 Linux 中)查询当前支持的最高 OpenGL 版本系统.
我希望能够将 GLFW windows 实例化为支持的最高版本,而不是盲目尝试不同的版本,直到允许有效的上下文初始化。
编辑:
假设我没有创建上下文。想象一下,我想复制 glxinfo 所做的事情。换句话说,我希望能够在不创建上下文的情况下查询已安装的 OpenGL 版本。
当你请求版本X.Y时,你并不是在请求版本X.Y;您要求 至少 版本 X.Y。允许实现为您提供向后兼容 X.Y.
的最高版本因此,如果您要求 3.3 核心配置文件,您很可能会获得 4.6 核心配置文件。返回较低版本的实现没有意义。
因此,只需针对最低 OpenGL 版本编写代码,然后提出要求。你会得到实现给你的任何东西,你可以查询你以后得到的东西。
Imagine I want to replicate what glxinfo does.
glxinfo
通过 创建上下文 来完成它的工作。就 look at its source code.
但是,GLX_MESA_query_renderer
extension 允许询问为特定 display/screen/renderer 组合创建的上下文。当然,这只能通过 MESA 进行;不通过 MESA 系统的驱动程序将不会通过此可见。
您是否尝试过在不查询特定版本的情况下创建 OpenGL 上下文?
当我使用本机 OpenGL 函数(glxCreateContext() 或 wglCreateContext())创建新的 OpenGL 上下文时,它们总是创建一个具有我的显卡支持的最高 OpenGL 版本 (4.6) 的上下文。
不知道GLFW有没有相同的行为...
问题编辑的答案:
在不创建上下文的情况下查询任何 OpenGL 信息是不可能的,因为在不创建上下文的情况下您无法调用任何 glXXX()
函数。您可以改为创建一个 dummy 上下文(不向用户显示,但保留在内存中的某个位置)来查询您想要的所有 OpenGL 信息,并在完成后将其删除(不要不用担心,许多软件、库和游戏引擎都这样做,甚至我的 own)