【发布时间】:2020-07-02 15:16:34
【问题描述】:
我有一个使用 OpenGL 进行渲染的程序。在这样做时,它取决于有一个核心配置文件,但即使没有可用的核心配置文件,我总是想创建一个 OpenGL 上下文,如果只是为了能够在报告没有合适的配置文件的错误时查询驱动程序供应商和版本可用。出于这个原因,即使没有可用的核心配置文件,我总是使用 some 可用的配置文件来尝试初始化,并在初始化期间检查配置文件是否符合我的先决条件,特别是 OpenGL 版本至少为 3.0,并且 GL_ARB_compatibility 不存在。
但是,我收到了来自用户的错误报告,他们的驱动程序似乎违反了这些假设。这是一个例子:
- GL_VENCOR:
ATI Technologies Inc. - GL_VERSION:
4.2.11411 Core Profile Context - GL_RENDERER:
AMD Radeon HD 7610M - GL_EXTENSIONS:[...]
GL_ARB_compatibility[...]
可以看出,glGetString(GL_VERSION) 说它是一个“核心配置文件上下文”,但GL_EXTENSIONS 包含GL_ARB_compatibility。
我应该如何解释这个?这是一个有效的配置吗?如果是,这对核心配置文件和兼容性配置文件之间不同的功能意味着什么?还是应该将其视为驱动程序错误?有没有更好的方法来检查给定的 OpenGL 上下文是核心还是兼容性?
【问题讨论】:
-
OpenGL 3.1 中没有配置文件的概念,在 3.0 中更是如此。因此,如果您在 OpenGL 3.1 的最大实现(不支持 3.2 或更高版本)上运行您的软件,无论如何您都会得到
GL_ARB_compatibility。 -
@Ruslan:你是对的,当然。我想我已经不支持 3.0/3.1 甚至没有意识到这一点。
标签: opengl