我正在创建一个游戏循环,并且我需要能够调用 onDrawFrame (从渲染器内部手动),以便在发现进程落后时“跳过帧”。
目前我有一个调用的 GLSurfaceView 类
setRenderer(glSurfaceRenderer);
通过这个设置,我知道 onDrawFrame 会在每个刻度线被调用。
我尝试将上述调用放入一个方法中,以便我可以从游戏循环内部调用它,但在游戏循环的第二次运行时,我崩溃并显示消息
setRenderer has already been called for this instance
有没有办法每帧手动调用渲染器
只会调用
onDrawFrame
方法工作正常。或者在使用openGL时以这种方式控制渲染器不是一个好习惯
最佳答案
我不明白在游戏循环中调用 setRenderer()
或手动调用 onDrawFrame()
将如何解决任何问题。您应该重构渲染调用以考虑绘制所需的时间,换句话说就是基于时间的动画。在任何情况下,在任何绘图调用之前手动调用 onDrawFrame()
而不调用 eglMakeCurrent()
都将不起作用,因为您同时拥有渲染器和游戏循环线程绘图。
编辑:由于您使用的是 GLSurfaceView,因此如果您觉得 RENDERMODE_CONTINUOUSLY
对您来说太慢,可以从游戏循环中调用 requestRender()
来触发渲染。
关于android - Opengl-es手动调用onDrawFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7421976/