OpenGL ES API पर आधारित रेंडरिंग इंजन के साथ Android फ़्रेम पेसिंग का इस्तेमाल करने के लिए, यहां दिए गए फ़ंक्शन का इस्तेमाल करें.
शुरू करना और बंद करना
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 सेट करना
ANativeWindow
से जुड़ी कार्रवाई करने के लिए, Swappy को ANativeWindow
के हैंडल की ज़रूरत होती है. जैसे, ANativeWindow_setFrameRate()
को कॉल करना.
जब आपका Android डिसप्ले सर्फ़ेस बदल गया हो और आपके पास नया ANativeWindow
हैंडल हो, तब कॉल करें
SwappyGL_setWindow()
(उदाहरण के लिए, 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)
को कॉल करें.
यह तरीका, Open GL ES के eglSwapBuffers()
तरीके को रैप करता है. इसलिए, आपको अपने गेम में eglSwapBuffers()
के सभी इंस्टेंस को SwappyGL_swap()
से बदलना चाहिए.
उपयोगिता फ़ंक्शन
नीचे दिए गए तरीके से यह पता लगाया जा सकता है कि Android फ़्रेम पेसिंग की सुविधा चालू है या नहीं:
ऐसा हो सकता है कि Android फ़्रेम पेसिंग का कोई इंस्टेंस, इनमें से किसी वजह से खुद को शुरू न कर पाए:
- डिवाइस पर ज़रूरी EGL फ़ंक्शन मौजूद नहीं हैं.
- सिस्टम ने
swappy.disable
प्रॉपर्टी सेट कर दी है.
इन दोनों ही स्थितियों में, SwappyGL_isEnabled()
, false
दिखाता है. इसलिए, आपके लिए फ़्रेम-पेसिंग की कोई दूसरी रणनीति लागू करना सबसे अच्छा होगा.