Sử dụng các hàm sau để áp dụng Android Frame Pacing (Tốc độ khung hình Android) với công cụ kết xuất hình ảnh dựa trên API OpenGL ES.
Khởi tạo và huỷ
Dùng các hàm sau để khởi tạo và huỷ một phiên bản (instance) Android Frame Pacing, theo thứ tự:
Nhìn chung, bạn nên gọi SwappyGL_init()
càng sớm càng tốt trong quá trình khởi động công cụ, còn khi trò chơi sắp thoát thì bạn nên gọi SwappyGL_destroy()
. Không phải lúc nào bạn cũng cần gọi các phương thức này.
Định cấu hình khoảng thời gian hoán đổi và làm mới
Sử dụng các hàm sau để định cấu hình instance Android Frame Pacing:
void SwappyGL_setSwapIntervalNS(uint64_t swap_ns);
void SwappyGL_setFenceTimeoutNS(uint64_t fence_timeout_ns);
void SwappyGL_setUseAffinity(bool tf);
Khi gọi SwappyGL_setSwapIntervalNS()
, hãy truyền vào thời lượng mà một khung hình
sẽ được hiển thị. Trong hầu hết trường hợp, bạn có thể sử dụng một trong các hằng số sau:
SWAPPY_SWAP_60FPS
, SWAPPY_SWAP_30FPS
hoặc SWAPPY_SWAP_20FPS
.
Nhìn chung, bạn nên gọi trực tiếp cho các phương thức này sau khi gọi đến
SwappyGL_init()
. Tuy nhiên, bạn cũng có thể cần phải gọi các phương thức này vào
các thời điểm khác trong quá trình thực thi trò chơi.
Cài đặt ANativeWindow
Swappy cần handle của ANativeWindow
để thực hiện
ANativeWindow
thao tác cụ thể, chẳng hạn như gọi
ANativeWindow_setFrameRate()
.
Gọi
SwappyGL_setWindow()
khi bề mặt màn hình Android của bạn đã thay đổi và bạn có một handle ANativeWindow
mới (xem mẫu Bouncyball để tìm hiểu ví dụ).
Các chế độ tự động
Android Frame Pacing điều chỉnh thời lượng hoán đổi và chế độ quy trình dựa trên thời lượng trung bình của các khung trước. Bạn có thể kiểm soát hành vi này bằng các hàm sau:
void SwappyGL_setAutoSwapInterval(bool enabled);
void SwappyGL_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyGL_setAutoPipelineMode(bool enabled);
Thực hiện hoán đổi từng khung hình
Trong mỗi khung hình kết xuất, hãy gọi
bool SwappyGL_swap(EGLDisplay display, EGLSurface surface)
.
Phương thức này bao bọc phương thức eglSwapBuffers()
từ Open GL ES, vì vậy bạn nên
thay thế tất cả các instance của eglSwapBuffers()
trong trò chơi của mình bằng SwappyGL_swap()
.
Các hàm tiện ích
Phương thức sau đây sẽ kiểm tra xem bạn đã bật Android Frame Pacing hay chưa:
Có thể xảy ra trường hợp một instance Android Frame Pacing không thể tự khởi chạy vì bất kỳ lý do nào sau đây:
- Các hàm EGL cần thiết bị thiếu trên thiết bị.
- Hệ thống đã đặt thuộc tính
swappy.disable
.
Trong cả hai trường hợp này, SwappyGL_isEnabled()
sẽ trả về false
và
tốt nhất là bạn nên triển khai một chiến lược kiểm soát tốc độ khung hình khác.