今天我发现我的opengles程序帧时间有时会因为未知原因而增加,通常为16ms,但有时需要33ms才能完成一帧。经过几个小时的剖析和研究后我发现了原因:帧时间的增加是因为'eglSwapBuffers'需要比平常更长的时间。通常在“eglSwapBuffers”上花费的时间少于10毫秒,但有时需要大约26毫秒。
场景是静态的,所以帧时间应该是稳定的吗?
请问有什么理由请帮忙,我该怎么办才能让我的帧时间稳定?
答案 0 :(得分:1)
different thread中有一个答案帮助了我很多这个问题。
这种行为通常是由窗口和表面像素格式不匹配引起的,例如。 16位(RGB565)对比32位。
答案 1 :(得分:0)
我也遇到了这样的问题。
我发现如果将eglsurface的窗口调整为更大,eglSwapbuffer花费的时间变得非常长(大约是正常状态的2倍)。
答案 2 :(得分:0)
就我而言,它原来是MSAA。 使用4x MSAA,导致我的eglSwapBuffers()达到30毫秒。
我不得不从我的配置中取出两行,然后回到2毫秒的交换。
const EGLint attribs[] = {
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_DEPTH_SIZE, 16,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
// EGL_SAMPLE_BUFFERS, 1,
// EGL_SAMPLES, 4,
EGL_NONE
};