在libgdx的配置中,有一个useGL30布尔值。由于我从未使用OpenGL,我不确定该方法的作用。顺便说一下。我应该把它设置为假或真?哪个对我的游戏更好?
答案 0 :(得分:3)
另一个答案非常广泛但遗憾的是在某些部分不正确。首先回答你的问题:
您希望将config.useGL30
成员设置为false
,无论平台(桌面还是Android)。
除非您确实需要使用OpenGL ES 3.0功能,否则不将config.useGL30成员设置为true
。在这种情况下(如果您需要使用GLES3功能),您需要注意兼容性,即使在您不需要该功能的地方也是如此。
只需将config.useGL30
设置为true
,不就会更适合您的游戏。事实上,它可能会引入问题。
澄清一些事情:
OpenGL
和OpenGL ES
是两个不同的东西,无法比较版本。如果你真的想要比较版本,那么可以将OpenGL ES 2.0与OpenGL 4.3进行比较(OpenGL),OpenGL ES 3.0可以与OpenGL 4.5进行比较(是其子集)。
在这方面,命名useGL30
,Gdx.gl20
,Gdx.gl30
可能被视为具有误导性,因为该命名中的20
和30
实际上是指OpenGLES版本和不 OpenGL版本。更好的命名可能是useGLES30
,Gdx.gles20
和Gdx.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.gl20
或Gdx.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来清除颜色。但这是一段时间以前,所以我可能记错了
总结一下:
useGl30
允许在可用的情况下使用3.0。