নেটিভ এবং মালিকানাধীন ইঞ্জিন

অ্যান্ড্রয়েডে ভলকান দিয়ে শুরু করুন

ভলকান হলো অ্যান্ড্রয়েডের প্রধান লো-লেভেল গ্রাফিক্স এপিআই। যেসব গেম নিজস্ব গেম ইঞ্জিন এবং রেন্ডারার ব্যবহার করে, ভলকান তাদের জন্য সর্বোত্তম পারফরম্যান্স প্রদান করে।

আপনার গেম ইঞ্জিনে সফলভাবে ভলকান প্রয়োগ করতে হলে আপনাকে অবশ্যই:

  • ভুলকানের সাথে কোন অ্যান্ড্রয়েড ডিভাইসগুলো ব্যবহার করতে হবে তা শনাক্ত করুন
  • পুরোনো অ্যান্ড্রয়েড ডিভাইস সমর্থন করার সুবিধা-অসুবিধাগুলো বুঝুন।
  • আপনার অ্যান্ড্রয়েড বিল্ড টার্গেটে ভলকান যোগ করুন
  • Vulkan-এর জন্য SPIR-V তৈরি করতে একটি শেডার কম্পাইলার বেছে নিন।
  • রানটাইমে উপলব্ধ ভলকান এপিআই সংস্করণ নির্ধারণ করুন
  • ভলকান প্রোফাইল, ফ্রেম পেসিং এবং প্রি-রোটেশন ব্যবহার করে কীভাবে আপনার ভলকান রেন্ডারিং অপারেশন অপ্টিমাইজ করবেন তা শিখুন।
  • ডিবাগিং এবং পারফরম্যান্স বিশ্লেষণের জন্য গ্রাফিক্স টুল নির্বাচন করুন

ভুলকানের জন্য ন্যূনতম ডিভাইস স্পেসিফিকেশন নির্বাচন করুন

অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) থেকে ভলকান অ্যান্ড্রয়েডে উপলব্ধ। অ্যান্ড্রয়েড ৭.০ বা তার উচ্চতর সংস্করণে চালিত সব অ্যান্ড্রয়েড ডিভাইস ভলকান সমর্থন করে না। আপনার গেমটি কোন কোন ভলকান-সক্ষম অ্যান্ড্রয়েড ডিভাইস সমর্থন করে, তা আপনাকে নির্ধারণ করতে হবে।

সুপারিশসমূহ

ভুলকান সমর্থনের জন্য ন্যূনতম প্রয়োজনীয়তা হিসেবে নিম্নলিখিত স্পেসিফিকেশনগুলো ব্যবহার করুন:

  • ডিভাইসটি অ্যান্ড্রয়েড ১০.০ (এপিআই লেভেল ২৯) বা তার উচ্চতর সংস্করণে চলছে।
  • ডিভাইসটি ভলকান এপিআই সংস্করণ ১.১ বা তার উচ্চতর সংস্করণ সমর্থন করে।
  • ডিভাইসটির হার্ডওয়্যার সক্ষমতা ও ফিচারসমূহ ২০২২ সালের অ্যান্ড্রয়েড বেসলাইন প্রোফাইলের সাথে সামঞ্জস্যপূর্ণ।

পুরোনো ডিভাইস সমর্থন

