Opengl-es手动调用onDrawFrame

时间:2011-09-14 19:35:35

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

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

目前我有一个调用

的GLSurfaceView类
setRenderer(glSurfaceRenderer);

通过这个设置,我了解每个tick都会调用onDrawFrame。

我尝试将上面的调用放在一个方法中,这样我就可以从我的游戏循环中调用它,但是在游戏循环的第二次运行中,我崩溃了消息说

setRenderer has already been called for this instance

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

只需要调用

onDrawFrame

方法正常工作。或者使用openGL

时以这种方式控制渲染器是不好的做法

1 个答案:

答案 0 :(得分:4)

我不知道如何在游戏循环中调用setRenderer()或手动调用onDrawFrame()将解决任何问题。你应该重构你的渲染调用,以考虑绘制时间,换句话说,基于时间的动画。在任何情况下,在任何绘图调用之前手动调用onDrawFrame()而不调用eglMakeCurrent()将无效,因为您同时具有渲染器和游戏循环线程绘图。

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