Tính năng làm trung tâm Tiêu đề Thiết kế
API OpenGL được lặp đi lặp lại phát triển và phát hành các phiên bản, nội bộ (đối với đặc điểm kỹ thuật API) có tên tính năng. Tính năng/phiên bản OpenGL mới nhất của là 4.5. Phiên bản trước là 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 2.0, 2.1, 3.0, 3.1, 3.2, 3.3, 4.0, 4.1, 4.2, 4.3 và 4.4. OpenGL sử dụng mô hình không dùng nữa để xóa các phần lỗi thời API của nó dẫn đến khả năng tương thích (với API không được chấp nhận) và sử dụng lõi (không sử dụng API) được thể hiện trong ngữ cảnh OpenGL nhắm mục tiêu . Trên hết, các khái niệm API mới được đề xuất là các tiện ích mở rộng (thường là nhà cung cấp cụ thể) có thể được tích hợp vào các phiên bản trong tương lai. Tất cả điều này dẫn đến nhiều biểu hiện cụ thể có thể có của của API OpenGL mà bạn có thể sử dụng trong chương trình của mình.
Một nhiệm vụ khó khăn là tuân thủ một bộ chức năng được đồng ý trong chương trình OpenGL 3.OpenGL của riêng bạn (ví dụ: OpenGL 3.2 Core nếu bạn muốn phát triển cho mỗi Windows, macOS và Linux được phát hành trong 4 năm qua).glbinding tạo điều kiện cho điều này bằng cách cung cấp tiêu đề cho mỗi tính năng bằng phương tiện tập hợp con được xác định/tạo ra của API OpenGL.
All-Tính năng OpenGL Headers
Nếu bạn không sử dụng tiêu đề cho mỗi tính năng chương trình OpenGL thể trông giống như này:
#include <glbinding/gl/gl.h>
// draw code
gl::glClear(gl::GL_COLOR_BUFFER_BIT | gl::GL_DEPTH_BUFFER_BIT);
gl::glUniform1i(u_numcubes, m_numcubes);
gl::glDrawElementsInstanced(gl::GL_TRIANGLES, 18, gl::GL_UNSIGNED_BYTE, 0, m_numcubes * m_numcubes);
Độc tính năng trên OpenGL Headers
Khi phát triển mã của bạn trên Windows với các trình điều khiển mới nhất được cài đặt, mã ở trên có khả năng biên dịch và chạy. Nhưng nếu bạn muốn chuyển sang hệ thống có hỗ trợ trình điều khiển ít trưởng thành hơn (ví dụ: macOS hoặc Linux sử dụng trình điều khiển nguồn mở), bạn có thể tự hỏi nếu glDrawElementsInstanced
khả dụng. Trong trường hợp này, chỉ cần chuyển sang tiêu đề cho mỗi tính năng của glbinding và chọn các tiêu đề cốt lõi OpenGL 3.2 (như bạn biết rằng tại nhất phiên bản này có sẵn trên tất cả các nền tảng mục tiêu):
#include <glbinding/gl32core/gl.h>
// draw code
gl32core::glClear(gl32core::GL_COLOR_BUFFER_BIT | gl32core::GL_DEPTH_BUFFER_BIT);
gl32core::glUniform1i(u_numcubes, m_numcubes);
gl32core::glDrawElementsInstanced(gl32core::GL_TRIANGLES, 18, gl32core::GL_UNSIGNED_BYTE, 0, m_numcubes * m_numcubes);
Nếu mã biên dịch hơn bạn có thể chắc chắn nó là OpenGL 3.2 Core tuân thủ. Việc sử dụng các chức năng chưa có hoặc dựa trên chức năng không được chấp nhận sẽ bị ngăn chặn.