我在Android手机上测试OpenGL性能(确切地说就是HTC Wildfire),我遇到了一件奇怪的事情 - 当我尝试绘制一个纹理索引矩形的大小(320 x 480)时,我可以获得高达40 fps的帧率! - 这只是在我使用32x32纹理的时候。
如果我将纹理大小增加到256x256,性能下降到35帧。
我的问题是 - 所有这些Android游戏如何能够顺利运行并且仍然充满了酷炫的图形。
答案 0 :(得分:5)
有许多不同的方法可以让您的设备实现性能提升。
但最重要的是使用DDMS 进行方法分析,以确定瓶颈实际上的位置,它们可能是您不期望它们的位置,例如记录,gc,循环中的慢速操作。您将能够看到渲染的时间和其他操作的时间。 (寻找GLImpl.glDrawElements)
我最大的问题是GC过于频繁地踢(每秒5次,导致我的fps非常迟钝),你会看到你经常在你甚至想不到的地方看到的内存。例如,如果使用+运算符将字符串连接到float,或者使用传统的java get()函数或者(最差)集合,则会创建大量可以触发GC的对象。
此外,如果你有昂贵的操作将它们分成一个单独的线程。
此外,我假设您每次创建纹理并使用相同的索引。我已经看过一些教程,每次渲染帧时都会创建纹理。
随着DDMS的广泛使用,我可以在HTC Desire上将12到50的fps用于繁忙的场景。
希望能让你朝着正确的方向前进:)
答案 1 :(得分:0)
根据我自己的经验,他们不会像野火这样的设备。