যদি আপনার গেমটি বিভিন্ন স্তরের গ্রাফিক্স ক্ষমতা সম্পন্ন বিস্তৃত পরিসরের ডিভাইসে চলার জন্য ডিজাইন করা হয়ে থাকে, তাহলে Vulkan-এর জন্য ন্যূনতম ডিভাইসের স্পেসিফিকেশন বেছে নেওয়ার ক্ষেত্রে প্রস্তাবিত ডিভাইসগুলোর চেয়ে পুরোনো ডিভাইসগুলোকেও সাপোর্ট করার প্রয়োজন হতে পারে। পুরোনো ডিভাইসগুলোর জন্য সাপোর্ট তৈরি করার আগে, মূল্যায়ন করুন যে Vulkan আপনার গেমে কোনো সুবিধা প্রদান করে কিনা। যে গেমগুলোতে প্রচুর ড্র কল (draw calls) থাকে এবং যেগুলো OpenGL ES ব্যবহার করে, সেগুলোতে উল্লেখযোগ্য ড্রাইভার ওভারহেড দেখা যেতে পারে, কারণ OpenGL ES-এর মধ্যে ড্র কল করার খরচ অনেক বেশি। এই গেমগুলো তাদের ফ্রেম টাইমের একটি বড় অংশ গ্রাফিক্স ড্রাইভারে ব্যয় করার ফলে সিপিইউ-বাউন্ড (CPU bound) হয়ে যেতে পারে। OpenGL ES থেকে Vulkan-এ পরিবর্তন করলে গেমগুলোতে সিপিইউ এবং পাওয়ার ব্যবহারেও উল্লেখযোগ্য হ্রাস দেখা যেতে পারে। এটি বিশেষভাবে প্রযোজ্য যদি আপনার গেমে এমন জটিল সিন (scene) থাকে যা ড্র কল কমানোর জন্য ইনস্ট্যান্সিং (instanceing) কার্যকরভাবে ব্যবহার করতে পারে না। পুরোনো ডিভাইসগুলোকে টার্গেট করার সময়, একটি ফলব্যাক (fallback) হিসেবে OpenGL ES রেন্ডারিং সাপোর্ট অন্তর্ভুক্ত করুন, কারণ আপনার টার্গেট ডিভাইসের তালিকায় থাকা কিছু ডিভাইসে এমন Vulkan ইমপ্লিমেন্টেশন থাকতে পারে যা আপনার গেমটি নির্ভরযোগ্যভাবে চালাতে পারবে না।

আপনি হয়তো পুরোনো ভলকান-সক্ষম ডিভাইসগুলোকে সমর্থন করতে চাইবেন না, কারণ সেগুলোতে পারফরম্যান্স ও ফিচারের অভাব রয়েছে অথবা স্থিতিশীলতার সমস্যা আছে।

কর্মক্ষমতা এবং বৈশিষ্ট্য

পুরোনো ভলকান-সক্ষম অ্যান্ড্রয়েড ডিভাইসগুলোতে আপনার গেমটি চালানোর জন্য প্রয়োজনীয় ফিচারগুলোর রেন্ডারিং পারফরম্যান্স বা হার্ডওয়্যার সাপোর্ট নাও থাকতে পারে। এমনটা হওয়ার সম্ভাবনা বিশেষভাবে বেশি, যদি আপনার গেমে হাই-ফিডেলিটি গ্রাফিক্স থাকে এবং অ্যান্ড্রয়েডে আপনি শুধুমাত্র ভলকান এপিআই-কেই টার্গেট করে থাকেন। অনেক পুরোনো ডিভাইস ভলকান এপিআই-এর ১.০.৩ সংস্করণে সীমাবদ্ধ থাকে এবং এগুলোতে প্রায়শই আরও আধুনিক হার্ডওয়্যারে উপলব্ধ বহুল ব্যবহৃত ভলকান এক্সটেনশনগুলো অনুপস্থিত থাকে।

স্থিতিশীলতা

পুরোনো অ্যান্ড্রয়েড ডিভাইসগুলোতে সেকেলে ভলকান ড্রাইভার ব্যবহৃত হতে পারে। এই ড্রাইভার সংস্করণগুলোতে এমন বাগ থাকতে পারে যা আপনার গেমের স্থিতিশীলতাকে প্রভাবিত করতে পারে। ড্রাইভারের বাগগুলো সমাধান করতে প্রচুর পরীক্ষা-নিরীক্ষা এবং প্রকৌশলগত সময়ের প্রয়োজন হতে পারে।

আপনার প্রোজেক্টে Vulkan যোগ করুন

আপনার প্রোজেক্টে Vulkan যোগ করতে হলে আপনাকে যা করতে হবে:

  • ভলকান এপিআই হেডার অন্তর্ভুক্ত করুন
  • SPIR-V-তে শেডার কোড কম্পাইল করুন
  • রানটাইমে ভলকান এপিআই কল করুন

