将C ++ OpenGL帧缓冲区代码移植到LWJGL - 我应该使用什么类?

时间:2013-10-28 17:30:41

标签: java c++ opengl lwjgl framebuffer

我正在尝试使用this tutorial在LWJGL中执行阴影贴图。我注意到LWJGL有三个类,包含本教程使用的所有帧缓冲函数:ARBFramebufferObjectEXTFramebufferObjectGL30

我不知道使用哪一个。有人可以向我解释这些课程的不同之处,以及我应该使用哪一课程?我曾尝试移植一次代码而没有运气,所以在我再试一次之前,我只是想清除它。

1 个答案:

答案 0 :(得分:1)

通过使用核心功能,只要他们的显卡可以运行特定的GL版本,大多数人就有可能运行该程序。

  • EXT扩展程序通常仅由少数供应商支持。
  • ARB扩展通常由大多数供应商支持,但不一定是所有供应商。
  • 支持程序正在使用的特定GL版本的每张卡都支持核心功能。

如此底线,去核心功能,然后ARB功能和持续EXT功能。虽然当您使用Extensions时,请记得在运行时检查显卡是否支持它们。因为扩展不能保证在所有图形卡上工作,如Core功能。 (因为Core功能只需要显卡支持某个版本的OpenGL)。

另外请记住,EXT和ARB扩展并不是唯一可用的扩展,Nvidia,AMD,Apple等也为OpenGL制作了自己的扩展。

记住

您需要记住的一件事是,如果您将其构建为“选择”可用功能的程序,那么请始终记住您不能将GL_TEXTURE1glActiveTextureARB一起使用,并且您可以不要将GL_TEXTURE1_EXTglActiveTexture一起使用。尽管混合它们有时仍会产生预期的效果,但不能保证这一点。

附加

尝试阅读我的回答here问题基本上与你的问题相同,尽管OP询问核心功能和扩展之间的区别。

更新

  

如果C ++代码使用EXT函数或ARB函数,我是否应该在OpenGL中使用它们,或者我可以只使用核心函数?

某些ARB,EXT等功能可能还不是核心功能。 你可以说扩展用于测试新功能。然后,当他们经过测试,看起来有用且稳定时,他们将被制作成核心功能(这真的是抽象的)。

虽然ARB,EXT等功能已经作为核心功能存在。然后使用Core函数,如前所述,Core函数只需要某个OpenGL版本就可以运行,同样的保证也不用于扩展。

如果显卡不支持OpenGL 3.0或更高版本,那么您当然不能使用这些核心功能。那么你可能会很幸运,你可以使用ARB或EXT等功能来完成同样的事情。

然后,当我们将所有上述内容计算在内时,我会继续使用GL30创建Framebuffer,而不是使用ARBFramebufferObjectEXTFramebufferObject。虽然如果你不能使用GL30,我会继续使用/尝试ARBFramebufferObject,然后再使用EXTFramebufferObject