我正在创建一个游戏循环,我需要能够调用onDrawFrame(从渲染器内部手动调用),以便“跳过帧”,如果我发现我在进程上落后了。
目前我有一个调用
的GLSurfaceView类setRenderer(glSurfaceRenderer);
通过这个设置,我了解每个tick都会调用onDrawFrame。
我尝试将上面的调用放在一个方法中,这样我就可以从我的游戏循环中调用它,但是在游戏循环的第二次运行中,我崩溃了消息说
setRenderer has already been called for this instance
有没有办法每帧手动调用渲染器
只需要调用
onDrawFrame
方法正常工作。或者使用openGL
时以这种方式控制渲染器是不好的做法答案 0 :(得分:4)
我不知道如何在游戏循环中调用setRenderer()
或手动调用onDrawFrame()
将解决任何问题。你应该重构你的渲染调用,以考虑绘制时间,换句话说,基于时间的动画。在任何情况下,在任何绘图调用之前手动调用onDrawFrame()
而不调用eglMakeCurrent()
将无效,因为您同时具有渲染器和游戏循环线程绘图。
编辑:由于您使用的是GLSurfaceView,如果您认为requestRender()
对您来说太慢,您可以从游戏循环中调用RENDERMODE_CONTINUOUSLY
来触发渲染。