Video games thuê ngoài tính toán render thời gian thực cho GPU qua OpenGL. Kết quả render không được gửi trở lại bộ nhớ chính mà thay vào đó là bộ đệm khung của bộ nhớ video. Sau đó bộ điều khiển hiển thị sẽ gửi dữ liệu này đến thiết bị hiển thị. | |
| Thiết kế bởi | Silicon Graphics |
|---|---|
| Phát triển bởi | Khronos Group (trước đây ARB) |
| Phát hành lần đầu | 30 tháng 6 năm 1992; 32 năm trước |
| Phiên bản ổn định | 4.6
/ 31 tháng 7 năm 2017; 6 năm trước |
| Viết bằng | C |
| Thể loại | API đồ họa 3D |
| Giấy phép |
|
| Website | opengl |
OpenGL (Thư viện Đồ họa Mở) là một API đa nền tảng và đa ngôn ngữ dùng để kết xuất đồ họa 2D và 3D. Nó thường được áp dụng để giao tiếp với GPU nhằm đạt được hiệu suất đồ họa tối ưu.
Được Silicon Graphics, Inc. (SGI) phát triển từ năm 1991 và chính thức ra mắt vào ngày 30 tháng 6 năm 1992; OpenGL đã được áp dụng trong các lĩnh vực CAD, thực tế ảo, mô phỏng khoa học, mô phỏng thông tin, và trò chơi điện tử. Kể từ năm 2006, OpenGL được quản lý bởi tổ chức phi lợi nhuận Khronos Group. Đối thủ chính của OpenGL là DirectX của Microsoft.
Thiết kế
Đặc tả của OpenGL mô tả một API trừu tượng cho việc vẽ đồ họa 2D và 3D. Mặc dù API có thể được triển khai hoàn toàn bằng phần mềm, nhưng nó được thiết kế để có thể triển khai chủ yếu hoặc hoàn toàn trên phần cứng.
API được định nghĩa như một tập hợp các hàm mà chương trình có thể gọi, cùng với một loạt các hằng số nguyên được đặt tên (chẳng hạn như hằng số GL_TEXTURE_2D với giá trị số 3553). Dù các định nghĩa hàm có vẻ giống như các định nghĩa trong ngôn ngữ lập trình C, nhưng chúng không phụ thuộc vào ngôn ngữ cụ thể nào. Do đó, OpenGL hỗ trợ nhiều liên kết ngôn ngữ, bao gồm WebGL (API dựa trên OpenGL ES 2.0 cho việc kết xuất 3D trong trình duyệt web), và các liên kết C như WGL, GLX, CGL, cũng như liên kết Java trên Android và iOS.
Ngoài việc không phụ thuộc vào ngôn ngữ, OpenGL còn đa nền tảng. Đặc tả kỹ thuật không quy định cách lấy và quản lý ngữ cảnh OpenGL, mà để điều này do hệ điều hành quản lý. OpenGL chỉ tập trung vào việc hiển thị, không cung cấp các API liên quan đến đầu vào, âm thanh hay quản lý cửa sổ.
Phát triển
OpenGL là một API đang trong quá trình phát triển liên tục. Các phiên bản mới của đặc tả OpenGL được Khronos Group phát hành định kỳ, với mỗi phiên bản bổ sung thêm nhiều tính năng mới. Quyết định về các chi tiết của từng phiên bản được đưa ra qua sự đồng thuận của các thành viên trong nhóm, bao gồm các nhà sản xuất card đồ họa, các nhà thiết kế hệ điều hành, và các công ty công nghệ như Mozilla và Google.
Bên cạnh các tính năng cơ bản của API, các nhà cung cấp GPU có thể cung cấp thêm chức năng qua các tiện ích mở rộng. Những tiện ích mở rộng này có thể giới thiệu các tính năng mới, hằng số mới, và có thể điều chỉnh hoặc loại bỏ một số hạn chế của các chức năng OpenGL hiện tại. Chúng cũng cho phép các nhà cung cấp thể hiện các API tùy chỉnh mà không cần sự hỗ trợ từ các nhà cung cấp khác hoặc toàn bộ Nhóm Khronos, từ đó tăng cường tính linh hoạt của OpenGL. Tất cả các tiện ích mở rộng đều được tập hợp và quản lý bởi OpenGL Registry.
Mỗi tiện ích mở rộng được gán một mã nhận dạng ngắn gọn dựa trên tên của công ty phát triển. Ví dụ, Nvidia sử dụng mã NV, như trong tên mở rộng GL_NV_half_float, hằng số GL_HALF_FLOAT_NV và hàm glVertex2hNV. Nếu nhiều nhà cung cấp đồng ý triển khai cùng một chức năng thông qua một API chung, thì một tiện ích mở rộng chung có thể được phát hành với mã nhận dạng EXT. Trong một số trường hợp, nếu Ban Đánh giá Kiến trúc của Khronos Group phê duyệt, tiện ích mở rộng đó sẽ được gán mã ARB.
Các tính năng mới được giới thiệu trong mỗi phiên bản OpenGL thường kết hợp các tính năng từ nhiều tiện ích mở rộng đã được triển khai rộng rãi, đặc biệt là các tiện ích mở rộng thuộc loại ARB hoặc EXT.
OpenGL được thiết kế với các mục tiêu chính sau:
- Ẩn đi sự phức tạp trong việc tương tác với các bộ máy đồ họa 3D bằng cách cung cấp một giao diện lập trình đồng nhất.
- Ẩn sự khác biệt giữa các phần cứng 3D bằng cách yêu cầu mọi phần cứng tương thích OpenGL phải hỗ trợ tất cả các chức năng của giao diện OpenGL. Nếu phần cứng không hỗ trợ đầy đủ, các chức năng có thể được thực hiện bằng phần mềm.
Các thao tác cơ bản trong OpenGL bao gồm việc nhận các yếu tố hình học như điểm, đường thẳng và đa giác, rồi chuyển chúng thành các điểm ảnh (pixel) trên màn hình. Điều này được thực hiện thông qua luồng ống dẫn đồ họa (graphics pipeline), hay còn gọi là bộ máy trạng thái OpenGL. Hầu hết các lệnh trong OpenGL được sử dụng để tạo ra những hình học cơ bản hoặc để quy định cách chuyển đổi hình học trong bộ máy trạng thái này.
Trước khi OpenGL 2.0 được phát hành, mỗi giai đoạn trong luồng ống dẫn đồ họa thực hiện một nhiệm vụ cố định và không thể thay đổi. Tuy nhiên, kể từ phiên bản OpenGL 2.0, một số giai đoạn trong luồng này có thể được tùy chỉnh thông qua ngôn ngữ lập trình shader GLSL.
Hình ảnh



