OpenGL ES là gì?

OpenGL ES (viết tắt là GLES) là phương thức lập trình (API - application programming interface) được sử dụng dành cho lập trình đồ họa. Mục tiêu khi Khronos Group (hiệp hội các tiêu chuẩn mở) tạo ra GLES là API được dùng cho các thiết bị nhúng hoặc cầm tay như điện thoại, xe hơi, ...

Sự khác biệt lớn nhất giữa OpenGL (Open Graphic Library) và OpenGL ES (GLES) là OpenGL được thiết kế cho các thiết bị "general computing systems" chẳng hạn như máy tính. Ngoài ra, GLES được xem như là một phần của OpenGL. Do đó hầu hết các hàm sử dụng được cho GLES có thể dùng cho OpenGL, nhưng ngược lại thì không thể. Nếu bạn muốn xem sự khác biệt thì có thể xem tại đây: es_full_spec_1.1.pdf

Ngoài ra GLES còn được thêm những hàm dành riêng cho các thiết bị di động như quản lý năng lượng tiêu thụ, hiệu suất thấp CPU và bộ nhớ (trước thời điểm 2015-2016, các thiết bị dùng GLES có hiệu suất thấp để giảm điện năng tiêu thụ), thiếu khả năng xử lý dấu chấm động (trước thời kỳ ARMv7 NEON, các thiết bị dùng GLES không có khả năng xử lý số thập phân tốt).

GLES đồng thời cũng loại bỏ các hàm phù hợp với các thiết bị nhúng chẳng hạn như glBegin hay. 

Vậy làm sao để lập trình được GLES trên máy tính?

May mắn thay chúng ta có 1 thư viện lập trình tên ANGLE do Google và TransGaming (trước là một công ty về công nghệ nhưng mình rất tiếc từ năm 2016 nó trở thành một công ty về môi giới bất động sản) dùng để gọi hàm cũng như giả lập các hàm của GLES để chạy trên máy tính. Trước đây ANGLE dùng để convert các game dùng WebGL (một phiên bản chạy nền web của GLES) thành DirectX trên Internet Explorer (IE) nhưng đến thời điểm hiện tại nó đã hỗ trợ chuyển đổi qua các API khác như OpenGL Desktop, Vulkan, Metal (mình rất ngạc nhiên khi người port ANGLE Metal lại là một người Việt Nam - anh Lê Hoàng Quyền, một cựu lập trình viên Gameloft VN, hiện đang sinh sống tại Singapore)

Ngoài ra, như mình đã nói do là một phần của OpenGL nên gần như mọi hàm GLES có thể chạy được, các bạn có thể dùng GLAD để tìm ra được các hàm dùng chung. Nhưng cách này không hợp lý khi OpenGL đang ngày càng bị thay thế bởi Vulkan, DirectX, Metal. Mình vẫn khuyến khích dùng cách ANGLE hơn. Trước đây, Godot Engine (một engine khá nổi tiếng trong vài năm gần đây khi dùng GLES là trọng tâm) cũng dùng cách GLAD này, nhưng bây giờ họ cũng khuyến khích dùng ANGLE để thay thế.

Ngoài ra còn các cách khác như dùng AMD SDK, NVIDIA SDK - tuy nhiên các SDK này đa phần khá cũ không còn khả năng tương thích phần cứng mới nữa. Cuối cùng ANGLE vẫn tốt hơn.

Hãng sản xuất GPU cho thiết bị di động là Imagination Technologies cũng có phiên bản SDK cho GLES, tuy nhiên mình không khuyến khích dùng vì SDK chủ yếu tập trung vào GPU PowerVR của hãng hơn là tối ưu cho các thiết bị khác nhau.

Các tài liệu cần thiết và source code mẫu để lập trình GLES

Một vài tài liệu mình tìm được khá cần thiết cho việc học GLES:

Các source code tham khảo:

Game console như Sony Play Station 4 (có chứng chỉ GLES 2.0 của Khronos cấp), Microsoft Xbox One/Series (dùng UWP chung với ANGLE), Nintendo Switch (có chứng chỉ GLES 3.0 của Khronos cấp) nhưng không có tài liệu được công bố công khai.

Khá nhiều tài liệu và video sử dụng các ngôn ngữ khác nhau như Java, Objective-C, ... Tuy nhiên chúng ta chỉ tập trung vào C/C++ vì điểm mạnh của nó là cross-platform, chúng ta có thể dễ dàng port code (sửa đổi khá ít 10 ~ 20% dòng trong bộ source code) chạy trên nhiều device.

Comments


Comments are closed