Android Frame Pacing'i OpenGL ES API'ye dayalı bir oluşturma motoruyla kullanmak için aşağıdaki işlevleri kullanın.
Başlat ve kaldır
Sırasıyla bir Android Frame Pacing örneğini başlatmak ve kaldırmak için aşağıdaki işlevleri kullanın:
Genel olarak, motor başlatma sırası sırasında SwappyGL_init()
yöntemini, oyundan çıkılırken de SwappyGL_destroy()
yöntemini çağırmalısınız. Bu yöntemleri başka bir zamanda çağırmanız gerekmez.
Değiştirme aralığını ve yenileme dönemini yapılandırma
Bir 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()
çağırırken bir karenin sunulması gereken süreyi geçirin. Çoğu durumda aşağıdaki sabit değerlerden 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 ç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_setFrameRate()
gibi ANativeWindow
'ye özgü bir işlem gerçekleştirebilmek için ANativeWindow
işleyicisine ihtiyaç duyar.
Android ekran yüzeyiniz değiştiğinde ve yeni bir ANativeWindow
tutamaca sahip olduğunuzda SwappyGL_setWindow()
numarasını arayın (örnek için Bouncyball örneğine bakın).
Otomatik Modlar
Android Frame Pacing değiştirme süresini ve ardışık düzen modunu, önceki karelerin ortalama süresine göre ayarlar. Bu davranışı aşağıdaki işlevleri kullanarak 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 gerçekleştir
Her oluşturma karesinde bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
çağrısı yapın.
Bu yöntem, eglSwapBuffers()
yöntemini Open GL ES'den 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 herhangi birinden dolayı kendini başlatamayabilir:
- Gerekli EGL işlevleri cihazda yok.
- Sistem,
swappy.disable
özelliğini ayarladı.
Her iki durumda da SwappyGL_isEnabled()
, false
değerini döndürür ve alternatif bir kare hızı stratejisi uygulamanız sizin için en iyisidir.