OpenGL ES এবং EGL প্রয়োগ করুন

OpenGL হলো একটি ক্রস-প্ল্যাটফর্ম গ্রাফিক্স এপিআই যা ৩ডি গ্রাফিক্স প্রসেসিং হার্ডওয়্যারের জন্য একটি স্ট্যান্ডার্ড সফটওয়্যার ইন্টারফেস নির্দিষ্ট করে। OpenGL ES হলো এমবেডেড ডিভাইসের জন্য OpenGL স্পেসিফিকেশনের একটি উপসেট।

অ্যান্ড্রয়েডের সাথে সামঞ্জস্যপূর্ণ হতে হলে, ডিভাইসগুলোতে EGL, OpenGL ES 1.x, এবং OpenGL ES 2.0-এর জন্য ড্রাইভার সরবরাহ করতে হবে। OpenGL ES 3.x-এর জন্য সমর্থন ঐচ্ছিক। প্রধান বিবেচ্য বিষয়গুলো হলো:

  • যাচাই করুন যে জিএল ড্রাইভারটি নির্ভরযোগ্য এবং ওপেনজিএল ইএস (OpenGL ES) মানদণ্ড মেনে চলে।
  • অসীম সংখ্যক জিএল কনটেক্সট ব্যবহারের অনুমতি দিন। যেহেতু অ্যান্ড্রয়েড ব্যাকগ্রাউন্ডে অ্যাপ চলার অনুমতি দেয় এবং জিএল কনটেক্সটগুলোকে সচল রাখার চেষ্টা করে, তাই আপনার ড্রাইভারে কনটেক্সটের সংখ্যা সীমিত করা উচিত নয়।
  • প্রতিটি কনটেক্সটের জন্য বরাদ্দ করা মেমরির পরিমাণের দিকে খেয়াল রাখুন, কারণ প্রায়শই একই সময়ে ২০-৩০টি সক্রিয় জিএল কনটেক্সট থাকে।
  • YV12 ইমেজ ফরম্যাট এবং সিস্টেমের অন্যান্য উপাদান, যেমন মিডিয়া কোডেক বা ক্যামেরা থেকে আসা অন্যান্য YUV ইমেজ ফরম্যাট সমর্থন করে।
  • EGL_KHR_wait_sync , GL_OES_texture_external , EGL_ANDROID_image_native_buffer , এবং EGL_ANDROID_recordable এই আবশ্যিক এক্সটেনশনগুলোকে সমর্থন করে। এছাড়াও, Hardware Composer v1.1 এবং এর উচ্চতর সংস্করণগুলোর জন্য EGL_ANDROID_framebuffer_target এক্সটেনশনটি প্রয়োজন।

EGL_ANDROID_blob_cache , EGL_KHR_fence_sync , এবং EGL_ANDROID_native_fence_sync কেও সমর্থন করার জন্য দৃঢ়ভাবে সুপারিশ করা হচ্ছে।

অ্যান্ড্রয়েড ১০-এ EGL 1.5 ইন্টারফেস প্রয়োগ করা হয়েছে। EGL 1.5-এর নতুন বৈশিষ্ট্যগুলো সম্পর্কে জানতে, Khronos Releases 1.5 Specification দেখুন।

ড্রাইভার লোডিং

সিস্টেম ইমেজ বিল্ড করার সময় সিস্টেমে উপলব্ধ জিপিইউগুলো সম্পর্কে জানা থাকবে বলে অ্যান্ড্রয়েড আশা করে। ৩২-বিট এবং ৬৪-বিট OpenGL ES ড্রাইভারের জন্য পছন্দের পাথগুলো হলো যথাক্রমে /vendor/lib/egl এবং /vendor/lib64/eglলোডারটি সিস্টেম ড্রাইভারগুলো খুঁজে বের করতে এবং লোড করতে দুটি সিস্টেম প্রপার্টি, ro.hardware.egl এবং ro.board.platform , অথবা ড্রাইভারের সঠিক নামটি ব্যবহার করে। OpenGL ES ড্রাইভারটি অবশ্যই একটি বাইনারি হিসেবে অথবা তিনটি বাইনারিতে বিভক্ত করে সরবরাহ করতে হবে। যদি OpenGL ES ড্রাইভারটি একটি বাইনারি হিসেবে সরবরাহ করা হয়, তবে নিম্নলিখিত নামগুলোর মধ্যে একটি ব্যবহার করুন:

