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:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);void SwappyGL_setUseAffinity(bool tf);
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:
void SwappyGL_setAutoSwapInterval(bool enabled);void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);void SwappyGL_setAutoPipelineMode(bool enabled);
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.