【发布时间】:2013-04-14 20:37:36
【问题描述】:
我正在使用 OpenGL 3.3 的核心前向兼容配置文件。支持的扩展列出了 GL_ARB_MULTITEXTURE 和类似的扩展(在 OpenGL wiki 的 OpenGL 3.1 中标记为已删除),但为什么我的驱动程序报告此扩展可用?此外,GL_NV_primitive restart 报告为可用,但它不能与服务器端 OpenGL 3+ 一起使用。那么驱动程序是否可以将任意扩展报告为受支持,即使它们不应该可用或不可用?
我的结论是,我不能依赖驱动程序提供有关扩展的正确信息。此外,标准规定驱动程序也没有义务报告核心扩展,但它可能。
现在,如果我有一个使用核心配置文件报告为 GL_foo_bar 的 GL 版本 a.b 的扩展,我如何知道它是否不是该特定设置的旧扩展,我如何知道该特定扩展是否已经是一部分a.b 核心。
此伪代码不可在不同的 OpenGL 之间移植:版本:if(GL_foo_bar == TRUE) 将在 OpenGL 2 中工作,如果 GL_foo_bar 是核心的一部分并且驱动程序未报告为可用,则可能无法在 OpenGL3+ 上工作。我找不到一个万无一失的方法来知道该特定扩展是否真的不受支持或根本没有报告,所以如果我不想在每个 GL 函数调用之间有多个 if,我似乎需要一个单独的渲染路径。
题外话:为什么 glGetString(Gl_EXTENSIONS) 可以与我的核心配置文件一起使用?我认为不应该。
【问题讨论】:
-
"core forward-compatible profile" 请停止这样做。只需使用核心配置文件。 Forward-compatibility is pointless with profiles. "为什么 glGetString(Gl_EXTENSIONS) 与我的核心配置文件一起工作?“因为你的驱动程序有问题。
-
@NicolBolas 使用前向兼容有什么问题?如果某天某些东西会再次被弃用,我想立即停止我的程序工作,这样我就可以修复我的代码以备不时之需。
-
因为不使用 OpenGL 支持的东西是没有意义的。自 GL 3.0 起,宽线已被弃用,但它们仍然是核心 OpenGL 配置文件的一部分,尽管被标记为已弃用。事实上,核心 OpenGL 中的弃用列表中有一些项目,其中大部分已被标记为弃用多年。然而他们还在那里。 ARB 显然不愿意触发摆脱它们(特别是考虑到迄今为止核心/兼容性区分的“成功”程度)。所以假装他们注定要消失是没有意义的。
-
另外,如果 OpenGL Wiki 说 ARB_multitexture 已从核心 OpenGL 中“删除”,那么请说明我可以从 Wiki 中删除的位置。
-
@NicolBolas 就我不关心 ARB 的内部政治而言,我想确保我只使用有效的东西,而不取决于他们会或不会决定做什么未来十年。即使现在也很难理解 GL 规范混乱,我不想很快寻找在哪个版本中不推荐使用的东西。 Wiki 链接:opengl.org/wiki/GL_ARB_multitexture 如果你修复了 wiki,那么很多功能都因为版本错误而成为核心,例如:opengl.org/wiki/GLAPI/glActiveTexture 它是自 1.3 以来的核心(GL_ARB_MULTITEXTURE)。
标签: opengl