استخدِم الوظائف التالية لاستخدام ميزة "معدل سرعة عرض الإطارات" في نظام التشغيل Android مع محرّك عرض يستند إلى واجهة برمجة التطبيقات OpenGL ES.
الإعداد والتدمير
استخدم الدوال التالية لتهيئة مثيل سرعة إطارات Android وإتلافه، على التوالي:
بشكل عام، يجب الاتصال بـ SwappyGL_init()
في أقرب وقت ممكن أثناء تسلسل بدء تشغيل المحرك، ويجب عليك استدعاء SwappyGL_destroy()
عند الخروج من اللعبة. لن تحتاج إلى طلب هذه الطرق في أي وقت آخر.
ضبط الفترة الزمنية للتبديل وفترة إعادة التحميل
استخدِم الدوالّ التالية لضبط مثيل لميزة "تحديد سرعة عرض الإطارات" في نظام Android:
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 مدة التبديل ووضع مسار الإحالة الناجحة استنادًا إلى متوسط مدة الإطارات السابقة. يمكنك التحكم في هذا السلوك باستخدام الدوال التالية:
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
، ومن الأفضل لك تنفيذ استراتيجية بديلة لوتيرة عرض الإطارات.