|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
glSelectBuffer
The glSelectBuffer function establishes a buffer for selection mode values.
void glSelectBuffer( GLsizei size, GLuint *buffer );
Parameters
size
Specifies the size of buffer.
buffer
Returns the selection data.
Remarks
The glSelectBuffer function has two arguments: buffer is a pointer to an array of unsigned integers, and size indicates the size of the array. buffer returns values from the name stack (see glInitNames, glLoadName, glPushName) when the rendering mode is GL_SELECT (see glRenderMode). The glSelectBuffer function must be issued before selection mode is enabled, and it must not be issued while the rendering mode is GL_SELECT.
Selection is used by a programmer to determine which primitives are drawn into some region of a window. The region is defined by the current modelview and perspective matrices. In selection mode, no pixel fragments are produced from rasterization. Instead, if a primitive intersects the clipping volume defined by the viewing frustum and the user-defined clipping planes, this primitive causes a selection hit. (With polygons, no hit occurs if the polygon is culled.) When a change is made to the name stack, or when glRenderMode is called, a hit record is copied to buffer if any hits have occurred since the last such event (name stack change or glRenderMode call). The hit record consists of the number of names in the name stack at the time of the event, followed by the minimum and maximum depth values of all vertexes that hit since the previous event, followed by the name stack contents, bottom name first.
Returned depth values are mapped such that the largest unsigned integer value corresponds to window coordinate depth 1.0, and zero corresponds to window coordinate depth 0.0. An internal index into buffer is reset to zero whenever selection mode is entered. Each time a hit record is copied into buffer, the index is incremented to point to the cell just past the end of the block of names - that is, to the next available cell. If the hit record is larger than the number of remaining locations in buffer, as much data as can fit is copied, and the overflow flag is set. If the name stack is empty when a hit record is copied, that record consists of zero followed by the minimum and maximum depth values.
Selection mode is exited by calling glRenderMode with an argument other than GL_SELECT. Whenever glRenderMode is called while the render mode is GL_SELECT, it returns the number of hit records copied to buffer, resets the overflow flag and the selection buffer pointer, and initializes the name stack to be empty. If the overflow bit was set when glRenderMode was called, a negative hit record count is returned. The contents of buffer are undefined until glRenderMode is called with an argument other than GL_SELECT.
The glBegin/glEnd primitives and calls to glRasterPos can result in hits. The following function retrieves information related to the glSelectBuffer function: glGet with argument GL_NAME_STACK_DEPTH
Errors
GL_INVALID_VALUE is generated if size is negative. GL_INVALID_OPERATION is generated if glSelectBuffer is called while the render mode is GL_SELECT, or if glRenderMode is called with argument GL_SELECT before glSelectBuffer is called at least once. GL_INVALID_OPERATION is generated if glSelectBuffer is called between a call to glBegin and the corresponding call to glEnd.
See Also
glFeedbackBuffer, glInitNames, glLoadName, glPushName, glRenderMode
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
glSelectBuffer
Функция glSelectBuffer устанавливает буфер для величин способа выбора.
пустота glSelectBuffer( размер GLsizei, GLuint *буфер );
Параметры
размер
Определяет размер буфера.
буфер
Возвращает данные выбора.
Замечания
Функция glSelectBuffer имеет два аргумента: буфер является указателем в массив без знака целых, и размер указывает размер array. буферных величин возврата из стека имени (смотри glInitNames, glLoadName, glPushName) когда предоставляющий режим - GL_SELECT (смотри glRenderMode). Функция glSelectBuffer должна быть выпущена прежде, чем режим выбора будет приспособлен, и это не должно выпускано тогда как предоставляющий режим - GL_SELECT.
Выбор использован программистом, чтобы определять, что какие примитивы проведены в некоторую область окна. Область определена текущими modelview и перспективными матрицами. В режиме выбора, никакие фрагменты пикселя не произведены из растеризации. Взамен, если простые пересекать вырезать объем определялся бы просмотром frustum и определенный пользователь, вырезать планы, этот примитив вызывает нажатый выбор. (Со многоугольниками, никакой удар не происходит если многоугольник почерпнут.) Когда изменение сделано в стек имени, или когда 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
Ошибки
GL_INVALID_VALUE сгенерирован если размер отрицательный. GL_INVALID_OPERATION сгенерирован если glSelectBuffer назван тогда как предоставлять режим - GL_SELECT, или если glRenderMode назван аргументом GL_SELECT прежде, чем glSelectBuffer будет назваться по крайней мере, один раз. GL_INVALID_OPERATION сгенерирован если glSelectBuffer назван между вызовом на glBegin и соответствующий вызов на glEnd.
Смотри Также
glFeedbackBuffer, glInitNames, glLoadName, glPushName, glRenderMode
| |
|
|
| |