OpenGL ES ও EGL প্রয়োগ করা

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

Android-এর সাথে মানানসই হতে, ডিভাইসকে 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। এছাড়াও, Hardware Composer 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 Specification দেখুন।

ড্রাইভার লোড হচ্ছে

সিস্টেম ইমেজ তৈরি করার সময় সিস্টেমে উপলভ্য GPU-এর ব্যাপারে জানা যাবে বলে Android আশা করে। ৩২-বিট ও ৬৪-বিট 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-এর মতো একই সেট-আপ মেকানিজম ব্যবহার করে লেয়ার ডিসকভার ও লোড করতে দেয়।

EGL লোডারের মধ্যে থাকা একটি কম্পোনেন্ট, GLES LayerLoader, GLES লেয়ার শনাক্ত করে। GLES LayerLoader প্রতিটি লেয়ারের জন্য যা খুঁজে পায়, 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 রান করান।