LibGdx我应该使用gl30吗?

时间:2017-10-15 08:34:31

标签: java libgdx

在libgdx的配置中,有一个useGL30布尔值。由于我从未使用OpenGL,我不确定该方法的作用。顺便说一下。我应该把它设置为假或真?哪个对我的游戏更好?

2 个答案:

答案 0 :(得分:3)

另一个答案非常广泛但遗憾的是在某些部分不正确。首先回答你的问题:

您希望将config.useGL30成员设置为false,无论平台(桌面还是Android)。

除非您确实需要使用OpenGL ES 3.0功能,否则将config.useGL30成员设置为true。在这种情况下(如果您需要使用GLES3功能),您需要注意兼容性,即使在您不需要该功能的地方也是如此。

只需将config.useGL30设置为true就会更适合您的游戏。事实上,它可能会引入问题。

澄清一些事情:

OpenGLOpenGL ES是两个不同的东西,无法比较版本。如果你真的想要比较版本,那么可以将OpenGL ES 2.0与OpenGL 4.3进行比较(OpenGL),OpenGL ES 3.0可以与OpenGL 4.5进行比较(是其子集)。

在这方面,命名useGL30Gdx.gl20Gdx.gl30可能被视为具有误导性,因为该命名中的2030实际上是指OpenGLES版本和 OpenGL版本。更好的命名可能是useGLES30Gdx.gles20Gdx.gles30

OpenGL ES 3.0 完全向后兼容OpenGL ES 2.0,桌面也是如此(OpenGL ES通过OpenGL模拟)。尽管API本身是兼容的,但使用的着色器语言并非如此。因此,如果您将config.useGL30设置为true,那么很有可能您的着色器将无法正常运行,正如您所期望的那样。这包括libgdx附带的着色器(SpriteBatch,ShapeRenderer,ModelBatch等)。

因此,对于您的桌面项目,仅将useGL30成员设置为true是没有意义的,特别是如果您不对代码进行其他调整。

答案 1 :(得分:1)

来自LwjglApplicationConfiguration的文档:

  

是否尝试使用OpenGL ES 3.0。

LibGDX使用许多功能来维护多个平台之间的兼容性。如果您未启用此设置,则无法在可能的情况下使用OpenGL 3(IIRC)。基本上该方法的作用是支持使用OpenGL ES 3.(我认为所有较新的计算机都支持OpenGL 3,问题出在Android中,它是在API 18中添加的,它取决于制造商的自定义实现。我会这样做稍后再说)

值得查看this answer,即使问题略有不同,它也解释了LibGDX的工作原理:

  

LibGDX正在运行OpenGL ES2.0,它是现代标准的古老版本。它必须出于兼容性原因:大多数移动设备不支持任何更高的标准。

     

OpenGL ES2.0与OpenGL 2.0类似,但有一些变化,并于2007年发布。另一方面,LWJGL支持最新最好的(OpenGL 4.5)及以下所有内容。它还具有OpenCL(GPU处理),OpenAL(3D音频)和Vulkan(Magic驱动程序和东西)绑定。

OpenGL ES 3是Android上可用的最新版本(我也假设是iOS设备),而OpenGL 4.6是桌面设备上最新的版本(有支持它的显卡)。

值得注意的一件事是,OpenGL ES 3也相当陈旧(2012),但它向后兼容OpenGL ES 2.

对这个特定部分不太了解,这或多或少是一个有根据的猜测:当您使用LibGDX编写代码时,您调用Gdx.gl(或Gdx.gl20Gdx.gl30)。然后LibGDX调用相应的API(Android和iOS上的OpenGL ES,桌面上的LWJGL / JOGL等)

使用useGl30的AFAIK可以使用OpenGL ES 3.您不应该使用OpenGL 3的主要原因是Android。 API 18中添加了OpenGL 3,并且:

  

注意:在设备上支持OpenGL ES 3.0 API需要实现设备制造商提供的此图形管道。运行Android 4.3或更高版本的设备可能不支持OpenGL ES 3.0 API

但这对你来说不是问题,因为你(根据我的理解)并不是针对Android的。因此,使用最新版本是一个好主意。

意味着您可以使用Open GL 4.6。但这意味着you would have to call the LWJGL bindings directly

问题是你只能针对特定的事情做这件事,LibGDX本身仍然会使用2.0 / 3.0。

考虑到所有这些,我将回答最后两个问题:

  

顺便说一下。我应该把它设置为假或真?

如果您未定位Android,则应将其设置为true。会出现问题,因为并非所有运行API 18+的设备都必须支持它(链接到此答案的前面)。如果您正在运行桌面,则应定位您可以找到的最新版本,因为较新版本还会添加您可能需要的新功能。除非OpenGL 4+中有特定内容(4+不是拼写错误),否则你应该坚持使用框架本身而不是直接调用LWJGL(桌面上的LibGDX是建立在LWJGL之上的。)

您可以单独使用OpenGL 2.0制作游戏。 OpenGL 1和2不兼容,但2和3是不兼容的。这意味着如果你决定要使用OpenGL 3,你仍然可以调用OpenGL 2(AFAIK,根据LWJGL的经验,后来的版本相互依赖才能正常工作。如果使用4,你仍然需要调用2 3,以获得适当的API。虽然我可能错了。

  

哪个对我的游戏更好?

这是一个意见问题,但是你必须要记住一件重要的事情:如果你使用OpenGL 3,你仍然可以使用OpenGL 2.那你选择之间别无选择。如果启用OpenGL 3,则可以使用2和3 because openGL ES 3 is backwards compatible with OpenGL ES 2

我还没有提到的东西是使用不同的版本。

默认情况下,

Gdx.gl使用OpenGL 2.这意味着如果要访问3.0功能,则必须将Gdx.gl30.*调用相关方法。因为它是向后兼容的,所以必须使用Gdx.gl20.*来调用2.0功能(因为它们不直接出现在3.0中)(由于向后兼容性,如果你有3.0,你也有2.0)

我刚刚使用过LWJGL,并且要调用早期版本中添加的一些字段(但未删除),您必须调用相关版本。如果您使用的是4.6,则仍然需要调用2.0来清除颜色。但这是一段时间以前,所以我可能记错了

总结一下:

  • 如果你只是在桌面上,你应该使用OpenGL 3(因为Android API 18+可能不支持它。如果你也瞄准Android,你必须考虑是否要使用OpenGL 3,以及通过失去对许多设备的支持)
  • useGl30允许在可用的情况下使用3.0。
  • 2.0和3.0是兼容的,因此您不必担心您支持的版本。你可以并排使用。