Таги: графические ускорители, мультитекстурирование, текстуры
Сейчас поддержка мультитекстурирования входит в стандарт OpenGL (начиная с версии 1.2.1), и только под Windows (так как Microsoft по-прежнему поддерживает лишь OpenGL версии 1.1) приходится работать с мультитекстурированием через соответствующее расширение. Для проверки поддержки данного расширения можно использовать функцию isExtensionSupported, рассмотренную в главе 1. Если isExtensionSupported ( «GL_ARB_multitexture» ) возвращает значение true, то данное расширение [...]
Таги: ARB_multitexture, визуальные эффекты, наложение текстур
Для получения ряда визуальных эффектов (карты освещенности, туман, микрофактурные текстуры и т. п.) часто возникает необходимость наложения на грань не одной, а сразу нескольких текстур, причем зачастую с разными законами наложения. К сожалению, стандартный OpenGL позволяет накладывать только одну текстуру за раз (проход), что приводит к необходимости реализовывать для вывода граней несколько проходов. При этом [...]
Таги: assertExtensionsSupported, lsExtensionSupported, mitExtensions
Функция lsExtensionSupported уже рассматривалась нами, она просто проверяет, поддерживается ли данное расширение (при этом проверяется поддержка как общих расширений, так и расширений, специфичных для конкретной платформы). Функция assertExtensionsSupported позволяет проверить поддержку сразу нескольких расширений. На вход ей передается строка с именами расширений (разделенных пробелами или запятыми). Если хотя бы одно расширение из переданного списка не [...]
Таги: libExt.h, Библиотека, фрагмент
Фрагмент заголовочного файла libExt.h библиотеки, содержащий описание вводимых этим расширением функций (функции, вводимые различными расширениями, здесь намеренно не приводятся из-за их большого количества).
#ifdef_WIN32# include #else¦define GLX_GLXEXT_LEGACY#endif#mclude#mclude#mclude» . . /glext. h»#ifdef_WIN32#mclude» . . /wglext. h»#else#mclude#mclude#endifbool lsExtensionSupported ( const char * ext );void mitExt ens ions();void printfInfo();void assertExtensionsSupported ( const char * extList );
Для удобства [...]
Таги: _wiN32, компиляция, кроссплатформенный код
Для удобства дальнейшей работы с расширениями все необходимые операции можно записать в небольшую библиотеку, причем желательно инкапсулировать всю платформозависимую часть. Для формирования кроссплатформенного кода изменяющуюся часть (получение адреса функции) лучше вынести в отдельную функцию: static void * getProcAddress ( const char * name ){#ifdef _WIN32return wglGetProcAddress ( name );#elsereturn (void *)glXGetProcAddressARB ((const GLubyte *)name ); [...]
Таги: const, giXGetProcAddress, код
Под Linux также существует функция, возвращающая список всех поддерживаемых GLX-расширений. Однако она не является расширением и непосредственно доступна пользователям. Вот пример ее описания: const char * glXQueryExtensionsString ( Display * dpy, int screen ); После того как при помощи этой функции был получен список всех GLX-расширений, достаточно рассмотренным ранее способом проверить наличие в этой [...]
Таги: device, isExtensionSupported, указатель
Поскольку эти расширения специфичны только для Windows, то проверка их поддержки непосредственно введенной ранее функцией isExtensionSupported не возможна, поскольку используемая там строка не содержит расширений платформы Windows. Поэтому нужно получить строку со всеми поддерживаемыми расширениями, специфичными для Windows. Для этого сначала следует стандартным образом проверить поддержку расширения WGLARBextensions, и в случае его поддержки ПОЛУЧИТЬ указатель [...]