रेंडरिंग इंजन के साथ Android फ़्रेम पेसिंग का इस्तेमाल करने के लिए, नीचे दिए गए फ़ंक्शन इस्तेमाल करें जो Vulkan API पर आधारित है.
इसे बनाने के लिए ज़रूरी एक्सटेंशन की पहचान करें
Android Frame का इंस्टेंस बनाने के लिए, ज़रूरी एक्सटेंशन का सेट इकट्ठा करना Vulkan का इस्तेमाल करते समय पेसिंग, इस कोड में दिखाए गए चरणों को पूरा करें snippet:
VkPhysicalDevice physicalDevice; uint32_t availableExtensionCount; VkExtensionProperties* pAvailableExtensions; uint32_t requiredExtensionCount; char** pRequiredExtensions; // Determine the number of extensions available for this device. vkEnumerateDeviceExtensionProperties(physicalDevice, layerName, &availableExtensionCount, pAvailableExtensions); // Determine the number of required extensions. SwappyVk_determineDeviceExtensions(physicalDevice, availableExtensionCount, pAvailableExtensions, &requiredExtensionCount, nullptr); // Determine the required extensions. pRequiredExtensions = (char**)malloc(requiredExtensionCount * sizeof(char*)); pRequiredExtensionsData = (char*)malloc(requiredExtensionCount * (VK_MAX_EXTENSION_NAME_SIZE + 1)); for (uint32_t i = 0; i < requiredExtensionCount; i++) { pRequiredExtensions[i] = &pRequiredExtensionsData[i * (VK_MAX_EXTENSION_NAME_SIZE + 1)]; } SwappyVk_determineDeviceExtensions(physicalDevice, availableExtensionCount, pAvailableExtensions, &requiredExtensionCount, pRequiredExtensions);
इसके बाद, vkCreateDevice()
पर कॉल करके Android फ़्रेम पेसिंग शुरू की जा सकती है. दूसरा
तर्क, VkDeviceCreateInfo*
प्रकार की संरचना,
enabledExtensionCount
सदस्य के लिए ज़रूरी एक्सटेंशन की संख्या सेट की गई है.
सूची परिवार की पहचान करें
सही डिसप्ले सूची दिखाने के लिए, Android फ़्रेम पेसिंग को यह जानना होगा कि किस सूची परिवार Vulkan इस्तेमाल कर रही है. सही फ़ैमिली का पता लगाने के लिए, इस कोड स्निपेट में ये तरीके बताए गए हैं:
// Reusing local variables from previous snippets: // VkPhysicalDevice physicalDevice; const VkDeviceCreateInfo createInfo; const VkAllocationCallbacks allocator; VkDevice device; uint32_t queueFamilyIndex; uint32_t queueIndex; VkQueue deviceQueue; // Values of "device" and "deviceQueue" set in the 1st and 2nd function // calls, respectively. vkCreateDevice(physicalDevice, &createInfo, &allocator, &device); vkGetDeviceQueue(device, queueFamilyIndex, queueIndex, &deviceQueue); SwappyVk_setQueueFamilyIndex(device, deviceQueue, queueFamilyIndex);
स्वैपचेन के लिए फ़्रेमरेट तय करना
किसी दिए गए फ़िज़िकल डिवाइस और स्वैपचेन के लिए, Android फ़्रेम पेसिंग शुरू करने के लिए, नीचे दिए गए कोड स्निपेट में दिखाए गए चरणों को पूरा करें:
// Reusing local variables from previous snippets: // VkPhysicalDevice physicalDevice; // VkDevice device; // Assume that the JNI environment is available in: // JNIEnv *env; // jobject jactivity; // Assume that swapchain is already known. VkSwapchainKHR swapchain; uint64_t refreshDuration; // in nanoseconds // Determine duration between vertical-blanking periods. // Example: 60 FPS sets "refreshDuration" to 16,666,666. SwappyVk_initAndGetRefreshCycleDuration(env, jactivity, physicalDevice, device, swapchain, &refreshDuration);
यह नैनोसेकंड में स्वैप करने की अवधि तय करता है. हेल्पर मैक्रो उपलब्ध हैं
स्वैप करने की सामान्य अवधि के लिए swappy_common.h
में तय किया गया है (उदाहरण के लिए,
SWAPPY_SWAP_60FPS
).
इसके बाद, आपको नैनोसेकंड में स्वैप अवधि देनी होगी.
// Declare the periods in nanoseconds that should elapse before refreshing one // image with the next image. There are helper macros defined in swappy_common.h // for common swap durations. // This example shows what to do when you want to render your game at 30 FPS. SwappyVk_setSwapIntervalNS(device, swapchain, SWAPPY_SWAP_30FPS);
ANativeWindow सेट करना
काम करने के लिए, स्वैपी को ANativeWindow
का हैंडल चाहिए
ANativeWindow
के लिए खास कार्रवाई, जैसे कि कॉल करना
ANativeWindow_setFrameRate()
.
कॉल करें
SwappyVk_setWindow()
जब आपके Android फ़ोन का डिसप्ले प्लैटफ़ॉर्म बदल गया हो और आपको नया ANativeWindow
मिले
हैंडल (उदाहरण के लिए, क्यूब सैंपल देखें).
ऑटो मोड
Android फ़्रेम पेसिंग, स्वैप अवधि और पाइपलाइन मोड को पिछले फ़्रेम की औसत अवधि. इस व्यवहार को यहां से कंट्रोल किया जा सकता है: ये फ़ंक्शन इस्तेमाल करें:
void SwappyVk_setAutoSwapInterval(bool enabled);
void SwappyVk_setMaxAutoSwapIntervalNS(uint64_t max_swap_ns);
void SwappyVk_setAutoPipelineMode(bool enabled);
फ़्रेम प्रज़ेंट करें
Android फ़्रेम पेसिंग में अपने गेम का फ़्रेम प्रज़ेंट करने के लिए, कॉल करें
SwappyVk_queuePresent()
.
यह फ़ंक्शन आपके गेम की ओर से vkQueuePresentKHR()
को कॉल करता है.
स्वैपचेन को नष्ट करें
किसी दी गई स्वैपचेन से जुड़े SwappyVk
डेटा को मिटाने के लिए,
इस कोड स्निपेट में ये तरीके बताए गए हैं:
// Reusing local variables from previous snippets: // VkDevice device; // VkSwapchainKHR swapchain; // const VkAllocationCallbacks allocator; SwappyVk_destroySwapchain(device, swapchain); vkDestroySwapchainKHR(device, swapchain, &allocator);