Tôi nghĩ rằng tôi đã hình thành một sự hiểu biết chung về cách các quy ước và phần mở rộng đặt tên OpenGL hoạt động, cho đến khi tôi tình cờ phát hiện ra một trường hợp làm tôi bối rối.
Đây là sự hiểu biết của tôi cho đến nay:
Không có hậu tố - ví dụ glGenBuffers()
. Chức năng này là một phần của hồ sơ cốt lõi. Các trang wiki nói với tôi rằng điều này đã được bổ sung vào hồ sơ cá nhân cốt lõi bắt đầu từ phiên bản 1.5.
ARB - ví dụ glGenBuffersARB()
. Chức năng này là một phần của GL_ARB_vertex_buffer_object
phần mở rộng được tiêu chuẩn hóa . Thông số kỹ thuật của tiện ích mở rộng này tuyên bố rõ ràng GenBuffersARB()
trong phần "Các thủ tục và chức năng mới". Phần "Phụ thuộc" cho tôi biết rằng tôi có khả năng có thể truy cập phần này từ ngữ cảnh 1.4+, nếu phần cứng hỗ trợ tiện ích mở rộng.
EXT - Đây là các tiện ích mở rộng và chức năng dành riêng cho nhà cung cấp mà chỉ một số nhà cung cấp có thể hỗ trợ. Đối tượng bộ đệm Vertex dường như không có phần mở rộng EXT trong sổ đăng ký.
Đây là nơi hiểu biết của tôi bị phá vỡ:
glGenFramebuffers
, như wiki cho thấy, đã được thêm vào lõi trong 3.0.
Bây giờ tôi muốn truy cập các tính năng bộ đệm khung ở phiên bản cấu hình lõi thấp hơn 3.0. Vì vậy, tôi muốn sử dụng nó như một phần mở rộng. Sổ đăng ký đặc tả cho tôi biết rằng có hai phần mở rộng có sẵn - ARB và EXT .
Câu hỏi 1 - Nếu một phần mở rộng ARB tồn tại, tại sao một phần mở rộng EXT tồn tại? Không phải bạn luôn luôn chọn một tiêu chuẩn hơn một nhà cung cấp cụ thể sao?
Nhìn vào thông số ARB trong phần "Các thủ tục và chức năng mới" cho tôi biết rằng tiện ích mở rộng xác định GenRenderbuffers()
chức năng. Không có hậu tố ARB lần này. GLEW hoàn toàn không có nguyên mẫu chức năng glGenRenderbuffersARB()
. Kỳ dị.
Thông số EXT tuy nhiên có một GenRenderbuffersEXT()
chức năng trong phần chức năng mới và GLEW cũng có glGenRenderbuffersEXT()
.
Câu hỏi 2 - Tại sao không có hậu tố ARB nếu có hậu tố EXT? Làm thế nào điều này làm việc cho ARB, cho rằng tên của chức năng ARB và chức năng cốt lõi là như nhau?
Câu hỏi 3 - Cuối cùng tôi muốn các tính năng của Framebuffer từ cấu hình 1.4. Tôi nên sử dụng tiện ích mở rộng nào và thiết lập chức năng nào để tôi có được phạm vi tương thích phần cứng tối đa?