【问题标题】:Using methods of OpenGL with LWJGLOpenGL与LWJGL的使用方法
【发布时间】:2014-01-13 20:24:19
【问题描述】:

我对如何将 OpenGL 与 LWJGL 一起使用感到困惑,我计划使用 OpenGL 4.4(或 4.3)并远离 OpenGL 3.0 下的任何东西。

然而,我第一次遇到需要我做的一本书的作业glClearBufferfv(),我在GL44.* 找不到它,原来它在GL30.*

比起每次都使用GL30.glClearBufferfv(...),我宁愿用一个静态导入来编写我的代码,这也迫使我准确地记住在哪个版本中引入了哪些功能。

我知道很多人使用 LWJGL,所以我想应该有一个更简单的方法,我应该如何使用它?

编辑:没有引起足够的重视,貌似没有GL30.glClearBufferfv(...),但是有fi的变种。我现在应该用什么?

【问题讨论】:

  • 有一种方法可以启用“核心”配置文件 - 任何不推荐使用的功能都会引发异常

标签: java opengl lwjgl


【解决方案1】:

您需要了解 OpenGL 版本控制的工作原理,才能了解为什么 glClearBufferfv (...) 位于 GL30 命名空间中。

每个版本都引入了一组新的必需功能,直到版本 3.1,所需功能才有所增加。随着 3.1 的引入以及 3.2 中核心/兼容性配置文件之间的区别,您可能会在比 3.1 更旧的命名空间中遇到已删除的功能。但是,实际上不可能构建一个使用 OpenGL 4.4 或 4.3 中添加的功能的 OpenGL 应用程序。

执行任何有用操作所需的大多数命令都是在 10 到 15 年前引入的。例如,glDrawArrays (...) 是在 OpenGL 1.1 中引入的,并且对于构建 GL 4.4 软件仍然至关重要。因此,要绘制一个顶点数组,您必须使用 GL11 命名空间中的某些内容。因此,您将从许多不同的命名空间中借用命令和常量。

【讨论】:

  • 我正在使用Display.create(new PixelFormat(), new ContextAttribs(3, 2).withForwardCompatible(true).withProfileCore(true));,甚至GL11.* 仍然有效,这是正确的行为吗?如果是这样,它从什么保护我?
  • @skiwi:什么可以保护您免受伤害?对于每个版本的 GL,LWJGL 被分成不同的命名空间。一般的想法是,您不能意外地从 较新 版本的 OpenGL 调用函数,而不是为您的软件编写的版本。例如,您可以import GL11.* - GL33.*,然后不会显示来自 OpenGL 4.0+ 的函数。它的设计不是为了反过来工作,就像我指出的那样,GL 1.0 和 1.1 中的许多函数和常量对于编写一个工作的 GL 程序仍然是绝对必要的。
  • 他们有什么方法可以让搜索方法更容易忍受,还是我需要记住它们? (它们属于哪个OpenGL版本)
  • @skiwi:来自不同版本 GL 的函数名和常量实际上从不相互冲突,因此您可以添加一堆行,例如:import static org.lwjgl.opengl.GL11.*,这样您就不必限定任何内容。如果你这样做,一个好的代码完成 IDE 可能会使函数和常量快速搜索。我知道静态导入通常不受欢迎,但在 GL 的情况下,命名空间是绝对不同的;函数已经以 gl 开头,常量已经以 GL_ 开头 - 这些东西永远不会与任何非 GL 相关的东西发生冲突。
  • 好的,非常感谢,现在让 Netbeans 在使用 Refactor Imports 时保留我未使用的导入 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多