ARB - официальное расширение, одобренное OpenGL Architectural Review Board.
ext - расширения от нескольких разработчиков OpenGI.
HP - расширение от Hewlett-Packard.
IBM - расширение от International Business Machines.
Intel - расширение от Intel.
NVidia - расширение от NVIDIA Corporation. mesa - расширение от Брьяна Пауля, разработчика свободно распространяемой альтернативы OpenGI для многих платформ. SGix - экспериментальное расширение от Silicon Graphics. sun - расширение от Sun Microsystems. win - расширение от Microsoft.
Успешные расширения часто продвигаются как EXT или ARB и добавляются к ядру OpenGI в следующих версиях библиотеки. Так когда-то Silicon Graphics предложила расширение EXT_point_parameters, позволяющее автоматически изменять яркость точки в зависимости от наблюдателя. Таким образом, облегчалось отображение различных частиц (капель воды) и источников света (огни приземления в авиасимуляторах). Эффективность расширения была высоко оценена (пример использования расширения можно видеть в популярной игре прошлого Quake 2 от Id Software), и его стали продвигать как ARB_point_parameters и в последней версии OpenGL добавили к ядру.
Расширения можно разделить на два типа. В первом случае уже существующая функция расширяется новым значением аргумента. Поддержку таких расширений можно определить, посмотрев на наличие в заголовочном файле gl.h примерно следующих строк:
/* Extensions */
#define GL_EXT_vertex_array 1 #define GL_WIN_swap_hint 1 #define GL_EXT_bgra 1 #define GL_EXT_paletted_texture 1 #define GL_EXT_clip_disable 1
Если расширения поддерживаются, то их можно использовать напрямую следующим образом:
#ifdef GL_EXT_bgra glDrawPixels
(width,height,GL_BGRA_EXT,GL_DNSIGNED_BYTE, pixels); #endi f
В противном случае компилятор выдаст сообщение об ошибке, ЧТО GL_BGRA_EXT не определено.
Второй тип расширений - добавление новых функций. Далее будет показано по шагам, как использовать функциональные расширения.
Первый шаг - объявление нового типа: указателя на функцию, реализующую расширение.
#ifdef _WIN32
typedef void(APIENTRY* PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname,GLfloat param);
typedef void(APIENTRY* PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat* params);
#endif
Второй шаг - объявление переменных этого типа.
#ifdef _WIN32
PFNGLPOINTPARAMETERFEXTPROC glPointParameterfEXT ; PFNGLPOINTPARAMETERFVEXTPROC glPointParameterfvEXT; #endi f
Проверьте имеющийся y вас файл gl.h, так как он уже может иметь подобные объявления.
Третий шаг - получение адреса функции расширения. Адрес одной и той же функции расширения для различных контекстов отображения может быть различным.
gl PointParameterfEXT=(PFNGLPOINTPARAMETERFEXTPROC) wglGetProcAddress("glPointParameterfEXT"); glPointParameterfvEXT=(PFNGLPOINTPARAMETERFVEXTPROC) wglGetProcAddress("glPointParameterfvEXT"); По следующей ссылке можно скачать последнюю версию файла glext.h, содержащего все необходимые объявления для последних версий OpenGL и его расширений:
http://oss.sgi.com/projects/ogl-sample/sdk.html.