استخدِم الدوال التالية لاستخدام Android Frame Pacing مع محرّك عرض يعتمد على واجهة برمجة التطبيقات OpenGL ES.
الإعداد والإزالة
استخدِم الدالتَين التاليتَين لتهيئة مثيل من Android Frame Pacing وإتلافه، على التوالي:
بشكل عام، يجب استدعاء SwappyGL_init()
في أقرب وقت ممكن أثناء تسلسل بدء تشغيل المحرّك، ويجب استدعاء SwappyGL_destroy()
عند الخروج من اللعبة. ولن تحتاج إلى استدعاء هذه الطرق في أي وقت آخر.
ضبط الفاصل الزمني للتبديل وفترة إعادة التحميل
استخدِم الدوال التالية لضبط مثيل من Android Frame Pacing:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
عند الاتصال بـ SwappyGL_setSwapIntervalNS()
، مرِّر المدة التي يجب أن يتم فيها عرض إطار. في معظم الحالات، يمكنك استخدام إحدى الثوابت التالية:
SWAPPY_SWAP_60FPS
أو SWAPPY_SWAP_30FPS
أو SWAPPY_SWAP_20FPS
.
بشكل عام، يجب استدعاء هذه الطرق مباشرةً بعد استدعاء SwappyGL_init()
. ومع ذلك، قد تحتاج أيضًا إلى استدعاء هذه الطرق في أوقات أخرى أثناء تنفيذ لعبتك.
ضبط ANativeWindow
يحتاج Swappy إلى معرّف ANativeWindow
لتنفيذ عملية خاصة بـ ANativeWindow
، مثل استدعاء ANativeWindow_setFrameRate()
.
يجب استدعاء
SwappyGL_setWindow()
عندما تتغيّر مساحة العرض على Android ويكون لديك معرّف ANativeWindow
جديد (راجِع مثال Bouncyball للاطّلاع على مثال).
الأوضاع التلقائية
يعدّل Android Frame Pacing مدة التبديل ووضع مسار العرض استنادًا إلى متوسط مدة اللقطات السابقة. يمكنك التحكّم في هذا السلوك باستخدام الدالتين التاليتين:
void SwappyGL_setAutoSwapInterval(bool enabled);
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyGL_setAutoPipelineMode(bool enabled);
تنفيذ عملية التبديل لكل إطار
أثناء كل إطار عرض، استدعِ الدالة
bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
.
تتضمّن هذه الطريقة طريقة eglSwapBuffers()
من Open GL ES، لذا عليك استبدال جميع مثيلات eglSwapBuffers()
في لعبتك بطريقة SwappyGL_swap()
.
الدوال المساعدة
تتحقّق الطريقة التالية مما إذا كانت ميزة "مزامنة اللقطات في Android" مفعَّلة:
من المحتمل ألا يتمكّن مثيل Android Frame Pacing من تهيئة نفسه لأي من الأسباب التالية:
- لا تتوفّر وظائف EGL اللازمة على الجهاز.
- ضبط النظام للسمة
swappy.disable
في أيّ من هاتين الحالتين، تعرض الدالة SwappyGL_isEnabled()
القيمة false
، ومن الأفضل لك تنفيذ استراتيجية بديلة لتحديد سرعة عرض اللقطات.