از عملکردهای زیر برای استفاده از 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_setFrameRate()
به دسته ANativeWindow
نیاز دارد. زمانی که سطح صفحه نمایش اندروید شما تغییر کرد و یک دسته ANativeWindow
جدید دارید، SwappyGL_setWindow()
را فراخوانی کنید (برای نمونه به نمونه Bouncyball مراجعه کنید).
حالت های خودکار
Android Frame Pacing مدت زمان تعویض و حالت خط لوله را بر اساس میانگین مدت فریم های قبلی تنظیم می کند. شما می توانید این رفتار را با توابع زیر کنترل کنید:
-
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
را برمیگرداند، و بهترین کار برای شما این است که یک استراتژی جایگزین برای تنظیم فریم اجرا کنید.
از عملکردهای زیر برای استفاده از 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_setFrameRate()
به دسته ANativeWindow
نیاز دارد. زمانی که سطح صفحه نمایش اندروید شما تغییر کرد و یک دسته ANativeWindow
جدید دارید، SwappyGL_setWindow()
را فراخوانی کنید (برای نمونه به نمونه Bouncyball مراجعه کنید).
حالت های خودکار
Android Frame Pacing مدت زمان تعویض و حالت خط لوله را بر اساس میانگین مدت فریم های قبلی تنظیم می کند. شما می توانید این رفتار را با توابع زیر کنترل کنید:
-
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
را برمیگرداند، و بهترین کار برای شما این است که یک استراتژی جایگزین برای تنظیم فریم اجرا کنید.