我正在使用openGL ES创建一个动态壁纸,我遇到了让壁纸保持在30fps以上的麻烦。
我注意到的一件事是,如果我完全清空我的onDraw()
方法(除了一些时序代码),onDraw()
方法只在设置了渲染模式时每隔~11ms调用一次'连续'。
这看起来有点奇怪。特别是当我添加一些多边形和纹理时,代码在帧之间只需要几个额外的ms。
我的代码:
public void onDrawFrame(GL10 gl) {
long endTime = System.currentTimeMillis();
long dt = endTime - startTime;
Log.v("time",Long.toString(dt));
startTime = System.currentTimeMillis();
}
这是正常行为吗?也许幕后会发生一些事情。
我已尝试搞乱我的设置代码,但它似乎没有改变任何东西
traceView 似乎表明,使用EGLImpl.eglSwapBuffers
cpu / call,0.633
似乎占用了大约45%的执行时间。上面显示的代码大约占25%,下一个最高条目是Thread.sleep()
。
编辑 - 我认为交换缓冲区与显示刷新率同步,这可以解释我所看到的内容。