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

时间:2018-04-16 16:39:22

标签: c++ linux opengl glfw

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

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

编辑:

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

2 个答案:

答案 0 :(得分:3)

当您要求提供X.Y版本时,您不会要求提供X.Y版本;你要求至少版本X.Y.允许实现为您提供与X.Y。

向后兼容的最高版本

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

所以只需针对最小的OpenGL版本编写代码,然后提出要求。你会得到实现给你的任何东西,你可以查询你以后得到的东西。

  

想象一下,我想要复制一下glxinfo的作用。

glxinfo通过创建上下文来完成它所做的工作。只需look at its source code

然而,GLX_MESA_query_renderer extension确实允许询问将为特定显示/屏幕/渲染器组合创建的上下文。当然,这只适用于MESA;不会通过MESA的系统看到的驱动程序将无法通过此显示。

答案 1 :(得分:1)

您是否尝试过创建OpenGL上下文而不查询特定版本?

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

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

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