OpenGL ES API'ye dayalı bir oluşturma motoruyla Android Frame Pacing'i kullanmak için aşağıdaki işlevleri kullanın.
Başlatma ve yok etme
Android Frame Pacing'in bir örneğini sırasıyla başlatmak ve yok etmek için aşağıdaki işlevleri kullanın:
Genel olarak, motor çalıştırma sırası sırasında SwappyGL_init()
işlevini mümkün olduğunca erken, oyun çıkış yaparken ise SwappyGL_destroy()
işlevini çağırmalısınız. Bu yöntemleri başka bir zamanda çağırmanız gerekmez.
Değiştirme aralığını ve yenileme süresini yapılandırma
Android Frame Pacing örneğini yapılandırmak için aşağıdaki işlevleri kullanın:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
SwappyGL_setSwapIntervalNS()
işlevini çağırırken bir karenin gösterilmesi gereken süreyi iletin. Çoğu durumda şu sabitlerden birini kullanabilirsiniz:
SWAPPY_SWAP_60FPS
, SWAPPY_SWAP_30FPS
veya SWAPPY_SWAP_20FPS
.
Genel olarak, bu yöntemleri SwappyGL_init()
çağrısından hemen sonra doğrudan çağırmanız gerekir. Ancak bu yöntemleri oyununuzun yürütülmesi sırasında başka zamanlarda da çağırmanız gerekebilir.
ANativeWindow'u ayarlama
Swappy, ANativeWindow
ile ilgili işlemleri (ör. ANativeWindow_setFrameRate()
'ı arama) gerçekleştirmek için ANativeWindow
'ın kullanıcı adını kullanır.
Android ekran yüzeyiniz değiştiğinde ve yeni bir ANativeWindow
işleyiciniz olduğunda (örnek için Bouncyball örneğine bakın) Call
SwappyGL_setWindow()
işlevini çağırın.
Otomatik Modlar
Android Frame Pacing, önceki karelerin ortalama süresine göre takas süresini ve işlem hattı modunu ayarlar. Bu davranışı aşağıdaki işlevlerle kontrol edebilirsiniz:
void SwappyGL_setAutoSwapInterval(bool enabled);
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyGL_setAutoPipelineMode(bool enabled);
Kare başına değiştirme işlemi gerçekleştirme
Her oluşturma karesi sırasında bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
işlevini çağırın.
Bu yöntem, Open GL ES'deki eglSwapBuffers()
yöntemini sarmalar. Bu nedenle, oyununuzdaki tüm eglSwapBuffers()
örneklerini SwappyGL_swap()
ile değiştirmeniz gerekir.
Yardımcı işlevler
Aşağıdaki yöntem, Android Frame Pacing'in etkin olup olmadığını kontrol eder:
Android Frame Pacing örneği, aşağıdaki nedenlerden biriyle kendisini başlatamayabilir:
- Cihazda gerekli EGL işlevleri eksik.
- Sistem,
swappy.disable
özelliğini ayarladı.
Bu durumlardan birinde SwappyGL_isEnabled()
, false
değerini döndürür ve alternatif bir kare hızını ayarlama stratejisi uygulamanız önerilir.