אפשר להשתמש בפונקציות הבאות כדי להשתמש ב-Android Frame Pacing עם מנוע רינדור שמבוסס על OpenGL ES API.
הפעלה והשמדה
אפשר להשתמש בפונקציות הבאות כדי לאתחל ולהרוס מופע של 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()
.
Call
SwappyGL_setWindow()
כשמשטח התצוגה ב-Android משתנה ויש לכם נקודת אחיזה חדשה של ANativeWindow
(דוגמה אפשר לראות בBouncyball sample).
מצבים אוטומטיים
ב-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
, ועדיף להטמיע שיטה חלופית להצגת פריימים.