ভলকান এপিআই হেডার অন্তর্ভুক্ত করুন

Vulkan ব্যবহার করে এমন কোড কম্পাইল করার জন্য আপনার গেমে Vulkan API হেডার ফাইল অন্তর্ভুক্ত করা প্রয়োজন। আপনি Android NDK- তে অথবা Vulkan SDK রিলিজের সাথে প্যাকেজ করা Vulkan হেডারের একটি কপি খুঁজে পেতে পারেন। যেকোনো নির্দিষ্ট NDK সংস্করণে শুধুমাত্র সেই সময়ে উপলব্ধ Vulkan হেডারগুলোই অন্তর্ভুক্ত থাকে। আপনি যদি NDK থেকে Vulkan হেডার ব্যবহার করেন, তবে NDK সংস্করণ 25 বা তার উচ্চতর সংস্করণ ব্যবহার করুন, যেটিতে Vulkan সংস্করণ 1.3 সমর্থনকারী হেডার ফাইল অন্তর্ভুক্ত রয়েছে। Vulkan SDK-তে হেডারগুলোর সবচেয়ে সাম্প্রতিক সংস্করণ থাকে।

SPIR-V-তে শেডার কোড কম্পাইল করুন

Vulkan API-এর জন্য শেডার প্রোগ্রামগুলো SPIR-V বাইনারি ইন্টারমিডিয়েট ফরম্যাটে সরবরাহ করতে হয়। এই রীতিটি OpenGL ES থেকে ভিন্ন, যেখানে আপনি OpenGL শেডিং ল্যাঙ্গুয়েজ (GLSL)-এ লেখা সোর্স কোড টেক্সট স্ট্রিং হিসেবে জমা দিতে পারতেন। GLSL বা হাই-লেভেল শেডার ল্যাঙ্গুয়েজ (HLSL)-এর মতো কোনো শেডার ল্যাঙ্গুয়েজে লেখা কোডকে Vulkan-এর সাথে ব্যবহারের জন্য SPIR-V মডিউলে কম্পাইল করতে একটি শেডার কম্পাইলার ব্যবহার করুন।

shaderc কম্পাইলার ব্যবহার করে GLSL-এ লেখা শেডার প্রোগ্রামগুলোকে SPIR-V-তে কম্পাইল করা যায়। যদি আপনার গেমে HLSL ব্যবহৃত হয়, তাহলে DirectXShaderCompiler SPIR-V আউটপুট সমর্থন করে। সাধারণত, আপনি আপনার গেমের অ্যাসেট বিল্ড প্রক্রিয়ার অংশ হিসেবে শেডার প্রোগ্রামগুলো অফলাইনে কম্পাইল করেন এবং SPIR-V মডিউলগুলোকে আপনার রানটাইম অ্যাসেটের অংশ হিসেবে অন্তর্ভুক্ত করেন।

রানটাইমে ভলকান এপিআই কল করুন

Vulkan API কল করার জন্য, আপনার গেমের Vulkan API কলগুলোর ফাংশন পয়েন্টার সংগ্রহ করতে হবে। এটি করার সবচেয়ে সহজ উপায় হলো libvulkan.so শেয়ার্ড লাইব্রেরির সাথে লিঙ্ক করা, যা Android NDK-তে অন্তর্ভুক্ত থাকে। এই লাইব্রেরির সাথে লিঙ্ক করার দুটি অসুবিধা রয়েছে: অতিরিক্ত ফাংশন ডিসপ্যাচ ওভারহেড এবং কোন Vulkan API ফাংশন পয়েন্টারগুলো স্বয়ংক্রিয়ভাবে রিজলভ হবে তার উপর সীমাবদ্ধতা।

