Главная -
Статьи -
Проекты -
Ссылки -
Скачать -
Из гельминтов -
Юмор, приколы -
Почитать -
Обо мне -
Мысли -
Гостевая -

Работа с расширениями OpenGL в Linux

Для работы с OpenGL под Linux вам понядобятся библиотеки libGL и libGLU, расположенные обычно в каталоге /usr/lib.

Если вы хотите использовать glut, то вам придется собрать его из исходных файлов.

Необходимы следующие заголовочные файлы - <GL/gl.h>, <GL/glx.h>, <GL/glu.h> и <GL/glext.h>.

На данный момент версия OpenGL, поставляемая с Linux, как минимум 1.2 (в отличии от Windows, где все до сих пор работают с версией 1.1).

В эту версию уже включена поддержка мультитекстурирования (т.е. данное расширение уже стало частью стандарта OpenGL). Единственное отличие заключается в том, что функция glActiveTextureARB теперь называется glActiveTexture, что впрочем очень легко исправить для однообразия с кодом для Windows:

#define	glActiveTextureARB	glActiveTexture

Проверка поддержки расширения осуществляется под Linux точно также, как и под Windows, поэтому функция isExtensionSupported из предыдущих статей может непосредственно использоваться.

Функция для получения адреса вводимых расширением функция выглядит несколько иначе:

void * glXGetProcAddressARB ( const GLubyte * name );

Для получения кроссплатформенного кода легко вынести изменяющуюся часть в отдельную функцию.

static void  * getProcAddress ( const char * name )
{
#ifdef	_WIN32
    return wglGetProcAddress ( name );
#else
    return (void *)glXGetProcAddressARB ( (const GLubyte *)name );
#endif
}

Прототипы всех вводимых расширениями функций хотя и содержатся в файле glext.h, но скрыты условной компиляцией. Чтобы включить эти прототипы следует до включения файлов gl.h, glx.h и glext.h определить GL_GLEXT_PROTOTYPES. Однако если вы хотите ввести указатели на функции, то определять GL_GLEXT_PROTOTYPES не следует (иначе он определит их как функции, а не как указатели на функции, что может привети к ошибке на этапе выполнения).

В остальном работа с расширениями проходит точно так же, как и под M$ Windows.

Обратите внимание, что библиотека glaux, часто используемая для загрузки текстур из bmp-файлов под Linux обычно не доступна, поэтому следует пользоваться другими средствами для загрузки текстур из файлов.

Автором реализована небольшая библиотека libTexture, позволяющая загружать текстуры из bmp и tga файлов самых различных форматов (включая 32-битовый формат bmp файлов).

Данная библиотека является полностью кроссплатформенной и легко может использоваться как под Windows, так и под Linux.

Удобно спрятать все межплатформенные отличия в небольшой библиотеке, что позволит остальному коду не зависеть от конкретной платформы. Написанная автором библиотека libExt является примером подобной библиотеки, причем она отличается крайне небольшим размером.

Примеры к последним нескольким статьям рассчитаны на компиляцую и выполнение как в Windows, так и в Linux. Для сборки под Linux следует использовать Makefile.

Обратите внимание, что для компиляции под Linux, вам может понадобиться изменить отдельные пути, задаваемые в Makefile.

Полная информация по работе с OpenGL под Linux можно найти в статье OpenGL® Application Binary Interface for Linux.

Более полное описание работы с различными расширенями OpenGL в Linux, включая многочисленные примеры, можно найти в недавно вышедшей книге "Расширения OpenGL".

Все примеры в этой книге компилируются как под Windoze, так и под Linux.


Copyright © 2003-2004 Алексей В. Боресков

Используются технологии uCoz