gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:20:04 26 4
gpt4 key购买 nike

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

我不知道该用哪个。有人可以向我解释这些类(class)的区别,以及我应该使用哪一个吗?我试过一次移植代码但没有成功,所以我希望在重试之前把它弄清楚。

最佳答案

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

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

所以归根结底,选择核心功能,然后是 ARB 功能,最后是 EXT 功能。不过,当您使用扩展程序时,请记住在运行时检查显卡是否支持它们。因为扩展不能保证像核心功能一样适用于所有显卡。 (再次重申,核心功能只要求显卡支持特定版本的 OpenGL)。

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

记住

您始终需要牢记的一点是,如果您将其构建到“选择”可用功能的程序中,那么请始终记住您不能将 GL_TEXTURE1glActiveTextureARB< 一起使用 并且您不能将 GL_TEXTURE1_EXTglActiveTexture 一起使用。即使将它们混合有时仍会产生所需的结果,但不能保证这一点。

额外

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

更新

If the C++ code uses the EXT functions or ARB functions, should I use those too in OpenGL, or can I just use the core ones?

部分 ARB、EXT 等功能可能还不是核心功能。 您可以说扩展是为了测试新功能。然后当他们经过测试,看起来有用和稳定的时候,他们就会被做成核心功能(这个说的真的很抽象)。

如果 ARB、EXT 等功能已经作为核心功能存在。然后使用核心功能,正如已经说过的,核心功能只需要一定的 OpenGL 版本就可以运行,同样保证不要用于扩展。

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

然后,当我们考虑以上所有内容时,我会选择使用 GL30 来创建帧缓冲区,而不是使用 ARBFramebufferObjectEXTFramebufferObject .虽然如果你不能使用 GL30,我会去使用/尝试 ARBFramebufferObject,然后是 EXTFramebufferObject

关于java - 将 C++ OpenGL 帧缓冲区代码移植到 LWJGL - 我使用什么类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19641281/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com