日別アーカイブ: 2013年12月21日

Android OpenGL ES と V-Sync (eglSwapInterval)

Android の描画も V-Sync に依存しており、一部デバイスを除いておよそ
60fps が上限となっています。
Android 4.1 Jelly Bean (API Level 17) 以降は SwapInterval で
0 を設定することができます。

desktop 版 OpenGL 同様、Interval=0 に設定すると非同期になります。
実際の画面に反映されているかどうかを考えなければ、
GPU の描画ループも 60fps を超えることが可能です。

// Java
import  android.opengl.EGL14;
import  android.opengl.EGLDisplay;

~

EGLDisplay  display14= EGL14.eglGetDisplay( EGL14.EGL_DEFAULT_DISPLAY );
EGL14.eglSwapInterval( display14, 0 );

EGLDisplay, EGLContext, EGLConfig, EGLSurface は android.opengl と
javax.microedition.khronos.egl の両方に存在します。
EGL14 を用いる場合は android.opengl の方を使用。

// NDK NativeActivity
eglSwapInterval( display, 0 );
// NDK + GLSurfaceView
EGLDisplay  display= eglGetDisplay( EGL_DEFAULT_DISPLAY );
eglSwapInterval( display, 0 );

ベンチマークで便利。

関連エントリ
iOS CADisplayLink とフレームレート
OpenGL の同期と描画速度の測定