OpenGL হল একটি ক্রস-প্ল্যাটফর্ম গ্রাফিক্স API যা 3D গ্রাফিক্স প্রসেসিং হার্ডওয়্যারের জন্য একটি আদর্শ সফ্টওয়্যার ইন্টারফেস নির্দিষ্ট করে। OpenGL ES হল এম্বেড করা ডিভাইসের জন্য OpenGL স্পেসিফিকেশনের একটি উপসেট।
অ্যান্ড্রয়েড সামঞ্জস্যপূর্ণ হতে, ডিভাইসগুলিকে EGL, OpenGL ES 1.x, এবং OpenGL ES 2.0 এর জন্য ড্রাইভার প্রদান করতে হবে৷ OpenGL ES 3.x-এর জন্য সমর্থন ঐচ্ছিক। মূল বিবেচনার মধ্যে রয়েছে:
- GL ড্রাইভার শক্তিশালী এবং OpenGL ES স্ট্যান্ডার্ডের সাথে সামঞ্জস্যপূর্ণ তা নিশ্চিত করা।
- সীমাহীন সংখ্যক GL প্রসঙ্গের অনুমতি দেওয়া হচ্ছে। যেহেতু অ্যান্ড্রয়েড ব্যাকগ্রাউন্ডে অ্যাপ্লিকেশানগুলিকে অনুমতি দেয় এবং জিএল প্রসঙ্গগুলিকে জীবিত রাখার চেষ্টা করে, আপনার ড্রাইভারে প্রসঙ্গগুলির সংখ্যা সীমাবদ্ধ করা উচিত নয়৷
- প্রতিটি প্রসঙ্গের জন্য বরাদ্দ করা মেমরির পরিমাণ সম্পর্কে সচেতন হওয়া, কারণ একবারে 20-30টি সক্রিয় GL প্রসঙ্গ থাকা সাধারণ।
- YV12 ইমেজ ফরম্যাট এবং অন্যান্য YUV ইমেজ ফরম্যাটগুলিকে সমর্থন করে যা সিস্টেমের অন্যান্য উপাদান থেকে আসে, যেমন মিডিয়া কোডেক বা ক্যামেরা।
- বাধ্যতামূলক এক্সটেনশন
EGL_KHR_wait_sync
,GL_OES_texture_external
,EGL_ANDROID_image_native_buffer
, এবংEGL_ANDROID_recordable
সমর্থন করে। উপরন্তু, হার্ডওয়্যার কম্পোজার v1.1 এবং উচ্চতরের জন্যEGL_ANDROID_framebuffer_target
এক্সটেনশন প্রয়োজন।
EGL_ANDROID_blob_cache
, EGL_KHR_fence_sync
, এবং EGL_ANDROID_native_fence_sync
সমর্থন করার জন্য এটি অত্যন্ত বাঞ্ছনীয়৷
Android 10 EGL 1.5 ইন্টারফেস প্রয়োগ করে। EGL 1.5-এ নতুন বৈশিষ্ট্য সম্পর্কে তথ্যের জন্য, Khronos Releases 1.5 স্পেসিফিকেশন দেখুন।
ড্রাইভার লোড হচ্ছে
অ্যান্ড্রয়েড আশা করে যে সিস্টেমে উপলব্ধ জিপিইউগুলি জানা যাবে যখন সিস্টেমের চিত্র তৈরি করা হবে৷ 32-বিট এবং 64-বিট 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 স্তরসমূহ
Android 10 GLES 2.0+ এর জন্য একটি লেয়ারিং সিস্টেম প্রবর্তন করেছে। GLES স্তরগুলি হল শেয়ার করা বস্তুগুলি অ্যাপগুলির মধ্যে থেকে উপলব্ধ বা সরঞ্জামগুলির দ্বারা সরবরাহ করা হয়৷ GLES স্তরগুলি ডিবাগযোগ্য অ্যাপগুলিকে Vulkan-এর মতো একই সেটআপ প্রক্রিয়া ব্যবহার করে স্তরগুলি আবিষ্কার এবং লোড করতে সক্ষম করে৷
GLES LayerLoader, EGL লোডারের মধ্যে একটি উপাদান, GLES স্তরগুলি সনাক্ত করে। GLES LayerLoader খুঁজে পাওয়া প্রতিটি স্তরের জন্য, GLES LayerLoader AndroidGLESLayer_Initialize
কল করে, libEGL-এর ফাংশন তালিকায় চলে, এবং সমস্ত পরিচিত ফাংশনের জন্য AndroidGLESLayer_GetProcAddress
কল করে৷ যদি স্তরটি একটি ফাংশনকে বাধা দেয় তবে এটি ফাংশনের ঠিকানা ট্র্যাক করে। যদি স্তরটি একটি ফাংশনকে বাধা না দেয়, তাহলে AndroidGLESLayer_GetProcAddress
একই ফাংশন ঠিকানাটি প্রদান করে যা এটি পাস করা হয়েছিল। LayerLoader তারপর স্তরের এন্ট্রি পয়েন্ট নির্দেশ করতে ফাংশন হুক তালিকা আপডেট করে।
স্তরগুলি সক্ষম করুন
আপনি প্রতি অ্যাপ বা বিশ্বব্যাপী GLES স্তরগুলি সক্ষম করতে পারেন। প্রতি-অ্যাপ সেটিংস রিবুট জুড়ে টিকে থাকে, যখন রিবুট করার সময় বিশ্বব্যাপী বৈশিষ্ট্যগুলি সাফ করা হয়।
অ্যাপ্লিকেশন প্রতি স্তর সক্রিয় করতে:
# Enable layersadb shell settings put global enable_gpu_debug_layers 1
# Specify target appadb 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 layersadb 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
চালান।