OpenGL là gì ?
OpenGL (tiếng Anh Open Graphics Library) là một giao diện lập trình ứng dụng đồ họa (API) cho rendering 2D và 3D đồ họa vector. API thường được sử dụng để tương tác với một đơn vị xử lý đồ họa (GPU) giúp tăng tốc phần cứng xử lý đồ họa.
Silicon Graphics Inc., (SGI) bắt đầu phát triển OpenGL vào năm 1991 và phát hành nó vào ngày 30 tháng 6 năm 1992 các ứng dụng sử dụng nó rộng rãi trong lĩnh vực thiết kế (CAD), thực tế ảo, khoa học, thông tin, mô phỏng chuyến bay và trò chơi video . Từ năm 2006, OpenGL được quản lý bởi tập đoàn công nghệ phi lợi nhuận Khronos Group .
Thiết kế của OpenGL
Đặc tả OpenGL mô tả một API để 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 triển khai hầu hết hoặc hoàn toàn bằng phần cứng .
API được định nghĩa là một tập hợp các hàm có thể được gọi bởi chương trình máy khách. Mặc dù các định nghĩa hàm rất giống với ngôn ngữ lập trình C, nhưng chúng độc lập với ngôn ngữ. Ngoài ra nó còn là một nền tảng chéo và nó không cung cấp API liên quan đến đầu vào, âm thanh.
Phát triển OpenGL
OpenGL là một API đang phát triển. Các phiên bản mới của OpenGL thường được phát hành bởi Tập đoàn Khronos, mỗi phiên bản mở rộng API để hỗ trợ các tính năng mới khác nhau. Chi tiết của từng phiên bản được quyết định bởi sự đồng thuận giữa các thành viên của Tập đoàn, bao gồm các nhà sản xuất card đồ họa, nhà thiết kế hệ điều hành và các công ty công nghệ nói chung như Mozilla và Google.
Ngoài các tính năng được yêu cầu bởi API lõi, các nhà cung cấp bộ xử lý đồ họa (GPU) có thể cung cấp chức năng bổ sung dưới dạng tiện ích mở rộng . Các tiện ích mở rộng có thể giới thiệu các chức năng mới và các hằng số mới và có thể nới lỏng hoặc loại bỏ các hạn chế đối với các chức năng OpenGL hiện có. Các nhà cung cấp có thể sử dụng các tiện ích mở rộng để hiển thị API tùy chỉnh mà không cần sự hỗ trợ từ các nhà cung cấp khác hoặc Tập đoàn Khronos nói chung, điều này làm tăng đáng kể tính linh hoạt của OpenGL. Tất cả các tiện ích mở rộng được thu thập và được xác định bởi OpenGL Registry.
Mỗi phần mở rộng được liên kết với một mã định danh ngắn, dựa trên tên của công ty đã phát triển nó. Ví dụ: định danh của Nvidia là NV, là một phần của 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 chức năng bằng cùng một API, tiện ích mở rộng chia sẻ có thể được phát hành, sử dụng mã định danh EXT. Trong trường hợp Hội đồng Đánh giá Kiến trúc của Tập đoàn Khronos cung cấp phần mở rộng của họ mã định danh ARB được sử dụng.
Các tính năng được giới thiệu bởi mỗi phiên bản OpenGL mới thường được phát triển từ các tính năng kết hợp của một số 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 loại ARB hoặc EXT.
Tài liệu OpenGL là gì
Sự phổ biến của OpenGL một phần là do chất lượng của tài liệu chính thức. Hội đồng đánh giá kiến trúc OpenGL đã phát hành một loạt sách hướng dẫn cùng với thông số kỹ thuật được cập nhật để theo dõi các thay đổi trong API. Chúng thường được loại bằng màu sắc bìa của chúng:
Màu đỏ
- Hướng dẫn lập trình OpenGL, phiên bản thứ 9. ISBN 978-0-134-49549-1
- Hướng dẫn chính thức để học OpenGL, Phiên bản 4.5 với SPIR-V
Màu cam
- Ngôn ngữ tạo bóng OpenGL, phiên bản thứ 3. ISBN 0-321-63763-1
- Một cuốn sách hướng dẫn và tham khảo cho GLSL .
- Sách lịch sử (tiền OpenGL 2.0):
Màu xanh
- Lập trình OpenGL cho Hệ thống X Window. ISBN 978-0-201-48359-8
- Một cuốn sách về X11 giao thoa và Bộ công cụ tiện ích OpenGL (GLUT).
Màu xanh
- Tài liệu tham khảo OpenGL, phiên bản thứ 4. ISBN 0-321-17383-X
- Các trang hướng dẫn sử dụng Unix (man) cho OpenGL.
Màu trắng
- Lập trình OpenGL cho Windows 95 và Windows NT. ISBN 0-201-40709-4
- Giao tiếp OpenGL với Microsoft Windows.
Thư viện liên kết
Các phiên bản đầu tiên của OpenGL được phát hành với thư viện tiện ích OpenGL (GLU). Nó cung cấp tính năng đơn giản, hữu ích nhưng khó có khả năng được hỗ trợ trong phần cứng hiện đại, chẳng hạn như tessellating , và tạo ra mipmaps. Thông số kỹ thuật GLU được cập nhật lần cuối vào năm 1998 và hiện không được chấp nhận .
Bộ công cụ ngữ cảnh và cửa sổ
Do việc tạo ngữ cảnh OpenGL là một quá trình khá phức tạp do nó khác nhau giữa các hệ điều hành , việc tạo ngữ cảnh OpenGL tự động đã trở thành một tính năng phổ biến của một số thư viện giao diện người dùng và phát triển trò chơi, bao gồm SDL, Allegro, SFML, FLTK, và Qt . Một vài thư viện đã được thiết kế chỉ để tạo ra một cửa sổ hỗ trợ OpenGL. Thư viện đầu tiên như vậy là OpenGL Utility Toolkit (GLUT), sau đó được thay thế bởi freeglut. GLFW là một thay thế mới hơn.
Các bộ công cụ này được thiết kế để tạo và quản lý các cửa sổ OpenGL và quản lý đầu vào
- GLFW – Trình xử lý cửa sổ đa nền tảng và bàn phím chuột-chuột-cần điều khiển; thiên về game
- freeglut – Một trình xử lý cửa sổ và bàn phím chuột đa nền tảng; API của nó là siêu bộ của API GLUT và nó ổn định và cập nhật hơn GLUT
- OpenGL Utility Toolkit (GLUT) – Trình xử lý cửa sổ cũ, không còn được duy trì.
- Một số “thư viện đa phương tiện” có thể tạo các cửa sổ OpenGL, ngoài việc nhập liệu, âm thanh và các tác vụ khác hữu ích cho các ứng dụng giống như trò chơi
- Allegro 5 – Thư viện đa phương tiện đa nền tảng với API C tập trung vào phát triển trò chơi
- Simple DirectMedia Layer (SDL) – Thư viện đa phương tiện đa nền tảng với API C
- SFML – Thư viện đa phương tiện đa nền tảng với API C ++
Bộ công cụ widget
- FLTK – Một thư viện widget C ++ đa nền tảng nhỏ
- Qt – Bộ công cụ widget C ++ đa nền tảng. Nó cung cấp nhiều đối tượng trợ giúp OpenGL, thậm chí còn loại bỏ sự khác biệt giữa GL máy tính để bàn và OpenGL ES
- wxWidgets – Bộ công cụ widget C ++ đa nền tảng
Thư viện tải mở rộng
Với khối lượng công việc lớn liên quan đến việc xác định và tải các phần mở rộng OpenGL, một vài thư viện đã được thiết kế để tự động tải tất cả các tiện ích mở rộng và chức năng. Ví dụ bao gồm GLEE , GLEW và glbinding . Các tiện ích mở rộng cũng được tải tự động chẳng hạn như JOGL và PyOpenGL .
Triển khai
Mesa 3D là một triển khai mã nguồn mở của OpenGL. Nó có thể thực hiện kết xuất phần mềm thuần túy và cũng có thể sử dụng khả năng tăng tốc phần cứng trên BSD, Linux và các nền tảng khác bằng cách tận dụng Cơ sở hạ tầng kết xuất trực tiếp. Kể từ phiên bản 13.0, nó triển khai phiên bản 4.5 của tiêu chuẩn OpenGL.
Lịch sử OpenGL
Vào những năm 1980, việc phát triển phần mềm có thể hoạt động với nhiều loại phần cứng đồ họa là một thách thức thực sự. Các nhà phát triển phần mềm đã viết các giao diện và trình điều khiển tùy chỉnh cho từng phần cứng. Điều này là tốn kém và cần nhiều nhân lực.
Đến đầu những năm 1990, Silicon Graphics (SGI) là công ty hàng đầu về đồ họa 3D cho các máy trạm. API IRIS GL của họ được coi là tiên tiến và trở thành tiêu chuẩn công nghiệp, làm lu mờ PHIGS dựa trên tiêu chuẩn mở. IRIS GL được coi là dễ sử dụng hơn và vì nó hỗ trợ chế độ kết xuất ngay lập tức . Ngược lại, PHIGS được coi là khó sử dụng và lỗi thời về chức năng.
Các đối thủ cạnh tranh của SGI (bao gồm Sun microsystems , Hewlett-Packard và IBM ) cũng có thể đưa ra thị trường phần cứng 3D được hỗ trợ bởi các phần mở rộng được thực hiện theo tiêu chuẩn PHIGS, điều này đã gây áp lực cho SGI phải mở một phiên bản IrisGL dưới dạng tiêu chuẩn công khai có tên OpenGL .
Tuy nhiên, SGI có nhiều khách hàng mà việc thay đổi từ IrisGL sang OpenGL sẽ đòi hỏi đầu tư đáng kể. Hơn nữa, IrisGL có các chức năng API không liên quan đến đồ họa 3D. Ví dụ, nó bao gồm một cửa sổ, bàn phím và chuột API, một phần vì nó đã được phát triển trước khi Hệ thống X Window. Và các thư viện IrisGL không phù hợp để mở công khai do vấn đề cấp phép và bằng sáng chế. Các yếu tố này yêu cầu SGI tiếp tục hỗ trợ API lập trình Iris Inventor và Iris Performanceer tiên tiến và độc quyền trong khi hỗ trợ thị trường cho OpenGL trưởng thành.
Một trong những hạn chế của IrisGL là nó chỉ cung cấp quyền truy cập vào các tính năng được hỗ trợ bởi phần cứng cơ bản. Nếu phần cứng đồ họa không hỗ trợ một tính năng cơ bản, thì ứng dụng không thể sử dụng nó. OpenGL đã khắc phục vấn đề này bằng cách cung cấp phần mềm triển khai các tính năng không được phần cứng hỗ trợ, cho phép các ứng dụng sử dụng đồ họa tiên tiến trên các hệ thống tương đối thấp. OpenGL đẩy trách nhiệm phát triển của các chương trình giao diện phần cứng ( trình điều khiển thiết bị) cho các nhà sản xuất phần cứng và các chức năng được ủy quyền cho hệ điều hành bên dưới. Với rất nhiều loại phần cứng đồ họa khác nhau, việc khiến tất cả giao tiếp cùng một ngôn ngữ có tác động đáng kể bằng cách cung cấp cho các nhà phát triển phần mềm một nền tảng cấp cao hơn để phát triển đồ họa 3D.
Năm 1992, SGI đã lãnh đạo việc thành lập Hội đồng Đánh giá Kiến trúc OpenGL (OpenGL ARB), nhóm các công ty sẽ duy trì và mở rộng đặc tả OpenGL trong tương lai.
Microsoft phát hành Direct3D vào năm 1995, cuối cùng trở thành đối thủ cạnh tranh chính của OpenGL. Hơn 50 nhà phát triển trò chơi đã ký một bức thư ngỏ tới Microsoft, vào ngày 12 tháng 6 năm 1997, kêu gọi công ty tích cực hỗ trợ Open GL. Vào ngày 17 tháng 12 năm 1997, Microsoft và SGI đã khởi xướng dự án Fahrenheit, đây là một nỗ lực chung với mục tiêu hợp nhất các giao diện OpenGL và Direct3D. Năm 1998, Hewlett-Packard tham gia dự án. Ban đầu, nó cho thấy một số tiềm năng thống nhất các API đồ họa máy tính 3D tương tác, nhưng vì những hạn chế tài chính tại SGI, lý do chiến lược tại Microsoft và thiếu sự hỗ trợ chung của cộng đồng, nó đã bị bỏ rơi vào năm 1999.
Vào tháng 7 năm 2006, Hội đồng Đánh giá Kiến trúc OpenGL đã bỏ phiếu để chuyển quyền kiểm soát tiêu chuẩn API OpenGL cho Tập đoàn Khronos.
Vào tháng 6 năm 2018, Apple đã từ chối API OpenGL trên tất cả các nền tảng của họ (iOS, macOS và tvOS), khuyến khích mạnh mẽ các nhà phát triển sử dụng API độc quyền của họ
Lịch sử phiên bản
Phiên bản đầu tiên của OpenGL, phiên bản 1.0, được phát hành vào ngày 30 tháng 6 năm 1992 bởi Mark Segal và Kurt Akeley. Kể từ đó, OpenGL đôi khi được mở rộng bằng cách phát hành phiên bản đặc tả mới. Các bản phát hành như vậy xác định một bộ các tính năng cơ bản mà tất cả các card đồ họa phù hợp phải hỗ trợ và dựa vào đó các tiện ích mở rộng mới có thể dễ dàng được viết hơn. Mỗi phiên bản OpenGL mới có xu hướng kết hợp một số tiện ích mở rộng có sự hỗ trợ rộng rãi giữa các nhà cung cấp card đồ họa, mặc dù chi tiết của các tiện ích mở rộng đó có thể được thay đổi.
Phiên bản | Ngày phát hành | Tính năng, đặc điểm |
1.1 | Ngày 4 tháng 3 năm 1997 | Đối tượng kết cấu |
1.2 | Ngày 16 tháng 3 năm 1998 | Hoạ tiết 3D, BGRA và các định dạng pixel được đóng gói , giới thiệu tập hợp hình ảnh hữu ích cho các ứng dụng xử lý ảnh |
1.2.1 | Ngày 14 tháng 10 năm 1998 | Một khái niệm về phần mở rộng ARB |
1.3 | Ngày 14 tháng 8 năm 2001 | Đa biến , đa mẫu, nén kết cấu |
1,4 | Ngày 24 tháng 7 năm 2002 | Hoạ tiết sâu, GLSlang |
1,5 | 29 tháng 7 năm 2003 | Đối tượng đệm của Vertex (VBO), Truy vấn loại trừ |
2.0 | Ngày 7 tháng 9 năm 2004 | GLSL 1.1, MRT , Non Power of Two textures, Point Sprites, Stprint hai mặt |
2.1 | Ngày 2 tháng 7 năm 2006 | GLSL 1.2, Đối tượng bộ đệm pixel (PBO), sRGB Textures |
3.0 | Ngày 11 tháng 8 năm 2008 | GLSL 1.3, Mảng kết cấu, Kết xuất có điều kiện, Đối tượng bộ đệm khung (FBO) |
3,1 | Ngày 24 tháng 3 năm 2009 | GLSL 1.4, Instance, Object Buffer Object, thống nhất Buffer Object, Primitive restart |
3.2 | Ngày 3 tháng 8 năm 2009 | GLSL 1.5, Shader Geometry, lấy mẫu nhiều mẫu |
3,3 | Ngày 11 tháng 3 năm 2010 | GLSL 3.30, Backports càng nhiều chức năng càng tốt từ đặc tả OpenGL 4.0 |
4.0 | Ngày 11 tháng 3 năm 2010 | GLSL 4,00, Tessname trên GPU, đổ bóng với độ chính xác 64 bit |
4.1 | Ngày 26 tháng 7 năm 2010 | GLSL 4.10, Đầu ra gỡ lỗi thân thiện với nhà phát triển, khả năng tương thích với OpenGL ES 2.0 |
4.2 | Ngày 8 tháng 8 năm 2011 | GLSL 4.20, Trình tạo bóng với bộ đếm nguyên tử, vẽ phản hồi biến đổi theo bản năng, đóng gói đổ bóng, cải thiện hiệu suất |
4.3 | Ngày 6 tháng 8 năm 2012 | GLSL 4.30, Tính toán trình tạo bóng tận dụng song song GPU, đối tượng bộ đệm lưu trữ shader, nén kết cấu ETC2 / EAC chất lượng cao, tăng bảo mật bộ nhớ, mở rộng độ bền đa ứng dụng, tương thích với OpenGL ES 3.0 |
4,4 | Ngày 22 tháng 7 năm 2013 | GLSL 4.40, Điều khiển vị trí bộ đệm, Truy vấn không đồng bộ hiệu quả, Bố cục biến đổi Shader, Liên kết nhiều đối tượng hiệu quả, Chuyển đổi hợp lý các ứng dụng Direct3D, Mở rộng kết cấu không ràng buộc |
4,5 | Ngày 11 tháng 8 năm 2014 | GLSL 4.50, Truy cập trạng thái trực tiếp (DSA), API OpenGL ES 3.1 và tính tương thích của trình đổ bóng, tính năng mô phỏng DX11 |
4.6 | Ngày 31 tháng 7 năm 2017 | GLSL 4.60, Xử lý hình học và thực hiện đổ bóng hiệu quả hơn, nhiều thông tin hơn, không có ngữ cảnh lỗi, SPIR-V, lọc bất đẳng hướng |
Nguồn: biên tập thietbiketnoi.com
Xem thêm :
Tìm kiếm bởi gioogle
- opengl và directx
- opengl 2.0 là gì
- directx và opengl là gì