OpenGL Android App适用于大多数手机,但Xoom上的纹理呈现白色

时间:2011-03-15 20:57:34

标签: android opengl-es textures

我的Android应用程序已推出几个月,可以在任何数量的WVGA手机上使用,例如Droid,Droid 2,Galaxy等。

然而,在摩托罗拉Xoom上,一小部分纹理加载了白色框,图像应该在这里。

在线研究最常见的原因似乎是没有使用两种纹理的力量。这似乎不太可能解释,因为它们可以在很多其他设备上正常工作。此外,我 am 使用两种纹理的力量。需要注意的是,我正在动态地将一堆位图加载到1024 x 1024纹理中。我正在使用的代码来自一个名为Rokon的现已解散的库,相关的纹理图集代码在这里:http://code.google.com/p/rokon/source/browse/trunk/src/com/stickycoding/rokon/TextureAtlas.java?r=260 - 就像我说的那样,我怀疑这可能是因为它适用于其他许多其他因素设备和我以这种方式加载的许多纹理都可以正常工作。

但我不确定还有什么可能导致它。考虑到Xoom上可用的内存量与应用程序处理的其他设备相比,内存问题似乎不太可能。

现在我没有缩放,但我可以通过DeviceAnywhere(我看到白色背景)复制问题。

LogCat中没有任何感兴趣的内容。

我知道这不是很多,但我在这里不知所措,我应该在这里看到什么样的潜在原因?提前感谢任何想法。

4 个答案:

答案 0 :(得分:1)

尝试使用glGetError()来查看OpenGL是否抛出任何错误

答案 1 :(得分:1)

您的应用程序是2D还是3D?当你在屏幕上画出精灵时;你在用哪种方法?

如果你的纹理在onDrawFrame期间是白色的,可能取决于:

  • 无纹理四元组(使用VBO:s或标准顶点阵列) - 可能不是,因为它适用于其他设备
  • Xoom不支持draw_texture扩展程序 - 如果您使用的是2D
  • Xoom缺乏对VBO的支持:s(顶点缓冲对象) - 可能没有,几乎所有的Android设备都支持VBO:s
  • 您是否实现了Xoom不支持的任何纹理压缩?

在运行时,使用此代码获取扩展并检查它们是否可用:

String extensions = gl.glGetString(GL10.GL_EXTENSIONS);
boolean supportsDrawTexture = extensions.contains("GL_OES_draw_texture");
// Continue here and sooner or later you should see where Xoom lacks support 
// where other devices doesn't.

答案 2 :(得分:0)

您是否有可能违反Android的自动调整大小位图行为?在加载要检查的位图大小时打印出位图大小,或将它们移动到res/drawable-nodpi以完全避免这种行为。

答案 3 :(得分:0)

您的纹理是否有可能超过2048像素的宽度或高度?这是XOOM上允许的最大纹理大小。