Aggiungere funzioni di pacing dei frame

Utilizza le seguenti funzioni per utilizzare Android Frame Pacing con un motore di rendering basato sull'API OpenGL ES.

Inizializza e distrugge

Utilizza le seguenti funzioni per inizializzare e distruggere un'istanza di Android Frame Pacing, rispettivamente:

In generale, devi chiamare SwappyGL_init() il prima possibile durante la sequenza di avvio del motore e devi chiamare SwappyGL_destroy() quando il gioco sta per uscire. Non dovresti dover chiamare questi metodi in altri momenti.

Configurare l'intervallo di scambio e il periodo di aggiornamento

Utilizza le seguenti funzioni per configurare un'istanza di Android Frame Pacing:

Quando chiami SwappyGL_setSwapIntervalNS(), passa la durata per cui un frame deve essere presentato. Nella maggior parte dei casi, puoi utilizzare una delle seguenti costanti: SWAPPY_SWAP_60FPS, SWAPPY_SWAP_30FPS o SWAPPY_SWAP_20FPS.

In generale, devi chiamare questi metodi subito dopo una chiamata a SwappyGL_init(). Tuttavia, potrebbe essere necessario chiamare questi metodi anche in altri momenti durante l'esecuzione del gioco.

Impostazione di ANativeWindow

Swappy ha bisogno dell'handle di ANativeWindow per eseguire un'operazione specifica di ANativeWindow, ad esempio chiamare ANativeWindow_setFrameRate(). Chiama SwappyGL_setWindow() quando la superficie di visualizzazione di Android è cambiata e hai un nuovo handle ANativeWindow (vedi l'esempio di Bouncyball).

Modalità automatiche

Android Frame Pacing regola la durata dello scambio e la modalità pipeline in base alla durata media dei frame precedenti. Puoi controllare questo comportamento con le seguenti funzioni:

Eseguire lo scambio per frame

Durante ogni frame di rendering, chiama bool SwappyGL_swap(EGLDisplay display, EGLSurface surface). Questo metodo esegue il wrapping del metodo eglSwapBuffers() di Open GL ES, quindi devi sostituire tutte le istanze di eglSwapBuffers() nel gioco con SwappyGL_swap().

Funzioni di utilità

Il seguente metodo controlla se Android Frame Pacing è abilitato:

È possibile che un'istanza di Android Frame Pacing non riesca a inizializzarsi per uno dei seguenti motivi:

  • Sul dispositivo mancano le funzioni EGL necessarie.
  • Il sistema ha impostato la proprietà swappy.disable.

In entrambi i casi, SwappyGL_isEnabled() restituisce false ed è consigliabile implementare una strategia alternativa di frame pacing.