我正在尝试使用this tutorial在LWJGL中执行阴影贴图。我注意到LWJGL有三个类,包含本教程使用的所有帧缓冲函数:ARBFramebufferObject,EXTFramebufferObject和GL30。
我不知道使用哪一个。有人可以向我解释这些课程的不同之处,以及我应该使用哪一课程?我曾尝试移植一次代码而没有运气,所以在我再试一次之前,我只是想清除它。
答案 0 :(得分:1)
通过使用核心功能,只要他们的显卡可以运行特定的GL版本,大多数人就有可能运行该程序。
如此底线,去核心功能,然后ARB功能和持续EXT功能。虽然当您使用Extensions时,请记得在运行时检查显卡是否支持它们。因为扩展不能保证在所有图形卡上工作,如Core功能。 (因为Core功能只需要显卡支持某个版本的OpenGL)。
另外请记住,EXT和ARB扩展并不是唯一可用的扩展,Nvidia,AMD,Apple等也为OpenGL制作了自己的扩展。
您需要记住的一件事是,如果您将其构建为“选择”可用功能的程序,那么请始终记住您不能将GL_TEXTURE1
与glActiveTextureARB
一起使用,并且您可以不要将GL_TEXTURE1_EXT
与glActiveTexture
一起使用。尽管混合它们有时仍会产生预期的效果,但不能保证这一点。
尝试阅读我的回答here问题基本上与你的问题相同,尽管OP询问核心功能和扩展之间的区别。
如果C ++代码使用EXT函数或ARB函数,我是否应该在OpenGL中使用它们,或者我可以只使用核心函数?
某些ARB,EXT等功能可能还不是核心功能。 你可以说扩展用于测试新功能。然后,当他们经过测试,看起来有用且稳定时,他们将被制作成核心功能(这真的是抽象的)。
虽然ARB,EXT等功能已经作为核心功能存在。然后使用Core函数,如前所述,Core函数只需要某个OpenGL版本就可以运行,同样的保证也不用于扩展。
如果显卡不支持OpenGL 3.0或更高版本,那么您当然不能使用这些核心功能。那么你可能会很幸运,你可以使用ARB或EXT等功能来完成同样的事情。
然后,当我们将所有上述内容计算在内时,我会继续使用GL30
创建Framebuffer,而不是使用ARBFramebufferObject
和EXTFramebufferObject
。虽然如果你不能使用GL30
,我会继续使用/尝试ARBFramebufferObject
,然后再使用EXTFramebufferObject
。