ใช้ฟังก์ชันต่อไปนี้เพื่อใช้ 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()
โทร
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 Frame Pacing หรือไม่
เป็นไปได้ว่าอินสแตนซ์ของ Android Frame Pacing เริ่มต้นตัวเองไม่ได้เนื่องจากสาเหตุใดสาเหตุหนึ่งต่อไปนี้
- อุปกรณ์ไม่มีฟังก์ชัน EGL ที่จำเป็น
- ระบบได้ตั้งค่าพร็อพเพอร์ตี้
swappy.disableแล้ว
ในสถานการณ์ใดก็ตาม SwappyGL_isEnabled() จะส่งคืน false และคุณควรใช้กลยุทธ์การเว้นระยะเฟรมอื่นแทน