GLboolean glAreTexturesResident ( GLsizei n,
GLuint * textures, GLboolean * flags );
Здесь первый параметр содержит количество текстур, о которых осуществляется запрос, массив textures содержит идентификаторы соответствующих текстур, а в массив flags для каждой из переданных текстур записывается признак того, содержится ли данная текстура в памяти ускорителя. Если все из переданных текстур содержатся в памяти ускорителя, то функция возвращает значение GLTRUE и в массив flags ничего не записывается. В противном случае возвращается значение GL_FALSE и в массив flags возвращается инфорация о наличие данных текстур в памяти ускорителя.
Общая схема работы с текстурами в OpenGL следующая:
1. Разрешить текстурирование при помощи glEnable (GL_TEXTURE_2D).
2. Для каждой текстуры необходимо получить уникальный идентификатор при помощи функции glGenTextures.
3. Выбрать текстуру при помощи glBindTexture.
4. Задать параметры текстуры и саму текстуру (glPixelStorei, glTexParame-teri, glTexImage2D и т. д.).
5. Перед выводом грани, использующей текстуру, сделать ее текущей при помощи glBindTexture.
По аналогии с тем, как координаты вершин и векторы нормали преобразуются моделирующей матрицей, координаты текстуры также подвергаются преобразованию при помощи матрицы текстурирования. По умолчанию она совпадает с единичной матрицей, но пользователь сам имеет возможность задать преобразования текстуры, например следующим образом:
glMatrixMode ( GL_TEXTURE ); glRotatef ( … ) ;
glMatrixMode ( GL_MODELVIEW );
Ниже приводится пример вращающегося текстурированного куба без использования пирамидального фильтрования. Для загрузки текстуры из файла применяется библиотека aux. Можно легко заметить погрешности (артефакты) текстурирования.
S
unsigned textureld = -1;
AUX_RGBImageRec * localTexture = NULL;
void drawBox ( GLfloat xl, GLfloat x2, GLfloat yl, GLfloat y2, GLfloat zl, GLfloat z2 )
{
glBindTexture ( GL_TEXTURE_2D, textureld );