Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用大型透明图片作为纹理图谱_Android_Opengl Es - Fatal编程技术网

Android 使用大型透明图片作为纹理图谱

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

我是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函数:

    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时,它真的可以在不降低帧速率的情况下工作,这就足够了,因为我需要的纹理地图集要少两倍。