我想知道是否有办法(理想情况下是跨平台,但如果不仅仅是POSIX兼容或至少在Linux中)来查询当前系统中支持的最高OpenGL版本。
我希望能够将GLFW窗口实例化为支持最高的版本,而不是盲目地尝试不同的版本,直到允许有效的上下文初始化。
编辑:
假设我没有创建上下文。想象一下,我想复制一下glxinfo的作用。换句话说,我希望能够在没有创建上下文的情况下查询已安装的OpenGL版本。
答案 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)