Android上的glDrawElements极慢(HTC Wildfire)

Pio*_*him 1 android opengl-es

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

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

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

小智 5

您可以通过多种不同方式从设备中获得性能.

  1. 确保你没有进行混合,或者你不需要的绘图,并且从经验来看,许多低端HTC设备(例如愿望)的填充率是有限的.
  2. 使用三角形条而不是三角形.
  3. 使用绘制元素并缓存您的调用,例如加载顶点缓冲区并为帧调用多次绘制.

但最重要的是使用带有方法分析的DDMS来确定瓶颈实际上的位置,它们可能是您不期望它们的位置,例如记录,gc,循环中的慢速操作.您将能够看到渲染的时间和其他操作的时间.(寻找GLImpl.glDrawElements)

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

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

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

随着DDMS的广泛使用,我能够在HTC Desire上从12到50获取fps以用于繁忙的场景.

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