我正在使用 OpenGL 3.3 的核心前向兼容配置文件。支持的扩展列出了 GL_ARB_MULTITEXTURE 和类似的扩展(在 OpenGL wiki 的 OpenGL 3.1 中标记为已删除),但为什么我的驱动程序报告此扩展可用?此外,GL_NV_primitive restart 报告为可用,但它不能与服务器端 OpenGL 3+ 一起使用。那么驱动程序是否可以将任意扩展报告为受支持,即使它们不应该可用或不可用?
我的结论是我不能依赖驱动程序提供有关扩展的正确信息。此外,标准规定驱动程序也没有义务报告核心扩展,但它可能。
现在,如果我使用核心配置文件将扩展报告为 GL 版本 ab 的 GL_foo_bar,我如何知道它是否不是该特定设置的旧扩展,我如何知道该特定扩展是否还不是 ab 的一部分核。
此伪代码不能在不同的 OpenGL 之间移植:版本:if(GL_foo_bar == TRUE) 将在 OpenGL 2 中工作,如果 GL_foo_bar 是核心的一部分并且驱动程序未报告为可用,则可能无法在 OpenGL3+ 上工作。我找不到一种万无一失的方法来知道该特定扩展是否真的不受支持或根本没有报告,所以如果我不希望每个 GL 函数调用之间有多个 if,我似乎需要一个单独的渲染路径。
题外话:为什么 glGetString(Gl_EXTENSIONS) 与我的核心配置文件一起使用?我认为不应该。