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.