我是Android编程的新手,我正在尝试创建一个相对较大的2D游戏。我必须在游戏中使用大量图像和对象,所以我决定使用OpenGL ES。我有几个纹理地图集,由于透明度,它们全部保存为png。我也知道,但我不知道为什么,我必须使用图像,高度和宽度是两个的倍数。我在运行Android 2.3.3的旧HTC Hero上测试我的游戏。当我的图片地图集分别为512x512时,我的游戏帧速率在50到60 fps之间。当我使用1024x1024非透明png时,没有问题 - FPS再次介于50到60 fps之间。但当我决定使用1024x1024 transperent PNG时,我的帧速率降至4.5 fps。这可能是与我用于测试的设备的使用年限有关的问题吗?这些是我使用每个循环绘制批次的OpenGL函数:
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
//drawing happens here
gl.glDisable(GL10.GL_BLEND);
提前致谢:)
答案 0 :(得分:0)
我认为你所看到的是你的纹理变得很大以保持在靠近GPU的VRAM中,因此它必须从普通RAM中取出并通过总线与每帧发送。根据您发布的数字,最大可用数量为1 MB(RGB565为1024x1024x8bpp),因此您应该远低于此值。您可以切换到RGBA4444,而不会看到性能下降。如果您需要8bit颜色和透明度的最大尺寸,请选择512x1024x16bpp(RGBA8888)。
PS。如果你开始将VBO与1024x1024x8bpp一起使用时,我也不会感到惊讶,因为它们也存在于有限数量的RAM中。