যখন আপনি একটি ভলকান এপিআই (Vulkan API) ফাংশন কল করেন, তখন নিয়ন্ত্রণ একটি ডিসপ্যাচ টেবিলের মধ্য দিয়ে যায়, যা ভলকান লোডার (Vulkan loader) নামক একটি কনস্ট্রাক্ট দ্বারা পরিচালিত হয়। অ্যান্ড্রয়েড তার নিজস্ব ভলকান লোডার ইমপ্লিমেন্টেশন ব্যবহার করে, লুনারজি (LunarG) লোডার নয়। এই লোডার সিস্টেমটি ভলকান এপিআই-এর লেয়ার আর্কিটেকচারের একটি অংশ। বিল্ড টাইমে সিস্টেম লাইব্রেরির সাথে লিঙ্ক করার ফলে একটি নির্দিষ্ট এপিআই কলের জন্য একটি অতিরিক্ত ডিসপ্যাচ লেভেল তৈরি হয়। যদিও এই ওভারহেড সামান্য, তবে যে গেমগুলো প্রচুর পরিমাণে ভলকান কল করে, সেগুলোর ক্ষেত্রে এটি লক্ষণীয় হতে পারে।

সিস্টেম লাইব্রেরি সাধারণত শুধুমাত্র সেইসব ভলকান ফাংশনের পয়েন্টার রিজলভ করে যেগুলো কোর এপিআই-এর অংশ হিসেবে বিবেচিত। ভলকানের প্রচুর এক্সটেনশন রয়েছে, যেগুলো অতিরিক্ত ভলকান ফাংশন সংজ্ঞায়িত করে, এবং এগুলোর মধ্যে অনেকগুলোই সিস্টেম লাইব্রেরি দ্বারা স্বয়ংক্রিয়ভাবে রিজলভ হয় না। এই ভলকান ফাংশনগুলো ব্যবহার করার আগে আপনাকে ম্যানুয়ালি এগুলোর পয়েন্টার রিজলভ করতে হবে।

এই সমস্যাগুলো প্রশমিত করতে, রানটাইমে ব্যবহার করতে ইচ্ছুক সমস্ত ভলকান ফাংশনের পয়েন্টারগুলো ডায়নামিকভাবে রিজলভ করুন। এটি করার একটি উপায় হলো volk-এর মতো একটি ওপেন সোর্স মেটা-লোডার লাইব্রেরি ব্যবহার করা। AGDKTunnel স্যাম্পল গেমটি এই উদ্দেশ্যে volk-কে ইন্টিগ্রেট করেছে। আপনি যদি কোনো মেটা-লোডার লাইব্রেরি ব্যবহার করেন, তাহলে আপনার বিল্ড স্ক্রিপ্টে libvulkan.so শেয়ার্ড লাইব্রেরির সাথে লিঙ্ক করবেন না।

উপলব্ধ ভলকান এপিআই সংস্করণ নির্ধারণ করুন

অ্যান্ড্রয়েড নিম্নলিখিত ভলকান এপিআই সংস্করণগুলি সমর্থন করে:

  • ১.০.৩
  • ১.১
  • ১.৩

কোনো নির্দিষ্ট ডিভাইসে উপলব্ধ সর্বোচ্চ ভলকান এপিআই সংস্করণ নম্বরটি অ্যান্ড্রয়েড সংস্করণ এবং ভলকান ড্রাইভার সমর্থনের উপর নির্ভর করে নির্ধারিত হয়।

অ্যান্ড্রয়েড সংস্করণ

একটি ভলকান এপিআই সংস্করণের জন্য প্ল্যাটফর্ম সমর্থন ন্যূনতম অ্যান্ড্রয়েড সংস্করণ (এপিআই লেভেল)-এর উপর নির্ভরশীল:

  • ১.৩ — অ্যান্ড্রয়েড ১৩.০ (এপিআই লেভেল ৩৩) এবং উচ্চতর
  • ১.১ — অ্যান্ড্রয়েড ১০.০ (এপিআই লেভেল ২৯) এবং উচ্চতর
  • ১.০.৩ — অ্যান্ড্রয়েড ৭.০ (এপিআই লেভেল ২৪) এবং উচ্চতর সংস্করণ

ভুলকান ড্রাইভার সমর্থন

