3

我最近在几台 Android 设备上测试了我的一款游戏。在那期间,我遇到了与 Galaxy S2 的奇怪遭遇。当我启动游戏时,除了背景之外,整个游戏都运行良好。游戏的背景显示为黑色,而不是预期的纹理。在互联网上搜索时,我遇到了这个论坛,并意识到这是 Galaxy S2 上的一个糟糕的纹理问题,因为游戏的背景图像包含在一个单独且非常大的精灵表 (4096) 中,而其余的演员则为游戏包含在一个较小的游戏中。由此,我认为这与GL_MAX_TEXTURE_SIZE有关。

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

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

4

1 回答 1

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 提供了一个体面且统一的软件层,可用于制作您的应用程序。但是平台和硬件之间仍然存在一些差异。通常在游戏引擎中,我们检查给定的能力,然后做一些“回退”以确保它即使在最低要求下也能正常工作。你的问题没有单一的答案。这取决于问题。

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

于 2013-02-04T18:45:36.833 回答