Tại sao tất cả các lệnh gọi hàm OpenGL đều có tiền tố với Mã q hung trong mã nguồn Doom 3?


42

Tại sao mọi cuộc gọi OpenGL có tiền tố "q" trong mã nguồn Doom 3? Chúng có phải là các chức năng tùy chỉnh hoặc một thư viện khác không, và nếu vậy, tại sao lại sử dụng chức năng đó trên OpenGL? Bất kỳ tìm kiếm nào của Google đều xuất hiện với mô-đun QGL OpenGL mà tôi cho rằng không có gì để làm với nó.

Câu trả lời:


62

Để tham khảo - qgl.h của Doom3 .

OpenGL là một API nhỏ lẻ. Bạn phải thường xuyên làm việc với các con trỏ hàm vì việc triển khai tiêu chuẩn thiếu chức năng mới hoặc vì bạn muốn làm việc với các tiện ích mở rộng. Ví dụ: nếu bạn muốn gọi glCreateShader, nhưng HĐH mà bạn đang phát triển không giao hàng với các tiêu đề GL đủ mới, bạn phải sử dụng glGetProcAddress("CreateShader")để tải chức năng ra khỏi trình điều khiển của người dùng. Và sau đó bạn phải lưu trữ con trỏ hàm đó ở đâu đó.

Ngay cả khi môi trường phát triển của bạn có một chức năng cụ thể, máy của người dùng có thể không. Và sau đó, một chức năng nhất định có thể có 2-3 dạng (tiện ích mở rộng nhà cung cấp, tiện ích mở rộng ARB, chức năng cốt lõi) và do đó bạn có thể phải tìm kiếm một chức năng dưới nhiều tên khác nhau.

Nhiều thư viện "trình tải" GL (như GLEW ) cố gắng tuân theo các quy ước GL. Họ tạo ra các hàm "giả" với gl-prefix thông thường và cố gắng làm cho mã của bạn hoạt động một cách kỳ diệu trên bất kỳ HĐH hoặc trình điều khiển nào hỗ trợ các tính năng cần thiết. Về cơ bản, thay vì glFootrở thành một chức năng thực tế, nó chỉ là một con trỏ toàn cầu chức năng và thư viện bộ nạp (trong quá trình khởi hoặc sử dụng đầu tiên) tìm kiếm FooEXT, FooARBFoocho đến khi nó tìm thấy một thực hiện và sau đó chuyển nhượng đó để con trỏ toàn cầu. Mã máy khách trông giống như chỉ gọi một hàm thông thường nhưng tất cả đều được giải quyết một cách kỳ diệu khi chạy trong quá trình khởi tạo theo cách xử lý tất cả các nền tảng và trình điều khiển khác nhau ngoài kia.

Các thư viện khác đặt các hàm trong không gian tên hoặc thay đổi một chút so với định mức GL. id viết loader riêng của họ, hoặc vì họ không thích những người mà tồn tại hay - nhiều khả năng - Quake chỉ có trước bất kỳ thư viện khác mà id có thể đã sử dụng (các qnăm qgllà viết tắt khả năng cho Quake, đó là trò chơi id Tech đầu tiên sử dụng GL).

Thông số kỹ thuật GL được viết với khả năng này. Thông số kỹ thuật được viết không có tiền tố; đó là việc triển khai OpenGL quyết định sử dụng tiền tố nào ( gldĩ nhiên là tiền tố chung). Các thư viện trình nạp đặt các hàm trong không gian tên hoặc sử dụng tiền tố của riêng chúng là hoàn toàn hợp lệ.

Doom 3, dựa trên công cụ Quake, hoàn toàn điển hình và hợp lý trong việc sử dụng thư viện trình tải để xử lý các điểm kỳ lạ của GL trên nhiều nền tảng và trong việc chọn sử dụng qgltiền tố.


+1 và danh tiếng để phát hiện tôi đã viết idxấu (bạn hoàn toàn đúng về cách viết hoa), mặc dù en.wikipedia.org/wiki/Id_Tech vẫn được viết bằng khoảng trắng, trong tất cả các nguồn tôi có thể tìm thấy.
vaxquis
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.