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.


⇐ вернуться назад | | далее ⇒