Android OpenGL偶尔会口吃

时间:2016-11-13 19:06:48

标签: android opengl-es

我使用NativeActivity编写了一个OpenGL ES 2应用程序,它渲染了大约6个纹理三角形,您可以使用触摸输入拖动它们。应用程序尽可能快地呈现,在呈现之前调用glClear(),在呈现之后调用eglSwapBuffers()。正如预期的那样,帧速率被限制在大约60 fps的显示频率,并且场景平滑地移动。但是,经过一段时间(10到60秒)后,即使帧速率仍为60 fps,运动也开始出现断断续续的情况。我使用的设备是OnePlus 3。

起初我怀疑罪魁祸首是省电模式,但调查发现cpus'之间没有相关性。频率和口吃。

我注意到了一些有趣的事情,当queueBuffer()执行时间结束时,口吃开始了。

这是口吃之前的systrace Before stutter 这是口吃之后的systrace After stutter 这是从之前到之后的过渡期间的系统: Transition

如何停止应用程序的口吃?

1 个答案:

答案 0 :(得分:0)

我仍然不知道口吃的确切原因,但我设法找到了解决办法:仅在 var customerData = [ { firstName: 'Jacob', visits: 3 }, { firstName: 'bocaj', visits: 2 } ]; for (var customer of customerData) { console.log(customer.firstName, customer.visits); }上渲染帧并在将来将public Collection<Object> getCollection() { return new ArrayList<>(getListMap()); } 设置为两个vsyncs 。这样可以避免填满缓冲队列,这似乎是口吃的原因之一。

作为奖励,它还略微改善了触摸输入延迟。

此处有更多信息:Minimize Android GLSurfaceView lag