フレーム ペーシング関数の追加

OpenGL ES API に基づくレンダリング エンジンで Android Frame Pacing を使用するには、下記の関数を使用します。

初期化と破棄

次の関数を使用して、Android Frame Pacing のインスタンスを初期化、破棄します。

一般に、エンジンの起動シーケンスのできるだけ早い段階で SwappyGL_init() を呼び出し、ゲームが終了したときに SwappyGL_destroy() を呼び出す必要があります。それ以外で、これらのメソッドを呼び出す必要はありません。

スワップ間隔と更新周期を設定する

次の関数を使用して、Android Frame Pacing のインスタンスを設定します。

SwappyGL_setSwapIntervalNS() を呼び出すときは、フレームを表示する継続時間を渡します。ほとんどの場合、SWAPPY_SWAP_60FPSSWAPPY_SWAP_30FPSSWAPPY_SWAP_20FPS のいずれかの定数を使用できます。

一般に、これらのメソッドは SwappyGL_init() を呼び出した後に直接呼び出す必要があります。ただし、ゲームの実行中に別のタイミングでメソッドを呼び出す必要が生じる場合もあります。

ANativeWindow の設定

Swappy には、ANativeWindow_setFrameRate() の呼び出しなどの ANativeWindow 固有のオペレーションを実行するために ANativeWindow のハンドルが必要です。Android ディスプレイ サーフェスが変更され、ANativeWindow ハンドルが新しくなったときに SwappyGL_setWindow() を呼び出します(例として Bouncyball サンプルをご覧ください)。

自動モード

Android Frame Pacing は、前のフレームの平均時間に基づいてスワップ時間とパイプライン モードを調整します。この動作は、次の関数を使用して制御できます。

フレームごとのスワップを実施する

レンダリング フレームごとに、bool SwappyGL_swap(EGLDisplay display, EGLSurface surface) を呼び出します。このメソッドは、Open GL ES の eglSwapBuffers() メソッドをラップするため、ゲーム内の eglSwapBuffers() のすべてのインスタンスを SwappyGL_swap() に置き換える必要があります。

ユーティリティ関数

次のメソッドは、Android Frame Pacing が有効かどうかを確認します。

次のいずれかの理由により、Android Frame Pacing のインスタンスが自身を初期化できない可能性があります。

  • 必要な EGL 関数がデバイスにない。
  • システムで swappy.disable プロパティが設定されている。

いずれの場合も、SwappyGL_isEnabled()false を返すため、別のフレーム ペーシング方法を実装することをおすすめします。