【问题标题】:Android devices GL_MAX_TEXTURE_SIZE limitation, safe texture sizeAndroid 设备 GL_MAX_TEXTURE_SIZE 限制,安全纹理大小
【发布时间】:2013-10-18 02:50:23
【问题描述】:

我正在使用 AndEngine 和 OpenGL ES 2.0。我一直在阅读有关GL_MAX_TEXTURE_SIZE 以及如何将我的纹理保持在1024x1024 之下的信息。我之前和在 TMX 扩展中使用图块集时开始出错(如果你不知道 AndEngine,它是什么并不重要)我得到了一个图块集,它的纹理比1024px 更宽。我正在考虑将图块集分成两部分,使它们“安全”。但我找不到在过去几年发布的任何设备都在2048x2048 下设置了此限制。我可以使用任何列表或网站来按GL_MAX_TEXTURE_SIZE 过滤设备吗?


我阅读了以下问题:

And I used this site to search for devices. 但我无法通过GL_MAX_TEXTURE_SIZE 进行搜索/过滤,这使得搜索变得乏味。我问主要是因为我开始错了,这是一个爱好项目,与可能启用的设备数量相比,工作量可能太大(我希望0)。

【问题讨论】:

  • 您可以使用 Java 代码查询您的 Android 设备: int [] max = new int[1]; GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, max, 0);

标签: android opengl-es


【解决方案1】:

1024x1024 几乎是您可以在任何设备上使用的最安全的分辨率,尤其是在旧设备上。较新的设备应该没有任何问题,尽管我已经看到最近的设备(我记得 Galaxy Nexus,不过最新的 ICS 更新已修复)渲染白色四边形,纹理大小为 2048x1024。

如果您的目标是新设备并希望保持旧设备兼容,那么拆分您的图块集应该没有什么坏处。毕竟,如果您使用两个或三个精灵表作为背景等,您不太可能进行过多的上下文切换。

【讨论】:

  • 问题是我用TMX文件格式和这个tileset设计了很多关卡。将其分解为适合 1024 也会破坏所有级别。我可能可以编写一个脚本来重新编号地图中的瓦片,但地图图层以压缩格式保存在 XML 中。长话短说,如果我发现它破坏了许多手机的游戏,我会这样做。否则我会通过并记住它以用于更严肃的项目。
  • 您还可以做另一件事......在将纹理加载到 OpenGL 之前,您需要将其作为位图加载,您可以将纹理分成四份(制作四个位图),将所有四分之一加载到opengl 中的不同纹理,然后将纹理指针保存在 Sprite 的单个表示中。然后,您可以将 UV 坐标从四分之一映射到完整位图,并绑定您需要的特定纹理。它会加载较慢,但也许你可以接受。祝你好运!
  • 我认为我的问题并没有真正问到我需要什么。但是,您回答得最正确。谢谢。
【解决方案2】:

如果您仍有单独的图像文件,如果您使用 LibGdx 库中的 TexturePacker2 工具,将它们分成小尺寸的图集或自定义尺寸的图集很容易。

我不知道设备的确切限制,但考虑到您想要支持并从那里向上构建的设备的最低端总是更好。使用 LibGdx 工具,您可以在以后轻松改变主意,因此它是最灵活的解决方案。

看: LibGdx TexturePacker

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-05
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    相关资源
    最近更新 更多