অ্যান্ড্রয়েড প্ল্যাটফর্মে কোনো ভলকান এপিআই সংস্করণ সমর্থিত হলেও, তার মানে এই নয় যে ডিভাইসটির ভলকান ড্রাইভারও সেই সংস্করণটি সমর্থন করবে। অ্যান্ড্রয়েড ১৩ চালিত একটি ডিভাইস হয়তো ভলকান এপিআই-এর শুধুমাত্র ১.১ সংস্করণটিই সমর্থন করে।

Vulkan চালু করার সময়, এর চেয়ে বড় কোনো API ভার্সনের জন্য অনুরোধ করবেন না:

  • ডিভাইসে চলমান অ্যান্ড্রয়েড সংস্করণের জন্য সর্বোচ্চ ভলকান এপিআই সংস্করণ
  • vkEnumerateInstanceVersion দ্বারা রিপোর্ট করা ভলকান এপিআই সংস্করণ
  • VkPhysicalDeviceProperties স্ট্রাকচারের apiVersion প্রপার্টি দ্বারা রিপোর্ট করা ভলকান এপিআই সংস্করণ।

সর্বোচ্চ সমর্থিত ভলকান এপিআই সংস্করণ নির্ধারণের একটি উদাহরণ নিচে দেওয়া হলো:

// Minimum Android API levels for Vulkan 1.3/1.1 version support
static constexpr int kMinimum_vk13_api_level = 33;
static constexpr int kMinimum_vk11_api_level = 29;

uint32_t GetHighestSupportedVulkanVersion(VkPhysicalDevice physical_device) {
  uint32_t instance_api_version = 0;
  vkEnumerateInstanceVersion(&instance_api_version);

  VkPhysicalDeviceProperties device_properties;
  vkGetPhysicalDeviceProperties(physical_device, &device_properties);

  // Instance and device versions don't have to match, use the lowest version
  // number for API support if they don't.
  const uint32_t driver_api_version =
      (instance_api_version < device_properties.apiVersion) ?
      instance_api_version : device_properties.apiVersion;

  const int device_api_level = android_get_device_api_level();
  if (device_api_level >= kMinimum_vk13_api_level &&
      driver_api_version >= VK_API_VERSION_1_3) {
    return VK_API_VERSION_1_3;
  } else if (device_api_level >= kMinimum_vk11_api_level &&
             driver_api_version >= VK_API_VERSION_1_1) {
    return VK_API_VERSION_1_1;
  }
  return VK_API_VERSION_1_0;
}

ভলকান প্রোফাইলের সামঞ্জস্যতা নির্ধারণ করুন

ভলকান প্রোফাইল হলো JSON ফাইল, যা কিছু প্রয়োজনীয় ফিচার, এক্সটেনশন, ক্যাপাবিলিটি এবং ন্যূনতম প্যারামিটার সীমা নির্ধারণ করে। এই ফিচার, এক্সটেনশন, ক্যাপাবিলিটি এবং প্যারামিটারগুলো একটি ভলকান ডিভাইসের জন্য সেই প্রোফাইলের সাথে সামঞ্জস্যপূর্ণ হতে আবশ্যক। কোনো ডিভাইস একটি নির্দিষ্ট ভলকান প্রোফাইলের (যেমন ২০২২ অ্যান্ড্রয়েড বেসলাইন প্রোফাইল) সাথে সামঞ্জস্যপূর্ণ কিনা তা জানতে, ওপেন সোর্স ভলকান প্রোফাইলস এপিআই লাইব্রেরি ব্যবহার করুন। এছাড়া, আপনি প্রোফাইল JSON ফাইলটি নিজেও পার্স করতে পারেন এবং প্রোফাইলের সামঞ্জস্যতা নির্ধারণের জন্য প্রাসঙ্গিক ভলকান এপিআই ব্যবহার করে ডিভাইসের ক্যাপাবিলিটি সম্পর্কে জানতে পারেন।

ভলকান প্রোফাইল

অ্যান্ড্রয়েড ভলকান প্রোফাইল ব্যবহার করে, যা নির্ধারণ করে দেয় যে অ্যান্ড্রয়েড চালিত প্রতিটি ডিভাইসের জন্য কোন কোন ফিচার এবং এক্সটেনশন উপলব্ধ থাকবে।

