前一段时间我遇到了一个问题,使用eglSwapBuffers
会导致手机冻结,并在设备日志中显示以下消息:
W/SharedBufferStack( 1110): waitForCondition(LockCondition) timed out (identity=28, status=0). CPU may be pegged. trying again.
我在网上看到了讨论这个问题的文章,但是唯一一个对我有影响的解决方案是在 eglSwapBuffers
之后调用 glFinish
。然而,这个解决方案会使帧率下降10-20,这远不可接受。
已经有人提出了问题,可以在这里找到。
有人评论说使用正方形纹理可以消除这个问题。最初我以为他指的是2的幂次方纹理,但在确认我没有使用任何非2的幂次方纹理并且问题仍未解决后,我开始认为他可能实际上是指具有相同宽度和高度的纹理?
我正在HTC Desire上进行测试,搭载Android 2.3.3系统。有人评论说未来版本应该已经解决了这个问题,但是2.3.3安装在如此多的设备上,我们不能忽视它。
无论如何,有人对此有什么想法吗?我们即将发布一个游戏,这个问题威胁着我们的计划。