ফ্রেম পেসিং ফাংশন যোগ করুন

Vulkan API-এর উপর ভিত্তি করে একটি রেন্ডারিং ইঞ্জিন সহ Android Frame Pacing ব্যবহার করতে নিম্নলিখিত ফাংশনগুলি ব্যবহার করুন৷

সৃষ্টির জন্য প্রয়োজনীয় এক্সটেনশন সনাক্ত করুন

ভলকান ব্যবহার করার সময় অ্যান্ড্রয়েড ফ্রেম পেসিং-এর একটি উদাহরণ তৈরি করার জন্য প্রয়োজনীয় এক্সটেনশনগুলির সেট সংগ্রহ করতে, নিম্নলিখিত কোড স্নিপেটে দেখানো পদক্ষেপগুলি সম্পূর্ণ করুন:

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 Frame Pacing কে জানতে হবে কোন সারির পরিবার 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);

সোয়াপচেইনের জন্য ফ্রেমরেট নির্ধারণ করুন

একটি প্রদত্ত শারীরিক ডিভাইস এবং সোয়াপচেনের জন্য অ্যান্ড্রয়েড ফ্রেম পেসিং শুরু করতে, নিম্নলিখিত কোড স্নিপেটে দেখানো পদক্ষেপগুলি সম্পূর্ণ করুন:

// 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 নির্দিষ্ট অপারেশন সঞ্চালনের জন্য Swappy-এর ANativeWindow এর হ্যান্ডেল প্রয়োজন, যেমন ANativeWindow_setFrameRate() কল করা। আপনার অ্যান্ড্রয়েড ডিসপ্লে সারফেস পরিবর্তিত হয়ে গেলে এবং আপনার কাছে একটি নতুন ANativeWindow হ্যান্ডেল থাকলে SwappyVk_setWindow() কে কল করুন (উদাহরণস্বরূপ কিউব নমুনা দেখুন)।

অটো মোড

Android ফ্রেম পেসিং পূর্ববর্তী ফ্রেমের গড় সময়কালের উপর ভিত্তি করে অদলবদল সময়কাল এবং পাইপলাইন মোড সামঞ্জস্য করে। আপনি নিম্নলিখিত ফাংশন দিয়ে এই আচরণ নিয়ন্ত্রণ করতে পারেন:

একটি ফ্রেম উপস্থাপন করুন

Android Frame Pacing-এ আপনার গেমের একটি ফ্রেম উপস্থাপন করতে, 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);