অ্যান্ড্রয়েড বেসলাইন প্রোফাইল (ABP) হলো ভলকান প্রোফাইল তৈরির প্রথম প্রচেষ্টা। ABP2021 এবং ABP2022 হলো পূর্ববর্তী সংস্করণগুলোকে অন্তর্ভুক্ত করার জন্য তৈরি প্রোফাইল, যা সেই সময়ের ৮৫%-এর বেশি সক্রিয় ডিভাইসকে কভার করার লক্ষ্য রাখে। ভবিষ্যতে আর কোনো নতুন ABP আসবে না।

অ্যান্ড্রয়েডের জন্য ভলকান প্রোফাইল (VPA) হলো একটি নতুন ও ভবিষ্যৎমুখী প্রোফাইল, যার লক্ষ্য হলো সফটওয়্যার ডেভেলপারদের চাহিদা পূরণ করা এবং হার্ডওয়্যার ডেভেলপাররা ফিচারগুলো সরবরাহ করার সাথে সাথেই সেগুলোকে সামঞ্জস্যপূর্ণ করে তোলা। VPA15_minimums হলো অ্যান্ড্রয়েড ১৫-এর জন্য প্রথম প্রোফাইল এবং অ্যান্ড্রয়েডের প্রতিটি প্রধান রিলিজকে অন্তর্ভুক্ত করার জন্য প্রতি বছর একটি করে নতুন VPA আসবে।

ফ্রেম পেসিং বাস্তবায়ন করুন

একটি উচ্চ-মানের গেমপ্লে অভিজ্ঞতা প্রদানের জন্য সঠিক ফ্রেম পেসিং একটি অপরিহার্য অংশ। আপনার গেমকে সর্বোত্তম ফ্রেম পেসিং অর্জনে সহায়তা করার জন্য অ্যান্ড্রয়েড গেম ডেভেলপমেন্ট কিট-এ ফ্রেম পেসিং লাইব্রেরি অন্তর্ভুক্ত রয়েছে। বাস্তবায়নের আরও বিস্তারিত তথ্যের জন্য, আপনার ভলকান রেন্ডারারে অ্যান্ড্রয়েড ফ্রেম পেসিং ইন্টিগ্রেট করুন দেখুন।

অন্তর্নিহিত সিঙ্ক্রোনাইজেশন এবং ফ্রেম পেসিং-এর উপর নির্ভর করবেন না।

সোয়াপচেইন পরিচালনার জন্য vkAcquireNextImageKHR এবং vkQueuePresentKHR ব্যবহার করা হয়। সাধারণ অ্যাপ্লিকেশন বা জিপিইউ সিঙ্ক্রোনাইজেশনের জন্য এদের সম্ভাব্য ব্লকিং আচরণের উপর নির্ভর করা থেকে বিরত থাকুন।

এই ফাংশনগুলির সুনির্দিষ্ট ব্লকিং আচরণ বিভিন্ন ক্ষেত্রে যথেষ্ট ভিন্ন হতে পারে:

  • অ্যান্ড্রয়েড ডিভাইস
  • জিপিইউ ড্রাইভার
  • উপস্থাপনা ইঞ্জিনের অবস্থা ( VkPresentModeKHR )

vkAcquireNextImageKHR- এর একমাত্র উদ্দেশ্য হলো একটি উপলব্ধ প্রদর্শনযোগ্য ছবি সংগ্রহ করা এবং এটি ব্লক করতেও পারে বা নাও করতে পারে। একইভাবে, vkQueuePresentKHR একটি ছবি প্রদর্শনের জন্য অনুরোধকে কিউতে রাখে এবং এটিও ব্লক করতেও পারে বা নাও করতে পারে।

এই দুটি ফাংশনের কোনোটিই সম্পর্কহীন সিপিইউ টাস্ক বা জিপিইউ অপারেশন সিঙ্ক্রোনাইজ করার ক্ষেত্রে নির্ভরযোগ্য নিশ্চয়তা প্রদান করে না।