libGLES_${ro.hardware.egl}.so
libGLES_${ro.board.platform}.so
libGLES.so

যদি OpenGL ES ড্রাইভারটি তিনটি বাইনারিতে সরবরাহ করা হয়, তাহলে নিম্নলিখিত নাম সেটগুলির মধ্যে একটি ব্যবহার করুন:

libEGL_${ro.hardware.egl}.so
libGLESv1_CM_${ro.hardware.egl}.so
libGLESv2_${ro.hardware.egl}.so

libEGL_${ro.board.platform}.so
libGLESv1_CM_${ro.board.platform}.so
libGLESv2_${ro.board.platform}.so

libEGL.so
libGLESv1_CM.so
libGLESv2.so

OpenGL ES স্তরগুলি

অ্যান্ড্রয়েড ১০ GLES 2.0+ এর জন্য একটি লেয়ারিং সিস্টেম চালু করেছে। GLES লেয়ার হলো শেয়ার্ড অবজেক্ট, যা অ্যাপের ভেতর থেকে অথবা বিভিন্ন টুলের মাধ্যমে পাওয়া যায়। GLES লেয়ার ডিবাগযোগ্য অ্যাপগুলোকে Vulkan-এর মতো একই সেটআপ পদ্ধতি ব্যবহার করে লেয়ার খুঁজে বের করতে ও লোড করতে সক্ষম করে।

GLES LayerLoader, যা EGL লোডারের একটি উপাদান, GLES লেয়ারগুলো শনাক্ত করে। GLES LayerLoader প্রতিটি লেয়ার খুঁজে পাওয়ার পর AndroidGLESLayer_Initialize কল করে, libEGL-এর ফাংশন তালিকাগুলো পরীক্ষা করে এবং সমস্ত পরিচিত ফাংশনের জন্য AndroidGLESLayer_GetProcAddress কল করে। যদি লেয়ারটি কোনো ফাংশনকে ইন্টারসেপ্ট করে, তবে এটি সেই ফাংশনের অ্যাড্রেস ট্র্যাক করে। যদি লেয়ারটি কোনো ফাংশনকে ইন্টারসেপ্ট না করে, তবে AndroidGLESLayer_GetProcAddress সেই একই ফাংশন অ্যাড্রেসটি ফেরত দেয় যা তাকে পাস করা হয়েছিল। এরপর LayerLoader লেয়ারটির এন্ট্রি পয়েন্ট নির্দেশ করার জন্য ফাংশন হুক তালিকাটি আপডেট করে।

স্তরগুলি সক্রিয় করুন

আপনি GLES লেয়ারগুলো অ্যাপ-ভিত্তিক অথবা বিশ্বব্যাপী সক্রিয় করতে পারেন। অ্যাপ-ভিত্তিক সেটিংস রিবুটের পরেও অপরিবর্তিত থাকে, কিন্তু বিশ্বব্যাপী বৈশিষ্ট্যগুলো রিবুটের সময় মুছে যায়।

প্রতি অ্যাপে লেয়ার সক্রিয় করতে:

# Enable layers
adb shell settings put global enable_gpu_debug_layers 1

# Specify target app
adb shell settings put global gpu_debug_app package_name

# Specify layer list (from top to bottom)
adb shell settings put global gpu_debug_layers_gles layer1:layer2:...:layerN

# Specify packages to search for layers
adb shell settings put global gpu_debug_layer_app package1:package2:...:packageN

প্রতি অ্যাপে লেয়ার নিষ্ক্রিয় করতে:

adb shell settings delete global enable_gpu_debug_layers
adb shell settings delete global gpu_debug_app
adb shell settings delete global gpu_debug_layer_app

বিশ্বব্যাপী স্তরগুলি সক্রিয় করতে:

# Attempts to load layers for all applications, including native executables
adb shell setprop debug.gles.layers layer1:layer2:...:layerN

পরীক্ষার স্তর

GLES লেয়ারগুলো Android CTS দ্বারা সমর্থিত এবং সামঞ্জস্যপূর্ণ ডিভাইসগুলোর জন্য CTS টেস্টে উত্তীর্ণ হওয়া আবশ্যক। কোনো ডিভাইসে লেয়ারগুলো কাজ করছে কিনা তা শনাক্ত করতে, $ atest CtsGpuToolsHostTestCases কমান্ডটি চালান।