Функция glSelectBuffer

Функция glSelectBuffer устанавливает буфер для значений режима выбора.

Синтаксис

void WINAPI glSelectBuffer(
   GLsizei size,
   GLuint  *buffer
);

Параметры

size

Размер буфера.

Буфера

Возвращает данные выбора.

Возвращаемое значение

Эта функция не возвращает значение.

Коды ошибок

Следующие коды ошибок могут быть получены функцией glGetError .

Имя Значение
GL_INVALID_VALUE
размер был отрицательным.
GL_INVALID_OPERATION
Функция была вызвана, когда режим отрисовки был GL_SELECT.
GL_INVALID_OPERATION
Функция была вызвана между вызовом glBegin и соответствующим вызовом glEnd.

Комментарии

Функция glSelectBuffer имеет два параметра: buffer — это указатель на массив целых чисел без знака, а size — это размер массива. Параметр buffer возвращает значения из стека имен (см. glInitNames, glLoadName, glPushName), если режим отрисовки GL_SELECT (см . glRenderMode). Функция glSelectBuffer должна быть выдана до включения режима выбора и не должна выдаваться, пока режим отрисовки GL_SELECT.

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

В режиме выбора фрагменты пикселей не создаются из растеризации. Вместо этого, если примитив пересекается с объемом клипа, определенным в области просмотра, и определяемыми пользователем плоскостями отсечения, этот примитив вызывает попадание в выделение. (При использовании многоугольников попадание не происходит, если многоугольник отбирается.) При изменении стека имен или при вызове glRenderMode запись попадания копируется в буфер , если с момента последнего такого события произошли какие-либо попадания (изменение стека имен или вызов glRenderMode ). Запись попадания состоит из числа имен в стеке имен на момент события; за которым следует минимальное и максимальное значения глубины всех вершин, которые достигли с момента предыдущего события; за которым следует содержимое стека имен, а затем — нижнее имя.

Возвращаемые значения глубины сопоставляются таким образом, что наибольшее целочисленное значение без знака соответствует глубине координат окна 1,0, а ноль — глубине координат окна 0,0.

Внутренний индекс в буфере сбрасывается до нуля при каждом входе в режим выбора. При каждом копировании записи попадания в буфер индекс увеличивается, чтобы указать на ячейку после конца блока имен, то есть на следующую доступную ячейку. Если запись попадания превышает количество оставшихся расположений в буфере, копируется столько данных, сколько может поместиться, и устанавливается флаг переполнения. Если стек имен пуст при копировании записи попадания, эта запись состоит из нуля, за которой следуют значения минимальной и максимальной глубины.

Режим выбора завершается путем вызова glRenderMode с аргументом, отличным от GL_SELECT. При каждом вызове glRenderMode в режиме отрисовки GL_SELECT он возвращает количество записей попаданий, скопированных в буфер, сбрасывает флаг переполнения и указатель буфера выбора и инициализирует стек имен пустым. Если бит переполнения был задан при вызове glRenderMode , возвращается отрицательное число записей попаданий.

Содержимое буфера не определено, пока glRenderMode не будет вызван с аргументом, отличным от GL_SELECT.

Примитивы glBegin/glEnd и вызовы glRasterPos могут привести к попаданиям.

Следующая функция извлекает сведения, связанные с glSelectBuffer:

glGet с аргументом GL_NAME_STACK_DEPTH

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Gl.h
Библиотека
Opengl32.lib
DLL
Opengl32.dll

См. также раздел

glBegin

glEnd

glFeedbackBuffer

glInitNames

glLoadName

glPushName

glRenderMode