শক্তিশালী সিনক্রোনাইজেশনের জন্য, সর্বদা সুস্পষ্ট ভলকান প্রিমিটিভ ব্যবহার করুন; যেমন—GPU-GPU নির্ভরতার জন্য সেমাফোর (উদাহরণস্বরূপ, রেন্ডার-টু-প্রেজেন্ট), GPU-CPU সিনক্রোনাইজেশনের জন্য ফেন্স (উদাহরণস্বরূপ, CPU-তে রেন্ডারিং কখন শেষ হয়েছে তা জানা), এবং আরও সূক্ষ্ম GPU এক্সিকিউশন ও মেমরি নির্ভরতার জন্য পাইপলাইন ব্যারিয়ার বা ইভেন্ট। সুস্পষ্ট সিনক্রোনাইজেশন ব্যবহার করলে অনুমানযোগ্য আচরণ নিশ্চিত হয় এবং অ্যান্ড্রয়েডের বৈচিত্র্যময় হার্ডওয়্যার ইকোসিস্টেমের অন্তর্নিহিত ইমপ্লিমেন্টেশন-নির্দিষ্ট টাইমিং তারতম্যের কারণে সৃষ্ট সূক্ষ্ম বাগ এড়ানো যায়।

প্রাক-ঘূর্ণন বাস্তবায়ন করুন

অ্যান্ড্রয়েড ডিভাইস একাধিক ওরিয়েন্টেশনে প্রদর্শিত হতে পারে। ডিভাইসের ওরিয়েন্টেশন রেন্ডার সারফেসের ওরিয়েন্টেশন থেকে ভিন্ন হতে পারে। অ্যান্ড্রয়েডের OpenGL ES-এর মতো নয়, Vulkan এই দুটির মধ্যেকার অমিল পরিচালনা করে না। ওরিয়েন্টেশন প্রক্রিয়াটি কীভাবে কাজ করে এবং Vulkan ব্যবহার করার সময় ওরিয়েন্টেশনের পার্থক্যগুলো সামলানোর সর্বোত্তম পদ্ধতি কী, তা জানতে “Handle device rotation with Vulkan pre-rotation” দেখুন।

ভুলকান রেন্ডারিং-এর সমস্যা সমাধান এবং প্রোফাইল তৈরি

ভুলকান রেন্ডারিং কোডের রেন্ডারিং সমস্যা এবং পারফরম্যান্স সংক্রান্ত ত্রুটি নির্ণয়ে সাহায্য করার জন্য একাধিক টুল উপলব্ধ রয়েছে।

Vulkan-এর ডিবাগিং এবং প্রোফাইলিং টুলগুলো সম্পর্কে আরও তথ্যের জন্য, Tools & advanced features বিভাগটি দেখুন।

ভুলকান বৈধতা স্তর

ভুলকান ভ্যালিডেশন লেয়ার হলো রানটাইম লাইব্রেরি, যা আপনার ভুলকান এপিআই (Vulkan API) কলগুলো পরীক্ষা করতে এবং ভুল বা ত্রুটিপূর্ণ ব্যবহার সম্পর্কে সতর্কবার্তা বা ত্রুটি জানাতে সক্রিয় করা যায়। এই ভ্যালিডেশন লেয়ারগুলো ডিফল্টরূপে সক্রিয় থাকে না, কারণ যাচাইকরণ প্রক্রিয়াটি রানটাইম ওভারহেড তৈরি করে এবং আপনার গেমের পারফরম্যান্সে প্রভাব ফেলে। আপনার গেমে কীভাবে ভ্যালিডেশন লেয়ার ব্যবহার করবেন সে সম্পর্কে তথ্যের জন্য, "ভ্যালিডেশন লেয়ারের সাথে ডিবাগিং" (Debugging with validation layer) দেখুন।

ফ্রেম ক্যাপচার টুল

