首页 > 解决方案 > GL_ARB_compatibility 在核心配置文件中是否有效?

问题描述

我有一个使用 OpenGL 进行渲染的程序。在这样做时,它取决于有一个核心配置文件,但即使没有可用的核心配置文件,我总是想创建一个 OpenGL 上下文,如果只是为了能够在报告没有合适的配置文件的错误时查询驱动程序供应商和版本可用。出于这个原因,即使没有可用的核心配置文件,我总是使用一些可用的配置文件来尝试初始化,并在初始化期间检查配置文件是否符合我的先决条件,特别是 OpenGL 版本至少为 3.0,并且GL_ARB_compatibility缺席。

但是,我收到了来自用户的错误报告,他们的驱动程序似乎违反了这些假设。这是一个例子:

可以看出,glGetString(GL_VERSION)它是一个“核心配置文件上下文”,但GL_EXTENSIONS包含GL_ARB_compatibility.

我该如何解释这个?这是一个有效的配置吗?如果是,这对核心配置文件和兼容性配置文件之间不同的功能意味着什么?还是应该将其视为驱动程序错误?有没有更好的方法来检查给定的 OpenGL 上下文是核心还是兼容性?

标签: opengl

解决方案


您可以通过在创建上下文时询问它来获得核心配置文件。如果您要求提供核心配置文件,您将获得核心配置文件或上下文创建失败

没有什么可以解释的:如果你要求一个核心配置文件,并且你创建了一个上下文,你就会得到一个核心配置文件。您不需要询问个人资料是否是核心,因为您应该已经知道,因为您要求制作一个。

如果您要求提供核心配置文件,那么您不应该关心“GL_ARB_compatibility”是否可用;你甚至不应该看它,你绝对不应该基于它查询函数。

但是如果你真的想检查一个上下文是核心还是兼容性,你可以调用glGetIntegerv(GL_CONTEXT_PROFILE_MASK. 它将返回一个包含GL_CONTEXT_CORE_PROFILE_BIT或的位掩码GL_CONTEXT_COMPATIBILITY_PROFILE_BIT


推荐阅读