Khả năng tương thích OpenGL, quy ước đặt tên và ARB so với EXT


14

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_objectphầ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 - ARBEXT .

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?

Câu trả lời:


9

Câu hỏi 1 - Thông thường phiên bản EXT xuất hiện đầu tiên dưới dạng hợp tác giữa hai hoặc nhiều nhà cung cấp. Các tiện ích mở rộng ARB yêu cầu thảo luận nhiều hơn giữa các thành viên bỏ phiếu của Khronos và có thể có các thay đổi từ phiên bản EXT trước khi được phê duyệt. Xem tiện ích mở rộng GL_ARB_direct_state_access có nhiều thay đổi so với GL_EXT_direct_state_access.

Câu hỏi 2 - Phần Sự cố của phần mở rộng GL_ARB_framebuffer_object nêu rõ lý do tại sao các hàm không có hậu tố ARB:

(8) Tại sao các mã thông báo và điểm nhập mới trong tiện ích mở rộng này không có hậu tố như các tiện ích mở rộng ARB khác?

   RESOLVED: Unlike most ARB extensions, this is a strict subset of
   functionality already approved in OpenGL 3.0. This extension
   exists only to support that functionality on older hardware that
   cannot implement a full OpenGL 3.0 driver. Since there are no
   possible behavior changes between the ARB extension and core
   features, source code compatibility is improved by not using
   suffixes on the extension.

Câu hỏi 3 - Nếu bạn muốn sử dụng các đối tượng bộ đệm khung trên bối cảnh trong đó phiên bản GL nhỏ hơn 3.0, bạn cần xem chuỗi mở rộng:

  1. Nếu GL_ARB_framebuffer_object được hỗ trợ, hãy sử dụng các hàm không phải ARB.
  2. Nếu chỉ GL_EXT_framebuffer_object được hỗ trợ, hãy sử dụng các hàm EXT.
  3. Nếu không có tiện ích mở rộng nào được hỗ trợ, bạn cần quay lại kết xuất màn hình ngoài hệ điều hành như pbuffers.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.