Chris Ho
Chris Ho

Reputation: 295

Android OpenGL lag every x frame

I am developer of Android game.

I have create an GLSurfaceView and draw something in OnDrawFrame(GL10 gl) like below

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

Everything is good, but onething is strange, when drawing n-frame(Occur at GC_EXPLICIT/paused 92ms) will cause game a bit pause, in appplication it's ok, but not in a smooth game.

Original game I was use SurfaceView and Thread update works and smooth.

If add a line below draw_game() like 'system.gc()' it seems work but I feel a bit slow. Compare to another game engine, my game endinge is running slow.

How to resolve the latency problem ?

Edit : I have solved the issue. Just initial native Float Buffer once, and use put and position(0) to modify the Buffer content.

Upvotes: 0

Views: 1406

Answers (2)

spatulamania
spatulamania

Reputation: 6663

The garbage collector is running and holding up your frame. I would recommend taking a close look at the code that executes in the functions frame_limit_wait(), game_logic(), and draw_game() and do everything possible to prevent initializing new objects.

The most common techniques for this include:

  • use fields instead of local variables
  • use for(int i; i < x; i++) instead of for(variable : list)
  • making sure no extra processing is done while drawing frames.

If that still doesn't work then you can try offloading some processing to a separate thread or consider using the NDK and writing native code. With C++ you don't have to worry about the GC at all. However both of these methods will complicate your code quite a bit.

Upvotes: 3

Ayyappa
Ayyappa

Reputation: 1984

Try running your game_logic(),draw_game() code in a separate thread so that when its waiting in frame_limit_wait() , GC can be serviced in a better way.

I mean instead of using the main thread try running your rendering/update code in seperate thread.

Upvotes: 0

Related Questions