Функция glSelectBuffer
Функция glSelectBuffer устанавливает буфер для значений режима выбора.
Синтаксис
void WINAPI glSelectBuffer(
GLsizei size,
GLuint *buffer
);
Параметры
-
size
-
Размер буфера.
-
Буфера
-
Возвращает данные выбора.
Возвращаемое значение
Эта функция не возвращает значение.
Коды ошибок
Следующие коды ошибок могут быть получены функцией glGetError .
Имя | Значение |
---|---|
|
размер был отрицательным. |
|
Функция была вызвана, когда режим отрисовки был GL_SELECT. |
|
Функция была вызвана между вызовом 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 [только классические приложения] |
Заголовок |
|
Библиотека |
|
DLL |
|