Android图形内存限制

Android图形内存限制,android,opengl-es,cocos2d-android,Android,Opengl Es,Cocos2d Android,我正在使用opengl和cocos2d端口创建一个android游戏(http://code.google.com/p/cocos2d-android-1). 我的目标是广泛的设备,并希望确保其性能良好。我只在NexusOne上测试,希望能从那些在速度较慢的设备上有经验的人那里得到一些信息 目前游戏使用两个1024x1024纹理以及两个256x256纹理。这是否在大多数设备的限制范围内?在这种情况下,有没有人有过图形内存限制方面的经验?如果超出gfx内存,它是否会分页到正常内存?Afaik纹理的

我正在使用opengl和cocos2d端口创建一个android游戏(http://code.google.com/p/cocos2d-android-1). 我的目标是广泛的设备,并希望确保其性能良好。我只在NexusOne上测试,希望能从那些在速度较慢的设备上有经验的人那里得到一些信息


目前游戏使用两个1024x1024纹理以及两个256x256纹理。这是否在大多数设备的限制范围内?在这种情况下,有没有人有过图形内存限制方面的经验?如果超出gfx内存,它是否会分页到正常内存?

Afaik纹理的内存限制与应用程序的内存限制相同,我认为在大多数情况下,内存限制为16兆,但可能所有可用的手机内存都可以访问

在我遇到问题之前,我已经在我的应用程序中加载了比这多得多的东西,至少有一个2048x2048纹理和几个512x512纹理,全部8888个都在内存中

我从来没有在纹理绑定上出现过oom错误,只是在加载位图时出现过,所以我希望这会有所帮助。

Java应用程序是16Mo(mdpi)或24Mo(hdpi)。但本机不是,OpenGLJavaAPI只是一个JNI包装器。因此,您可以在GPU上加载超过24Mo的纹理。我的经验是最初将Atlas限制在512*512(因为G1在大纹理上速度较慢),但今天我使用更大的Atlas纹理


我们当前的游戏使用20-50个内存,使用2048*2048纹理

以前的帖子我知道,但现在你在虚拟机上至少有128mb的空间,以便使用android java在内存中的位图上获得可用的加载空间


在应用程序空间外加载纹理(c)。因此,加载限制与手机内存相同。(在内存密集型游戏中,您会注意到返回主屏幕时图标会绘制)

在分辨率小于该分辨率的设备上使用1024x1024纹理的目的是什么?我正在开发Xbox 360/PS3游戏,我们很少使用这种大小的纹理。1024x1024的原因是存储一个“图集”,其中包含各种各样的精灵,它们是纹理的子矩形。它的效率要高得多,而且很难负担。你的纹理缓存对此不会满意(尽管我承认我不知道纹理缓存在最常见的Android GPU上是如何工作的)。在任何情况下,这就是你比赛的全部内容吗?2*1024x1024和2*256x256?这应该适用于大多数手机。每个精灵将来自不同的数据(不管它是否在相同的纹理中)。如果纹理缓存只缓存一个纹理而不是10个纹理,那么它怎么会不高兴呢?将它们全部放在单个纹理中的主要原因是,在加载单个纹理的单个glDrawQuads调用中,您可以绘制多个精灵。是的,这是我的游戏纹理数据的范围,很高兴知道它应该适合,谢谢!纹理缓存不会缓存单个纹理。它缓存页面。如果您有一个小纹理,它将能够在缓存中匹配整个纹理。如果它是大的,那么就没有那么多了。但是还有其他的事情要考虑——使得状态开关也很贵,所以你不想为每个绘制调用重新绑定你的纹理。这总是一种平衡的行为。看看你的游戏表现如何,如果事情很糟糕,你可以尝试不同的东西,比如纹理大小。只是重复一下埃博迈克的观点。我认为512^2的限制仍然适用,因为仍有一些旧款手机(如HTC Hero)在使用中,不能很好地处理较大的纹理。是否有旧款设备,您的50mo应用程序有时会崩溃?