Android 使用大型透明图片作为纹理图谱
我是android编程新手,我正在尝试创建一个相对较大的2D游戏。我必须在游戏中使用大量的图像和对象,所以我决定使用OpenGL ES。我有几个纹理地图集,由于透明度,它们都保存为png。我也知道,但我不知道为什么,我必须使用图像,高度和宽度是二的倍数。我在一个运行安卓2.3.3的HTC老英雄身上测试我的游戏。当我的图片图集为512x512时,我的游戏帧速率在50到60 fps之间。当我使用1024x1024非透明png时,没有问题-FPS再次介于50到60 FPS之间。但当我决定使用1024x1024透明PNG时,我的帧速率下降到4,5 fps。这是否与我用于测试的设备的使用年限有关?以下是我使用每个循环绘制批次的OpenGL函数:Android 使用大型透明图片作为纹理图谱,android,opengl-es,Android,Opengl Es,我是android编程新手,我正在尝试创建一个相对较大的2D游戏。我必须在游戏中使用大量的图像和对象,所以我决定使用OpenGL ES。我有几个纹理地图集,由于透明度,它们都保存为png。我也知道,但我不知道为什么,我必须使用图像,高度和宽度是二的倍数。我在一个运行安卓2.3.3的HTC老英雄身上测试我的游戏。当我的图片图集为512x512时,我的游戏帧速率在50到60 fps之间。当我使用1024x1024非透明png时,没有问题-FPS再次介于50到60 FPS之间。但当我决定使用1024x
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);
提前感谢:)我想你看到的是,你的纹理变得非常大,以保持在靠近GPU的VRAM中,因此它必须从普通RAM中提取,并在每一帧时通过总线发送。从您发布的数字来看,最大可用量为1MB(RGB565为1024x1024x8bpp),因此您应该远远低于这个数字。您可能可以切换到RGBA4444,而不会看到性能下降。如果您需要8位颜色和透明度的最大尺寸,请选择512x1024x16bpp(RGBA8888)
另外,如果您开始将VBOs与1024x1024x8bpp结合使用时也看到下降,我也不会感到惊讶,因为它们也存在于有限的RAM中。非常感谢,我测试了它,当我使用1024x512 PNG时,它真的可以在不降低帧速率的情况下工作,这就足够了,因为我需要的纹理地图集要少两倍。