Android eglSwapBuffers - 手动控制?(Android)

3
我理解的是,当使用GLSurfaceview时,eglSwapBuffers每帧会自动调用,因此:
onDrawFrame()
{

//Your drawing code here

//system swaps buffers automatically

}

有没有办法禁用此行为,并在每个onDrawFrame()的结尾手动调用eglSwapBuffers,或在需要时抑制它(即,我想让它运行时让它运行,但在需要时停止它)。

如果可能的话,如果使用RENDERMODE_CONTINUOUSLY和RENDERMODE_WHEN_DIRTY两种模式,我会很感激有人能解释如何实现这一点。

当然,我的理解可能是错误的,如果确实如此,请纠正我:-)

1个回答

3

GLSurfaceView 不是特别灵活。如果 onDrawFrame 返回一个“do draw”布尔值会更好,这样你就能更加灵活地安排游戏循环了。不过 GLSurfaceView 并不是这样工作的,所以你的选择有限。

如果你想避免每一帧都渲染,有两种基本方法:

(1) 使用 RENDERMODE_WHEN_DIRTY,只有在你知道要在 onDrawFrame 完成时交换缓冲区时才请求渲染。如果你的游戏逻辑不在渲染线程上运行,并且你不试图以 60fps 运行,那么这基本上就是你想要做的。

(2) 下载 GLSurfaceView 的源代码,将其合并到您的应用中,并修改它以达到您需要的效果。


谢谢@fadden,目前我只使用RENDERMODE_CONTINUOUSLY,不过我很喜欢修改GLSurfaceView的想法,也许将来会研究一下。干杯! - Zippy
1
值得一看的还有:https://source.android.com/devices/graphics/architecture.html#loops - fadden
有趣的是,关于Android游戏循环的“官方”文章,我以前从未见过,我会好好阅读一下 - 不错的发现! - Zippy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接