我的理解是,使用glsurfaceview时,每帧都会自动调用eglswapbuffers,因此:

onDrawFrame()
{

//Your drawing code here

//system swaps buffers automatically

}

有没有什么方法可以让我禁用此行为,并在每个onDrawFrame()结束时自己/手动调用eglswapBuffers,或者在需要时抑制它(即,在需要时让它运行,但在需要时阻止它运行)。
如果可能的话,如果有人能解释一下连续使用rendermode和脏的rendermode是如何实现的(如果可能的话),我将不胜感激。
当然,我的理解可能是错误的,所以如果是的话请纠正我:-)

最佳答案

GLSurfaceView并不特别灵活。如果onDrawFrame返回一个“Do Dead”布尔值,那就好了,那么在安排游戏循环时,你会有一点灵活性。不过,GLSurfaceView不是这样的,所以你的选择是有限的。
如果要避免渲染每个帧,有两种基本方法:
(1)使用RENDERMODE_WHEN_DIRTY,并且仅当您知道在onDrawFrame完成时要交换缓冲区时才请求呈现。如果你的游戏逻辑不在渲染线程上运行,并且你不想以60fps的速度运行,那么这就是你想要做的。
(2)下载GLSurfaceView的源代码,将其合并到您的应用程序中,并对其进行修改以执行您想要的操作。

10-07 19:05