安卓设备GL_MAX_TEXTURE_SIZE限制,纹理安全尺寸

7
我正在使用AndEngine和OpenGL ES 2.0。我一直在阅读关于GL_MAX_TEXTURE_SIZE的内容,以及如何将我的纹理保持在1024x1024以下。我以前做错了,在使用TMX扩展中的平铺集时(如果您不了解AndEngine,则并不重要),我会得到一个比1024px更宽的纹理。我考虑将平铺集分成两个,使它们“安全”。但是,我找不到在过去几年中发布的任何设备,其限制设置低于2048x2048。是否有任何列表或网站可以按GL_MAX_TEXTURE_SIZE筛选设备?

我阅读了以下问题:

我使用这个网站搜索设备。 但我无法通过/筛选 GL_MAX_TEXTURE_SIZE,这使得搜索变得繁琐。 我问这个问题主要是因为我开始错了,这是一个业余项目,工作量可能太大,与可能启用的设备数量相比(我预计为0)。


您可以使用以下Java代码查询Android设备: int [] max = new int[1]; GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, max, 0); - user1300214
2个回答

6

在任何设备上,特别是旧设备上,1024x1024是最安全的选择。新设备不应该有任何问题,尽管我曾经看到过最近的设备(我记得Galaxy Nexus)用2048x1024的纹理大小渲染白色四边形,不过最新的ICS更新已经解决了这个问题。

如果你的目标是新设备并且想要保持与旧设备的兼容性,拆分你的瓦片集不会有任何影响。毕竟,如果你为背景等使用了两个或三个精灵表,你不太可能进行太多上下文切换。


问题是我使用TMX文件格式和这个图块集设计了许多关卡。将其分解以适应1024会破坏所有关卡。我可能可以编写一个脚本来重新编号地图中的图块,但地图层保存在XML中的压缩格式中。长话短说,如果我发现这会破坏许多手机上的游戏,我会这样做。否则,我会放弃并记住它用于更严肃的项目。 - MartinTeeVarga
1
有另一种方法可以做... 在将纹理加载到OpenGL之前,需要将其作为位图加载。你可以将纹理分割成四个部分(创建四个位图),将每个部分加载到OpenGL中的不同纹理中,然后将纹理指针保存在一个Sprite表现形式的单个对象中。然后,你可以将UV坐标从一个部分映射到完整的位图,并绑定所需的特定纹理。这样加载速度会较慢,但也许对你来说是可接受的。祝好运! - RedOrav
2
我觉得我的问题并没有真正问到我需要的东西。不过你回答得非常正确。谢谢。 - MartinTeeVarga

1
如果您仍然拥有单独的图像文件,使用LibGdx库中的TexturePacker2工具将它们分成小型Atlas或自定义大小的Atlas非常容易。我不知道设备的确切限制,但最好考虑支持的最低设备,并从那里向上构建。使用LibGdx工具,您可以轻松更改想法,因此这是最灵活的解决方案。请查看:LibGdx TexturePacker

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