【问题标题】:Changing OpenGL Version In LWJGL在 LWJGL 中更改 OpenGL 版本
【发布时间】:2023-03-11 04:06:02
【问题描述】:

所以我一直想知道如何更改 lwjgl 中的 openGL 版本。我知道我可以使用 PixelFormat 和 ContextAttribs 更改版本,正如 wiki 上所说 http://lwjgl.org/wiki/index.php?title=Version_selection

但这只能让我降到最低 3.2,如果我想让它更低怎么办?可能是 2.1 甚至 1.1?有没有办法做到这一点?

【问题讨论】:

  • 通常你调用像GL11.glWhatever或GL21.glQq这样的方法。那不是OpenGL版本吗?
  • 是的,我使用 GL11.something 但是当我调用 glGetString(GL11.GL_VERSION) 时,它返回的版本是 OpenGL 4.4
  • 这是最高版本,但如果你不调用这些方法中的任何一个,你应该没有问题,对吧?
  • 所以这不是我使用的版本?这是最大值?如果是这样,为什么他们提供更改 3.2 中的版本?我想我误解了版本的东西.. :/
  • 是的,您的“版本”实际上只是您的最高版本,但是预计在某些新显卡中,对 GL11 和其他早期版本的支持将被删除,但实际上无法更改你的版本。

标签: java opengl lwjgl


【解决方案1】:

嗯,OpenGL 上下文版本背后的逻辑可能有点混乱。但从历史背景来看,它确实是有道理的:

在过去,没有特殊的“上下文版本”提示。只有一种方法可以创建上下文,您将获得运行它的特定实现所支持的最高版本。您可以查询版本字符串和扩展字符串,并检查您的代码实际需要的所有功能是否可用。获得比您真正需要的更高版本从来都不是问题,因为每个新的 GL 版本都 100% 向后兼容以前的版本。 (好吧,至少在理论上)。它一直保持到 OpenGL 2.1。

但是,在 OpenGL 3.0 中,引入了“弃用模型”。首次将功能标记为“已弃用”并计划实际删除。在 OpenGL 的历史上,第一次不再保证向后兼容性。随后,引入了一种新的上下文创建机制:ARB_create_context 功能(请参阅wgl version 或glX version 的扩展规范),其中包括请求“上下文版本”的可能性。现在您遇到的情况是,对 GL3 和新的上下文创建机制一无所知的旧应用程序应该仍然像以前一样运行。所以旧方法所提供的是与 GL 2.1兼容的东西(或者,如果你有一个非常旧或有限的实现,它只给你一些 GL 1.x 版本,当更现代不支持 GL 2.x 功能)。

在 OpenGL 3.2 中,引入了上下文配置文件。这基本上是 ARB 最终想出的解决方案,用于处理这些兼容性问题。从 GL3.2 开始,定义了两个配置文件:core 和 compatibility。在核心配置文件中,已弃用的东西被删除,而在兼容性配置文件中,您会得到一些东西,这些东西可以追溯到支持 GL 从 1.0 开始的所有内容。

事情可能就这么简单,但事实并非如此。实现者只需要支持核心配置文件,兼容性配置文件是可选的。这导致了我们现在的情况:根据实现和平台,GL上下文的选项会有所不同:

  • 所有主要桌面平台(Windows、Unix/Linux、OSX)都支持使用旧上下文创建方法的“旧版”GL。

  • 在 Windows 上,使用现代 GPU 和驱动程序,当您使用旧版上下文创建/不请求特定版本/请求版本

  • 在 OSX 上,有一个锐利的削减。 Legacy GL 创建最多会给你 GL2.1。如果您需要现代 GL,则必须要求提供 3.2 core 配置文件。

  • 在 Linux 上,这取决于您使用的 GPU 驱动程序。 AMD 和 NVidia 的专有驱动程序的行为类似于 Windows 案例。然而,开源 mesa3D 实现(也被官方英特尔 GPU 驱动程序使用)确实更像 OSX 那样处理它:只支持核心配置文件。

对于 GL 开发人员,有几点需要考虑:

  • 您不能在同一个应用程序中可靠地混合现代 (GL >= 3) 和已弃用的旧功能,因为这并非在所有平台上都可用(并且不是规范要求的)。如果您想走“现代”路线,请为某些 >=GL 3.2 请求核心配置文件。

  • 如果您想使用“旧版”GL,您应该限制自己使用 GL2.1 功能集。您仍然可能最终获得更高版本的一些兼容性配置文件,但您永远不能依赖它 - 至少,如果您不针对特定平台。但是由于 GL 规范根本不需要实现兼容性配置文件,所以我不建议这样做。这也意味着在实践中请求兼容性配置文件毫无用处。

您可以依赖的内容:如果您请求了特定的 GL 版本(可能还有配置文件)并且您实际上得到了一个上下文,它可能不完全是您要求的版本,但它将是一个支持所有功能的版本您要求的版本。 (但相反的结论在一般情况下是无效的。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多