OpenGL เป็น API กราฟิกข้ามแพลตฟอร์ม ที่ระบุอินเทอร์เฟซซอฟต์แวร์มาตรฐาน สำหรับฮาร์ดแวร์ประมวลผลกราฟิก 3 มิติ OpenGL ES เป็นข้อกำหนด OpenGL สำหรับอุปกรณ์แบบฝัง
อุปกรณ์ต้องมีไดรเวอร์สำหรับ EGL, OpenGL ES 1.x และ OpenGL ES 2.0 จึงจะเข้ากันได้กับ Android การรองรับ OpenGL ES 3.x เป็นตัวเลือก ข้อควรพิจารณาที่สำคัญมีดังนี้
- ตรวจสอบว่าไดรเวอร์ GL มีความเสถียรและเป็นไปตาม มาตรฐาน OpenGL ES
- อนุญาตบริบท GL ได้ไม่จำกัดจำนวน เนื่องจาก Android อนุญาตให้ แอปทำงานในเบื้องหลังและพยายามรักษาสภาพแวดล้อม GL ให้ทำงานอยู่ คุณจึงไม่ควร จำกัดจำนวนบริบทในไดรเวอร์
- โปรดคำนึงถึงปริมาณหน่วยความจำที่จัดสรรให้กับแต่ละบริบท เนื่องจาก โดยทั่วไปแล้วจะมีบริบท GL ที่ใช้งานอยู่ 20-30 บริบทพร้อมกัน
- รองรับรูปแบบรูปภาพ YV12 และรูปแบบรูปภาพ YUV อื่นๆ ที่มาจาก คอมโพเนนต์อื่นๆ ในระบบ เช่น ตัวแปลงรหัสสื่อหรือกล้อง
- รองรับส่วนขยายที่บังคับ
EGL_KHR_wait_syncGL_OES_texture_externalEGL_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 ได้ที่ข้อกำหนดเวอร์ชัน 1.5 ของ Khronos
กำลังโหลดไดรเวอร์
Android คาดหวังว่าระบบจะรู้จัก GPU ที่พร้อมใช้งานเมื่อสร้างอิมเมจระบบ
เส้นทางที่ต้องการสำหรับไดรเวอร์ OpenGL ES แบบ 32 บิตและ 64 บิตคือ
/vendor/lib/egl และ /vendor/lib64/egl ตามลำดับ
โปรแกรมโหลดใช้พร็อพเพอร์ตี้ของระบบ 2 รายการ
ro.hardware.egl และ ro.board.platform หรือชื่อที่แน่นอน
เพื่อค้นหาและโหลดไดรเวอร์ของระบบ ไดรเวอร์ OpenGL ES ต้องจัดส่งในรูปแบบไบนารีเดียวหรือแยกเป็น 3 ไบนารี หากมีการจัดส่งไดรเวอร์ OpenGL ES
ในไบนารีเดียว ให้ใช้ชื่อใดชื่อหนึ่งต่อไปนี้
libGLES_${ro.hardware.egl}.so libGLES_${ro.board.platform}.so libGLES.so
หากไดรเวอร์ OpenGL ES จัดส่งในไบนารี 3 รายการ ให้ใช้ชุดชื่อต่อไปนี้ชุดใดชุดหนึ่ง
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 จะอัปเดตรายการ Hook ฟังก์ชันให้
ชี้ไปยังจุดแรกเข้าของเลเยอร์
เปิดใช้เลเยอร์
คุณเปิดใช้เลเยอร์ 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_layersadb shell settings delete global gpu_debug_appadb 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