Android设备上GL_MAX_TEXTURE_SIZE较低时的纹理质量差

3
我最近在几个安卓设备上测试了我的游戏。在测试中,我遇到了Galaxy S2的一个奇怪问题。当我启动游戏时,整个游戏都能正常运行,但是背景出现了问题。游戏的背景显示为黑色而不是预期的纹理。在搜索互联网时,我发现了这个论坛,意识到这是Galaxy S2上的一个不良纹理问题,因为游戏的背景图像包含在一个单独且非常大的精灵表(4096)中,而游戏的其他角色则包含在较小的精灵表中。从这里我推断出这与GL_MAX_TEXTURE_SIZE有关。
现在我的问题是:像Google Nexus 10这样具有大屏幕的设备(宽度为2560)是否可能具有GL_MAX_TEXTURE_SIZE为2048?
此外,Android设备上最常见的GL_MAX_TEXTURE_SIZE是多少,如果您也想让您的应用程序服务于分辨率非常大的设备,如何处理此类问题?
1个回答

3

很遗憾,这是可能的。

移动设备之间可能存在差异。OpenGL ES 2.0规范表示GL_MAX_TEXTURE_SIZE的最小值仅为64!因此,在游戏中检查硬件容量是一个好习惯。 供应商只需要支持规范的最低要求,其余的是由他们自己决定的。

请参阅http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml,了解有关OpenGL ES 2.0的最低容量的一些信息。

在这里:http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/DeterminingOpenGLESCapabilities/DeterminingOpenGLESCapabilities.html 有一些信息:

PowerVR MBX图形硬件支持最大尺寸为1024 x 1024的纹理,而PowerVR SGX软件支持最大尺寸为2048 x 2048的纹理;这两种尺寸远远超过OpenGL ES规范所需的最小尺寸64 x 64。如果您的应用程序需要超出OpenGL ES规范所需的最小能力,则应查询实现以检查硬件的实际能力,并优雅地失败;您可以加载较小的纹理或选择不同的渲染策略。

这是来自iPhone的信息...但是相同的硬件也可以在Android设备上找到。

在OpenGL ES 3.0中,GL_MAX_TEXTURE_SIZE的最小值为2048 http://www.khronos.org/opengles/sdk/docs/man3/xhtml/glGet.xml

那么该怎么办呢? OpenGL提供了一个不错且统一的软件层,可用于制作应用程序。但是,在平台和硬件之间仍然存在一些差异。通常在游戏引擎中,我们检查所需功能,然后进行一些“回退”,以确保即使在最低要求下也能正常工作。 对于你的问题,没有单一的答案。这取决于具体问题。

对于纹理尺寸,我认为你可以将大型纹理切割成一些较小的部分,然后使用几个矩形/四边形来显示它。


1
现在假设一个屏幕宽度为2560的设备,其GL_MAX_TEXTURE_SIZE为1024,那么应用程序开发人员该如何适配这样的设备呢?在我看来,9个图案和其他编程技巧似乎是唯一可行的方式。请对此发表评论。 - Rafay
感谢您的回复,fen。正如您所提到的,屏幕尺寸可能大于GL_MAX_TEXTURE_SIZE,但在Android设备上不可能实现。我在这个问题上找到了答案:https://dev59.com/gWzXa4cB1Zd3GeqPU40M - Rafay
1
是的,这也是可能的,那两个尺寸之间没有联系。我在上面的回答中添加了一些更多的信息。 - fen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接