Steps3D - Уроци - OpenGL разширения
За съжаление, стандартните OpenGL инструменти за поддръжка на тези нови функции не са достатъчни, за да могат новите хардуерни възможности на съвременните графични ускорители бързо да станат достъпни за програмистите (разработчиците).
Всяко разширение се определя от неговото име (низ, напр. GL_EXT_fog_coord). Името започва с префикс (GL, WGL, GLX), след това идва типът на разширението (ARG, EXT. NV, ATI и т.н.), след което идва името на самото разширение.
Тази схема позволява на производителите на графични ускорители да разработват и въвеждат нови разширения към своите продукти, без да се страхуват от конфликти със съществуващите разширения от други производители.
Има обаче структура, наречена OpenGL Architecture Review Board, която следи всички съществуващи разширения и ги стандартизира.
По-долу е дадена таблица със стандартни типове разширения.
ARB | Разширения, въведени от OpenGL Architecture Review Board |
ВЪНШ | Разширения, представени съвместно от различни производители |
3DFX | Разширения, въведени от 3DFX |
ЯБЪЛКА | Разширения, въведени от Apple |
ATI | Разширения, въведени от ATI |
HP | Разширения, въведени от Hewlett-Packard |
IBM | Разширения, въведени от International Business Machines |
KTX | Разширения, въведени от Kinetix |
INTEL | Разширения, въведени от Intel |
NV | Разширения, въведени от NVIDIA |
MESA | Разширения, въведени в изпълнението на Mesa |
SGI | Разширения, въведени от Silicon Graphics |
SGIX | Разширения, въведени от Silicon Graphics |
СЛЪНЦЕ | Разширения, въведени от Sun Microsystems |
ПЕЧЕЛЯ | Разширения, въведени от Microsoft |
За да получите списък с всички разширения, използвайте функцията glGetString с параметъра GL_EXTENSIONS. Това връща указател към низ, съдържащ списък на всички OpenGL разширения, поддържани в дадения контекст, разделени с интервали.
Имайте предвид, че за да получите този низ, първо трябва да инициализирате OpenGL, в противен случай ще получите NULL.
По-долу има функция, която отпечатва списък с всички разширения (пълният източник може да бъде намерен тук).
За да проверите дали дадено разширение се поддържа, е необходимо да проверите дали името на даденото разширение е включено в списъка с всички разширения. Освен това една проверка на strstr може да не е достатъчна, по-добре е да се уверите, че намереният низ е включен изцяло, а не като начало на друго име (тоест в списъка с разширения той завършва с интервал или '\0').
Следното е проста функция, която проверява дали дадено разширение се поддържа.
Можете също да използвате функцията glutExtensionSupported от библиотеката на glut, за да проверите за поддръжка на разширение.
Тази функция връща ненулева стойност, ако даденото разширение се поддържа.
Все пак трябва да се има предвид, че към момента на извикването активният прозорец трябва да съществува и да е валиден. Освен това тази функция поддържа само разширения на самия OpenGL, т.е. системните разширения (напр. GLX) не използват тази функциясе проверяват.
Както вече споменахме, новите разширения могат да въведат както нови функции, така и нови константи. Списък с входни константи и функционални интерфейси може да бъде намерен в постоянно актуализираните файлове glext.h wglext.h (за платформата Windows). Най-новите версии на тези файлове можете да намерите тук.
Удобно е незабавно да въведете указател към функция с даден интерфейс и да въведете стойността, получена от функцията wglGetProcAddress в нея. След това можете да използвате същия формат за извикване на нови функции, както бихте направили за стандартните OpenGL функции. По-долу е даден прост пример.
Тук можете да вземете помощна програма от сайта на DelphiGL, показваща списък с всички известни разширения, както и списък с поддържани разширения за даден видеоускорител и драйвер. Освен това тази помощна програма, като щракнете върху името на разширението, изтегля пълното описание на това разширение.