OpenGL হল একটি ক্রস-প্ল্যাটফর্ম গ্রাফিক্স API যা 3D গ্রাফিক্স প্রসেসিং হার্ডওয়্যারের জন্য একটি স্ট্যান্ডার্ড সফ্টওয়্যার ইন্টারফেস নির্দিষ্ট করে। OpenGL ES হল এমবেডেড ডিভাইসের জন্য OpenGL স্পেসিফিকেশনের একটি উপসেট।
অ্যান্ড্রয়েডের সাথে সামঞ্জস্যপূর্ণ হতে, ডিভাইসগুলিকে EGL, OpenGL ES 1.x, এবং OpenGL ES 2.0 এর জন্য ড্রাইভার সরবরাহ করতে হবে। OpenGL ES 3.x এর জন্য সমর্থন ঐচ্ছিক। মূল বিবেচ্য বিষয়গুলির মধ্যে রয়েছে:
- GL ড্রাইভারটি শক্তিশালী এবং OpenGL ES মান মেনে চলে কিনা তা যাচাই করুন।
- সীমাহীন সংখ্যক GL কনটেক্সট মঞ্জুর করুন। যেহেতু Android ব্যাকগ্রাউন্ডে অ্যাপগুলিকে মঞ্জুরি দেয় এবং GL কনটেক্সটগুলিকে জীবন্ত রাখার চেষ্টা করে, তাই আপনার ড্রাইভারে কনটেক্সটের সংখ্যা সীমাবদ্ধ করা উচিত নয়।
- প্রতিটি প্রসঙ্গের জন্য বরাদ্দকৃত মেমোরির পরিমাণ সম্পর্কে সচেতন থাকুন, কারণ একসাথে ২০-৩০টি সক্রিয় 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
সমর্থন করার জন্য এটি অত্যন্ত সুপারিশ করা হয়।
অ্যান্ড্রয়েড ১০ EGL 1.5 ইন্টারফেস প্রয়োগ করে। EGL 1.5 এর নতুন বৈশিষ্ট্য সম্পর্কে তথ্যের জন্য, Khronos Releases 1.5 স্পেসিফিকেশন দেখুন।
ড্রাইভার লোড হচ্ছে
অ্যান্ড্রয়েড আশা করে যে সিস্টেম ইমেজ তৈরির সময় সিস্টেমে উপলব্ধ GPU গুলি জানা যাবে। 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 স্তরগুলি
অ্যান্ড্রয়েড ১০ GLES 2.0+ এর জন্য একটি লেয়ারিং সিস্টেম চালু করেছে। GLES লেয়ারগুলি হল শেয়ার করা অবজেক্ট যা অ্যাপের মধ্যে থেকে পাওয়া যায় অথবা টুল দ্বারা সরবরাহ করা হয়। GLES লেয়ারগুলি Vulkan এর মতো একই সেটআপ প্রক্রিয়া ব্যবহার করে ডিবাগযোগ্য অ্যাপগুলিকে স্তরগুলি আবিষ্কার এবং লোড করতে সক্ষম করে।
EGL লোডারের মধ্যে থাকা একটি উপাদান, GLES LayerLoader, 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
চালান।