- GLSL - Ngôn ngữ shader của OpenGL
- Cg - Ngôn ngữ shader của Nvidia dành cho OpenGL
- Java OpenGL - Phiên bản OpenGL cho Java
- OpenGL ES - Phiên bản OpenGL dành cho hệ thống nhúng
- OpenAL - Thư viện âm thanh mã nguồn mở được thiết kế để hoạt động cùng OpenGL
- OpenSL ES - Thư viện âm thanh bổ sung khác
- Đường ống đồ họa
- GLUT - Thư viện hỗ trợ công cụ cho OpenGL
- GLU - Thư viện hàm dành cho các ứng dụng sử dụng OpenGL
- Assimp - Thư viện để nhập dữ liệu từ các tệp đồ họa 3D
- Mesa 3D - Thư viện mã nguồn mở thực thi OpenGL
- Direct3D - Thư viện đồ họa phát triển bởi Microsoft
- Light Weight Java Game Library - Thư viện Java nhẹ cho game
- VirtualGL - Công cụ hỗ trợ đồ họa 3D
- Vulkan - API đồ họa đa nền tảng
Liên kết bên ngoài
- Trang chính của OpenGL Lưu trữ tại Wayback Machine ngày 26-02-2011
Tiêu chuẩn Khronos Group | |
|---|---|
| Hoạt động |
|
| Đã ngừng |
|