একটি গেম ফ্রেম চলাকালীন করা ভলকান এপিআই কলগুলো রেকর্ড ও রিপ্লে করতে ফ্রেম ক্যাপচার টুল ব্যবহার করুন। এই টুলগুলো আপনাকে যা করতে দেয়:

  • সক্রিয় গ্রাফিক রিসোর্সসমূহের তথ্য ও ভিজ্যুয়ালাইজেশন দেখুন
  • আপনার গেম দ্বারা করা API কলগুলির ক্রম এবং API প্যারামিটারগুলি দেখুন।
  • ড্র কল করার সময় গ্রাফিক্স পাইপলাইনের অবস্থা অন্বেষণ করুন
  • ফ্রেমে একটি নির্দিষ্ট ড্র কল পর্যন্ত রেন্ডারিংয়ের ফলাফল কল্পনা করুন।

অ্যান্ড্রয়েডে চলা গেম থেকে ফ্রেম ক্যাপচার করতে ওপেন সোর্স RenderDoc টুলটি ব্যবহার করুন। RenderDoc, Vulkan এবং OpenGL ES উভয়েরই ফ্রেম ক্যাপচার সমর্থন করে।

অ্যান্ড্রয়েড জিপিইউ ইন্সপেক্টর (এজিআই) ব্যবহার করে ভলকান ফ্রেমও ক্যাপচার করা যায়।

কর্মক্ষমতা বিশ্লেষণ সরঞ্জাম

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

আপনি পারফরম্যান্স ডেটা সংগ্রহ ও বিশ্লেষণ করতে অ্যান্ড্রয়েড জিপিইউ ইন্সপেক্টরও ব্যবহার করতে পারেন। ভেন্ডর টুলগুলোর মতো নয়, অ্যান্ড্রয়েড জিপিইউ ইন্সপেক্টর বিভিন্ন ভেন্ডরের একাধিক জিপিইউ-এর সাথে সামঞ্জস্যপূর্ণ। তবে, অ্যান্ড্রয়েড জিপিইউ ইন্সপেক্টর পুরোনো অ্যান্ড্রয়েড ডিভাইসগুলো সাপোর্ট করে না এবং সব নতুন ডিভাইসের সাথে সামঞ্জস্যপূর্ণ নাও হতে পারে।

CTS-D দিয়ে ভলকান টেস্টিং উন্নত করুন

অ্যান্ড্রয়েড-চালিত ডিভাইস নির্মাতারা তাদের ডিভাইসগুলো সামঞ্জস্যপূর্ণ কিনা তা নিশ্চিত করতে কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) ব্যবহার করে। ডেভেলপার-পাওয়ার্ড CTS (CTS-D) হলো অ্যান্ড্রয়েড অ্যাপ্লিকেশন ডেভেলপারদের দ্বারা জমা দেওয়া পরীক্ষা, যা নিশ্চিত করে যে ভবিষ্যতের অ্যান্ড্রয়েড ডিভাইসগুলো তাদের ব্যবহারের চাহিদা পূরণ করবে এবং তাদের অ্যাপ্লিকেশনগুলো মসৃণভাবে ও ত্রুটিমুক্তভাবে চালাতে সক্ষম হবে।

আপনার ভলকান অ্যাপ্লিকেশনের মাধ্যমে যদি এমন কোনো নতুন বাগ শনাক্ত হয় যা কোনো নির্দিষ্ট অ্যান্ড্রয়েড-চালিত ডিভাইসকে প্রভাবিত করে, তবে আপনি আপনার সমস্যাটি এবং তা পরীক্ষা করার উপায়গুলো বর্ণনা করে একটি নতুন টেস্ট প্রস্তাব জমা দিতে পারেন। এর ফলে ডিভাইসটির জন্য ভবিষ্যতের কোনো আপডেটে সমস্যাটি সমাধান করা নিশ্চিত হয় এবং একই বাগ অন্য কোনো ডিভাইসে ঘটবে না।

পরীক্ষার প্রস্তাব কীভাবে জমা দিতে হয়, তার ধাপে ধাপে নির্দেশনার জন্য CTS জমা দেওয়ার প্রক্রিয়াটি দেখে নিন।