【问题标题】:Opengl-es calling onDrawFrame manuallyOpengl-es 手动调用 onDrawFrame
【发布时间】:2011-09-14 19:35:35
【问题描述】:

我正在创建一个游戏循环,如果我发现我落后于进程,我需要能够(从渲染器内部手动)调用 onDrawFrame 以便“跳过帧”。

目前我有一个 GLSurfaceView 类调用

setRenderer(glSurfaceRenderer);

通过此设置,我了解到 onDrawFrame 每次滴答都会被调用。

我尝试将上述调用放在一个方法中,以便我可以从我的游戏循环中调用它,但在游戏循环的第二次运行时,我崩溃并显示消息说

setRenderer has already been called for this instance

有没有办法每帧手动调用渲染器

只会调用

onDrawFrame

方法正常工作。或者在使用openGL时以这种方式控制渲染器不是一个好习惯

【问题讨论】:

    标签: android opengl-es renderer glsurfaceview game-loop


    【解决方案1】:

    我看不出在游戏循环中调用setRenderer() 或手动调用onDrawFrame() 将如何解决任何问题。您应该重构渲染调用以考虑绘制所需的时间,即基于时间的动画。在任何情况下,在任何绘图调用之前手动调用 onDrawFrame() 而不调用 eglMakeCurrent() 都将不起作用,因为您同时拥有渲染器和游戏循环线程绘图。

    编辑:由于您使用的是 GLSurfaceView,如果您觉得 RENDERMODE_CONTINUOUSLY 对您来说太慢,您可以从游戏循环中调用 requestRender() 来触发渲染。

    【讨论】:

    • 我已经制作了一个基于时间的游戏循环(对不起,我没有说明,应该有)我需要的是一种方法来确保渲染器在被告知时绘制.
    • 如果渲染器很慢,那么如果不投入更多硬件,您将无能为力。
    • 这根本不是我的意思:/ 我使用的教程是关于 [反对谷物](obivam.net/index.php/the-android-game-loop) 唯一的问题是本教程使用画布而不是 GL
    • 啊太棒了,我认为应该可以,我稍后会测试它。谢谢你:)
    猜你喜欢
    • 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
    相关资源
    最近更新 更多