所以我一直想知道如何更改 lwjgl 中的 openGL 版本..我知道我可以使用 PixelFormat 和 ContextAttribs 更改版本,正如 wiki 上所说http://lwjgl.org/wiki/index.php?title=Version_selection
但这只能让我降到最低 3.2,如果我想降得更低怎么办?比如 2.1 甚至 1.1?有什么办法可以做到这一点吗?
OpenGL 上下文版本背后的逻辑可能有点令人困惑。但放在历史背景下来看,确实有道理:
过去,没有特殊的“上下文版本”提示。创建上下文只有一种方法,您将获得运行它的特定实现所支持的最高版本。您可以查询版本字符串和扩展字符串,并检查您的代码实际需要的所有功能是否可用。获得比您真正需要的更高的版本从来都不是问题,因为每个新的 GL 版本都 100% 向后兼容以前的版本。 (嗯,至少在理论上)。这种情况一直持续到 OpenGL 2.1。
然而,OpenGL 3.0 引入了“弃用模型”。功能首次被标记为“已弃用”,并计划实际删除。 OpenGL 历史上第一次不再保证向后兼容性。随后,引入了新的上下文创建机制:ARB_create_context
功能(请参阅扩展规范工作组版本 or the GLX版本),其中包括请求“上下文版本”的可能性。现在您遇到的情况是,旧应用程序对 GL3 和新上下文创建机制一无所知,但仍应像以前一样运行。所以旧方法给出的是兼容的到 GL 2.1(或者,如果您有一个非常旧的或有限的实现,当不支持更现代的 GL 2.x 功能时,它只为您提供一些 GL 1.x 版本)。
使用 OpenGL 3.2、上下文profiles哪里介绍的。这基本上是 ARB 最终提出的解决方案,用于处理这些兼容性问题。从 GL3.2 开始,定义了两个配置文件:core and 兼容性。在核心配置文件中,已弃用的内容被删除,而在兼容性配置文件中,您会得到一些可以支持 GL 从 1.0 开始的所有内容的内容。
事情本来可以这么简单,但事实并非如此。实现者只需要支持核心配置文件,兼容性配置文件是可选的。这导致了我们现在的情况:取决于实现and平台上,GL 上下文的选项会有所不同:
所有主要桌面平台(Windows、Unix/Linux、OSX)都支持使用旧上下文创建方法的“遗留”GL。
在 Windows 上,使用现代 GPU 和驱动程序,您通常仍然可以获得最高的兼容性配置文件当您使用旧版上下文创建/不请求特定版本/请求
在 OSX 上,有一个明显的削减。旧版 GL 创建最多将为您提供 GL2.1。如果你需要现代 GL,你必须要 3.2core轮廓。
在 Linux 上,这取决于您使用的 GPU 驱动程序。 AMD 和 NVidia 的专有驱动程序的行为与 Windows 情况类似。然而,开源 mesa3D 实现(也被官方英特尔 GPU 驱动程序使用)确实更像 OSX 那样处理它:仅支持核心配置文件。
对于 GL 开发人员来说,需要考虑以下几点:
您无法在同一应用程序中可靠地混合现代(GL >= 3)和已弃用的旧功能,因为这并非在所有平台上都可用(并且规范也没有要求)。如果您想走“现代”路线,请请求 >=GL 3.2 的核心配置文件。
如果您想使用“旧版”GL,您应该限制自己使用 GL2.1 功能集。您仍然可能最终得到更高版本的某些兼容性配置文件,但您永远不能依赖它 - 至少,如果您不针对特定平台。但由于 GL 规范根本不需要实现兼容性配置文件,因此我不推荐这样做。这也意味着请求兼容性配置文件在实践中毫无用处。
您可以信赖的内容:如果您请求特定的 GL 版本(可能还有配置文件)并且您实际上获得了上下文,它可能不完全是您请求的版本,但它将是一个支持您的版本的所有功能的版本要求。 (但相反的结论在一般情况下并不成立。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)