ใช้ฟังก์ชันต่อไปนี้เพื่อใช้ 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
และคุณควรใช้กลยุทธ์การเว้นระยะเฟรมอื่นแทน