Steps3D - Tutorials - OpenGL extensions
Стандартних середовищ OpenGL для підтримки цих нових можливостей, на жаль, не достатньо, щоб нові апаратні можливості сучасних графічних прискорювачів швидко ставали доступними для програмістів (розробників).
Кожне розширення визначається своїм назвою (рядком, наприклад, GL_EXT_fog_coord). Назва починається з префікса (GL, WGL, GLX), далі йде тип розширення (ARG, EXT. NV, ATI та ін), після цього йде власне сама назва розширення.
Така схема дозволяє виробникам графічних прискорювачів самим розробляти та вносити у свої продукти нові розширення, не побоюючись конфліктів із вже існуючими розширеннями інших виробників.
Тим не менш, існує структура, звана OpenGL Architecture Review Board, яка веде облік всіх існуючих розширень і займається їх стандартизацією.
Нижче наведено таблицю стандартних типів розширень.
| ARB | Розширення введені OpenGL Architecture Review Board |
| EXT | Розширення спільно введені різними виробниками |
| 3DFX | Розширення, введені компанією 3DFX |
| APPLE | Розширення, введені компанією Apple |
| ATI | Розширення, введені компанією ATI |
| HP | Розширення, введені компанією Hewlett-Packard |
| IBM | Розширення, введені компанією Internation Buisness Machines |
| KTX | Розширення, введені компанією Kinetix |
| INTEL | Розширення, введені компанією Intel |
| NV | Розширення, введені компанією NVIDIA |
| MESA | Розширення, введені в реалізація Mesa |
| SGI | Розширення, введені компанією Silicon Graphics |
| SGIX | Розширення, введені компанією Silicon Graphics |
| SUN | Розширення, введені компанією Sun Microsystems |
| WIN | Розширення, введені компанією Microsoft |
Для отримання списку всіх розширень використовується функція glGetString із параметром GL_EXTENSIONS. В результаті повертається покажчик на рядок , що містить списку всіх розширень OpenGL, що підтримуються в даному контексті, розділених пробілами.
Зверніть увагу, що для отримання цього рядка спочатку потрібно проініціалізувати OpenGL, інакше ви отримаєте NULL.
Нижче наводиться функція, що друкує список всіх розширень (повний її вихідний текст можна взяти тут).
Для того, щоб перевірити чи підтримується дане розширення, необхідно перевірити, чи міститься назва даного розширення у списку всіх розширень. Причому однієї перевірки strstr може виявитися недостатньо, краще переконатися, що знайдений рядок входить повністю, а чи не як початку іншого назви (тобто. у списку розширень воно закінчується пробілом чи '\0').
Нижче наводиться проста функція, що перевіряє підтримується лідане розширення.
Для перевірки підтримки розширення також можна використовувати функцію glutExtensionSupported з бібліотеки glut.
Ця функція повертає ненульове значення, якщо це розширення підтримується.
Однак при цьому слід мати на увазі, що на момент її виклику активне вікно має існувати і бути валідним. З іншого боку, ця функція підтримує лише розширення самого OpenGL, тобто. системні розширення (наприклад GLX) цією функцією неперевіряються.
Як мовилося раніше, нові розширення можуть запроваджувати як нові функції, і нові константи. Список констант, що вводяться, і інтерфейсів функцій можна знайти в постійно оновлюваних файлах glext.h wglext.h (для платформи Windows). Найсвіжіші версії цих файлів можна взяти тут.
Зручно ввести вказівник на функцію із заданим інтерфейсом і в нього заносити отриманої функцією wglGetProcAddress значення. Тоді для виклику нових функцій можна використовувати той самий формат, як і для стандартних функцій OpenGL. Нижче наводиться простий приклад.
Тут можна взяти утиліту з сайту DelphiGL, що показує список всіх як відомих розширень, так і список підтримуваних розширень для даного виду прискорювача і драйвера. Також ця утиліта на кліку на назву розширення викачує повний опис даного розширення.