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

时间:2013-02-04 15:58:01

标签: android opengl-es textures libgdx

我最近在几款Android设备上测试了我的一款游戏。在那期间,我遇到了与Galaxy S2的奇怪遭遇。当我启动游戏时,整个游戏除了背景外工作正常。游戏的背景显得黑色而不是预期的纹理。在通过互联网搜索时,我遇到this forum并意识到这是Galaxy S2上的一个糟糕的纹理问题,因为游戏的背景图像包含在一个单独的非常大的精灵表(4096)中,而其余的游戏的参与者包含在较小的游戏中。由此,我认为这与GL_MAX_TEXTURE_SIZE有关。

现在我的问题是:具有大显示屏的设备(例如Google Nexus 10(宽度为2560))的GL_MAX_TEXTURE_SIZE是否可能为2048?

此外,Android设备上最常见的GL_MAX_TEXTURE_SIZE是什么?如果您还希望应用程序为分辨率非常高的设备提供服务,如何应对此类问题?

1 个答案:

答案 0 :(得分:3)

是的,遗憾的是可能。

移动设备可能彼此不同。 OpenGL ES 2.0规范说GL_MAX_TEXTURE_SIZE的最小值只有64!所以检查游戏中的硬件限额是个好习惯。 供应商只需要支持最低规格,其余的是他们的选择。

有关opengl ES 2.0最低限额的一些信息,请参阅http://www.khronos.org/opengles/sdk/docs/man/xhtml/glGet.xml

此处:http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/DeterminingOpenGLESCapabilities/DeterminingOpenGLESCapabilities.html 有信息:

  

PowerVR MBX图形硬件支持最大1024 x 1024英寸的纹理   尺寸,而PowerVR SGX软件支持最高2048 x的纹理   2048;两种尺寸都大大超过64 x 64,这是最小尺寸   OpenGL ES规范中要求的。如果您的应用程序需要   超出了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提供了一个体面的统一软件层,可用于制作您的应用程序。但是平台和硬件之间仍然存在一些差异。通常在游戏引擎中我们检查给定的能力然后做一些“后退”以确保它甚至在最低要求下工作。 你的问题没有一个答案。这取决于问题。

纹理尺寸我认为你可以将大纹理切割成一些较小的块然后使用几个矩形/四边形显示它