每个x帧都有Android OpenGL延迟

时间:2011-10-20 05:21:15

标签: android opengl-es

我是Android游戏的开发者。

我创建了一个GLSurfaceView并在OnDrawFrame中绘制了一些内容(GL10 gl) 如下所示

    void OnDrawFrame(GL10 gl)
    {
         frame_limit_wait();
         game_logic();
         draw_game();
    }

一切都很好,但是开始很奇怪,当绘制n帧(在GC_EXPLICIT /暂停92ms时发生)会导致游戏暂停,在appplication中它没关系,但不是在流畅的游戏中。

原创游戏我使用SurfaceView和Thread更新工作顺利。

如果在'system.gc()'之类的draw_game()下添加一行似乎有效,但我觉得有点慢。 与另一个游戏引擎相比,我的游戏运行缓慢。

如何解决延迟问题?

编辑:我已经解决了这个问题。 只需初始化本机Float Buffer一次,并使用put和position(0)修改Buffer内容。

2 个答案:

答案 0 :(得分:3)

垃圾收集器正在运行并占用您的框架。我建议仔细查看在函数frame_limit_wait(),game_logic()和draw_game()中执行的代码,并尽一切可能阻止初始化新对象。

最常见的技术包括:

  • 使用字段而不是局部变量
  • 用于(int i; i< x; i ++)而不是for(variable:list)
  • 确保在绘制框架时不进行额外处理。

如果仍然无效,那么您可以尝试将某些处理卸载到单独的线程或考虑使用NDK并编写本机代码。使用C ++,您根本不必担心GC。但是,这两种方法都会使代码复杂化。

答案 1 :(得分:0)

尝试在单独的线程中运行game_logic(),draw_game()代码,这样当它在frame_limit_wait()中等待时,可以更好地为GC提供服务。

我的意思是代替使用主线程尝试在单独的线程中运行渲染/更新代码。