android - OpenGL 纹理(来自 .png 文件)在低端手机上无法正确显示

标签 android graphics resources png scaling

问题

我有一张各种背景的图集(在 HDPI 文件夹中)大小为 5760 x 459。最初,文件大小为 1.5MB。

我已经在几个设备上测试过这个,一个 Nexus 10 平板电脑(它从 XHDPI 文件夹中获取更大版本的文件),一个通用平板电脑(使用 MDPI),一个 Galaxy Ace 手机(再次使用 MDPI)等等工作正常。

不过,我最近拿到了一部运行 KitKat 的新手机。但是,这款手机似乎规范很低。 (1GB 存储空间,249MB RAM)。

现在,当我在此手机上运行我的应用程序时,它使用资源的 HDPI 版本(如上所述)。没有错误,应用程序运行,但此特定资源仅显示为纯黑色。

我尝试了什么?

我虽然可能是内存问题,所以我使用了各种工具等将文件大小减小到 182kb。但是,当我运行该应用程序时,我遇到了同样的问题。

所以,我将 LDPI 图像复制到 HDPI 文件夹(显然像素数较低)并运行......它显示正常(文件大小大于 182kb ).

这是怎么回事?手机的物理分辨率为 900 x 540。 map 集中的每张图片都是 960 x 459,因此,稍微缩放一下,这应该和其他设备一样适合。

另一件让我感到困惑的事情是,我的 XHDPI 文件夹包含一个图集,其中每个单独的背景大约是 Nexus 10 屏幕宽度和高度的 1/2,因此它被放大了。然而,使用谷歌的缩放法则(Android: Supporting Multiple Screens),在缩放之后,HDPI 图集中包含的每个单独的背景图像大约是我正在使用的手机屏幕的大小,因此不需要太多缩放(而我还是更喜欢使用屏幕尺寸 1/2 的图像)。

为什么这款手机不能使用当前大小的文件(物理大小,而不是文件大小),除了 LDPI、MDPI、HDPI 和 XHDPI 之外,还有什么方法可以更好地管理或提供更多替代资源?

最佳答案

您可能超出了设备支持的最大纹理尺寸。您的纹理 (5760) 的宽度非常大。移动设备在每个维度上的纹理大小限制为 4096 甚至 2048 是很常见的。

您可以通过以下方式查询纹理大小限制:

GLint maxSize = 0;
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxSize);

关于android - OpenGL 纹理(来自 .png 文件)在低端手机上无法正确显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24097682/

相关文章:

Java-如何从其他模块获取属性文件

android - Android 中具有交替资源的 ListView

android - 自定义资源文件夹名称(例如 res\drawable-gamepad)

java - Android上的UDP打洞; UDP 服务器

android - 文本字段不在 flutter 中编辑文本

android - 找不到方法 bundle()

android - 使用 Android Proguard 编译错误 : can't find references?

java - 使用 Java 将多边形拉伸(stretch)到其他多边形

graphics - 有人知道国家轮廓图合集吗?

JavaScript 栏动画