我一直试图解决这个问题好几个星期但我现在还不知道该怎么做。
我认为有些Android设备没有足够的内存来加载纹理量,虽然它可能是导致问题的其他因素,正如我所说,我真的不知道如何处理这个问题。
有28个PNG正在加载所有1024x1024,总共4.8megs。下面是用于加载纹理的OpenGL方法
GL10 gl = glGraphics.getGL();
int[] textureIds = new int[1];
gl.glGenTextures(1, textureIds, 0);
textureId = textureIds[0];
InputStream in = null;
try {
in = fileIO.readAsset(fileName);
Bitmap bitmap = BitmapFactory.decodeStream(in);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
setFilters(GL10.GL_LINEAR , GL10.GL_LINEAR);
gl.glBindTexture(GL10.GL_TEXTURE_2D, 0);
width = bitmap.getWidth();
height = bitmap.getHeight();
bitmap.recycle();
} catch(IOException e) {
throw new RuntimeException("Couldn't load texture '" + fileName +"'", e);
} finally {
if(in != null)
try { in.close(); } catch (IOException e) { }
}
我的Desire HD上没有任何问题,但在HTC Cha Cha上,很多纹理根本没有出现,而在Galaxy S上,两个纹理只显示为白色。 Cha Cha在加载纹理时抛出此错误
02-04 15:46:28.907:E / Adreno200-ES20(1501):override1 = 0xfffffffe, override2 = 0xfff *
奇怪的是,如果Cha Cha被锁定(OpenGL纹理被破坏)然后解锁(重新加载纹理),那么最初不存在的特定纹理现在是,但是现在不同的纹理是不可见的。
这是内存问题吗?如果是这样的话有办法吗?
由于
答案 0 :(得分:1)
正确的解决方案是纹理压缩,而不是PNG压缩。 PVR-TC会为您提供所需的大部分内容。在4-bpp,你可以降到12MB而不是117MB。即使只使用较低的深度图像,如RGB-565格式(每像素16位),也可以将您的需求减少一半。
此外,您不必为手机使用1024x1024纹理;这有点矫枉过正。你可能可以使用512x512图像。与PVR-TC结合使用,您只需要大约3MB的纹理数据。