Java 移植C++;LWJGL的OpenGL帧缓冲区代码-我使用什么类?

Java 移植C++;LWJGL的OpenGL帧缓冲区代码-我使用什么类?,java,c++,opengl,lwjgl,framebuffer,Java,C++,Opengl,Lwjgl,Framebuffer,我正在尝试使用LWJGL执行阴影映射。我注意到LWJGL有三个类,其中包含本教程使用的所有帧缓冲区函数:、和 我不知道该用哪一个。有人能给我解释一下这些类的区别吗?我应该使用哪一个?我曾经尝试过移植代码,但运气不好,所以我希望在再次尝试之前将其清除。通过使用核心函数,大多数人都能够运行该程序,只要他们的图形卡能够运行特定的GL版本 EXT扩展通常只有少数供应商支持 ARB扩展通常得到大多数供应商的支持,但不一定得到所有供应商的支持 核心功能由支持程序使用的特定GL版本的每一张卡支持 因此,底

我正在尝试使用LWJGL执行阴影映射。我注意到LWJGL有三个类,其中包含本教程使用的所有帧缓冲区函数:、和


我不知道该用哪一个。有人能给我解释一下这些类的区别吗?我应该使用哪一个?我曾经尝试过移植代码,但运气不好,所以我希望在再次尝试之前将其清除。

通过使用核心函数,大多数人都能够运行该程序,只要他们的图形卡能够运行特定的GL版本

  • EXT扩展通常只有少数供应商支持
  • ARB扩展通常得到大多数供应商的支持,但不一定得到所有供应商的支持
  • 核心功能由支持程序使用的特定GL版本的每一张卡支持
因此,底线是核心函数,然后是ARB函数,最后是EXT函数。但是,当您使用扩展时,请记住在运行时检查图形卡是否支持它们。因为扩展不能保证像核心功能一样在所有图形卡上工作。(同样,核心功能只要求图形卡支持特定版本的OpenGL)

还要记住,EXT和ARB扩展不是唯一可用的扩展,Nvidia、AMD、Apple等公司也为OpenGL提供了自己的扩展

记得 您需要始终记住的是,如果您将其构建到一个“选择”可用函数的程序中,那么请始终记住您不能将
GL_TEXTURE1
glactivetexturearlab
一起使用,也不能将
GL_TEXTURE1\u EXT
glActiveTexture
一起使用。尽管混合它们有时仍能得到预期的结果,但这并不能保证

额外的 试着阅读我的答案这个问题基本上与你的问题相同,尽管OP询问了核心函数和扩展之间的区别

更新 <>如果C++代码使用了Ext函数或ARB函数,我应该在OpenGL中使用这些函数,还是只能使用核心函数? 一些ARB、EXT等函数可能还不是核心函数。你可以说扩展是用来测试新函数的。然后,当它们经过测试,并且看起来有用且稳定时,它们将被制作成核心功能(这实际上是抽象的说法)

但是如果ARB、EXT等功能已经作为核心功能存在。然后使用核心函数,正如前面所说的,核心函数只需要某个OpenGL版本就可以运行,同样的保证不适用于扩展

如果图形卡不支持OpenGL 3.0或更高版本,那么您当然不能使用这些核心功能。那么您可能会很幸运,您可以使用ARB或EXT等函数来完成相同的任务


然后,当我们计算以上所有内容时,我会使用
GL30
来创建帧缓冲区,而不是使用
ARBFramebufferObject
EXTFramebufferObject
。尽管如果你不能使用
GL30
,我还是会尝试使用
ARBFramebufferObject
,然后再使用
EXTFramebufferObject

谢谢,这就把事情搞定了。让我再问你一个问题,让我说我把一些C++ OpenGL移植到java LWJGL中。如果C++代码使用了Ext函数或ARB函数,我应该在OpenGL中使用这些函数,还是可以直接使用核心代码呢?