Android上的glDrawElements极慢(HTC Wildfire)

时间:2011-08-07 18:53:35

标签: android opengl-es

我在Android手机上测试OpenGL性能(确切地说就是HTC Wildfire),我遇到了一件奇怪的事情 - 当我尝试绘制一个纹理索引矩形的大小(320 x 480)时,我可以获得高达40 fps的帧率! - 这只是在我使用32x32纹理的时候。

如果我将纹理大小增加到256x256,性能下降到35帧。

我的问题是 - 所有这些Android游戏如何能够顺利运行并且仍然充满了酷炫的图形。

2 个答案:

答案 0 :(得分:5)

有许多不同的方法可以让您的设备实现性能提升。

  1. 确保您没有进行混合,或者您不需要绘图,并且从经验来看,许多低端HTC设备(例如,愿望)都是限制填充率。
  2. 使用三角形条而不是三角形。
  3. 使用绘制元素并缓存您的调用,例如加载顶点缓冲区并为帧调用多次绘制。
  4. 但最重要的是使用DDMS 进行方法分析,以确定瓶颈实际上的位置,它们可能是您不期望它们的位置,例如记录,gc,循环中的慢速操作。您将能够看到渲染的时间和其他操作的时间。 (寻找GLImpl.glDrawElements)

    我最大的问题是GC过于频繁地踢(每秒5次,导致我的fps非常迟钝),你会看到你经常在你甚至想不到的地方看到的内存。例如,如果使用+运算符将字符串连接到float,或者使用传统的java get()函数或者(最差)集合,则会创建大量可以触发GC的对象。

    此外,如果你有昂贵的操作将它们分成一个单独的线程。

    此外,我假设您每次创建纹理并使用相同的索引。我已经看过一些教程,每次渲染帧时都会创建纹理。

    随着DDMS的广泛使用,我可以在HTC Desire上将12到50的fps用于繁忙的场景。

    希望能让你朝着正确的方向前进:)

答案 1 :(得分:0)

根据我自己的经验,他们不会像野火这样的设备。