eglSwapBuffers突然需要更长的时间才能完成

时间:2011-07-29 16:45:52

标签: performance opengl-es

今天我发现我的opengles程序帧时间有时会因为未知原因而增加,通常为16ms,但有时需要33ms才能完成一帧。经过几个小时的剖析和研究后我发现了原因:帧时间的增加是因为'eglSwapBuffers'需要比平常更长的时间。通常在“eglSwapBuffers”上花费的时间少于10毫秒,但有时需要大约26毫秒。

场景是静态的,所以帧时间应该是稳定的吗?

请问有什么理由请帮忙,我该怎么办才能让我的帧时间稳定?

3 个答案:

答案 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
    };