【问题标题】:Android eglSwapBuffers - manual control? (Android)Android eglSwapBuffers - 手动控制? (安卓)
【发布时间】:2013-05-06 13:36:08
【问题描述】:

我的理解是 eglSwapBuffers 在使用 GLSurfaceview 时每帧都会自动调用,所以:

onDrawFrame()
{

//Your drawing code here

//system swaps buffers automatically

}

有什么方法可以禁用此行为并在每个 onDrawFrame() 结束时自己/手动调用 eglSwapBuffers 或在需要时抑制它(即,让它在我想要的时候运行但停止它在我需要时停止运行)。

如果可能,如果有人能解释在同时使用 RENDERMODE_CONTINUOUSLY 和 RENDERMODE_WHEN_DIRTY 时如何实现这一点(如果可能),我将不胜感激

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

【问题讨论】:

    标签: android rendering buffer opengl-es-2.0 game-loop


    【解决方案1】:

    GLSurfaceView 不是特别灵活。如果onDrawFrame 返回一个“do draw”布尔值就好了;那么你在如何安排你的游戏循环上会有更多的灵活性。不过GLSurfaceView 不是这样工作的,所以你的选择是有限的。

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

    (1) 使用RENDERMODE_WHEN_DIRTY,并且仅在您知道要在onDrawFrame 完成时交换缓冲区时才请求渲染。如果您的游戏逻辑不在渲染线程上运行并且您不尝试以 60fps 运行,这几乎就是您想要做的。

    (2) 下载GLSurfaceView 的源代码,将其合并到您的应用中,然后对其进行修改以做您想做的事情。

    【讨论】:

    • 感谢@fadden,我现在只使用 RENDERMODE_CONTINUOUSLY,虽然我喜欢修改 GLSurfaceView 的想法,但这可能是我将来会考虑的事情。干杯。
    • 有趣,关于 Android 游戏循环的“官方”文章,以前从未见过,我会读一读 - 很好的发现!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多