Функция glFeedbackBuffer
Функция glFeedbackBuffer управляет режимом обратной связи.
Синтаксис
void WINAPI glFeedbackBuffer(
GLsizei size,
GLenum type,
GLfloat *buffer
);
Параметры
-
size
-
Максимальное количество значений, которые можно записать в буфер.
-
type
-
Символьная константа, описывающая сведения, которые будут возвращены для каждой вершины. Принимаются следующие символьные константы: GL_2D, GL_3D, GL_3D_COLOR, GL_3D_COLOR_TEXTURE и GL_4D_COLOR_TEXTURE.
-
Буфера
-
Возвращает данные обратной связи.
Возвращаемое значение
Эта функция не возвращает значение.
Коды ошибок
Следующие коды ошибок могут быть получены функцией glGetError .
Имя | Значение |
---|---|
|
Тип не является допустимым значением. |
|
размер был отрицательным. |
|
glFeedbackBuffer был вызван, когда режим отрисовки был GL_FEEDBACK, или glRenderMode был вызван с аргументом GL_FEEDBACK до вызова glFeedbackBuffer по крайней мере один раз. |
|
Функция была вызвана между вызовом glBegin и соответствующим вызовом glEnd. |
Комментарии
Функция glFeedbackBuffer управляет обратной связью. Обратная связь, как и выбор, является режимом OpenGL. Режим выбирается путем вызова glRenderMode с GL_FEEDBACK. Если OpenGL находится в режиме обратной связи, то при растеризации пиксели не создаются. Вместо этого сведения о примитивах, которые были бы растеризованы, передаются в приложение с помощью OpenGL.
Функция glFeedbackBuffer имеет три аргумента:
- buffer — это указатель на массив значений с плавающей запятой, в который помещаются сведения об обратной связи.
- size указывает размер массива.
- type — это символьная константа, описывающая сведения, которые передаются для каждой вершины.
Необходимо выдать glFeedbackBuffer до включения режима обратной связи (путем вызова glRenderMode с аргументом GL_FEEDBACK). Установка GL_FEEDBACK без установки буфера обратной связи или вызова glFeedbackBuffer , когда OpenGL находится в режиме обратной связи, является ошибкой.
Выведите OpenGL из режима обратной связи, вызвав glRenderMode со значением параметра, отличном от GL_FEEDBACK. При этом, когда OpenGL находится в режиме обратной связи, glRenderMode возвращает количество записей, помещенных в массив отзывов. Возвращаемое значение никогда не превышает размер. Если для данных обратной связи требуется больше места, чем было доступно в буфере, glRenderMode возвращает отрицательное значение.
В режиме обратной связи каждый примитив, который будет растеризован, создает блок значений, копируемый в массив отзывов. Если это приведет к тому, что количество записей превысит максимальное значение, glFeedbackBuffer частично записывает блок для заполнения массива (если вообще остается какое-либо пространство) и устанавливает флаг переполнения. Каждый блок начинается с кода, указывающего тип примитива, за которым следуют значения, описывающие вершины примитива и связанные с ними данные. Функция glFeedbackBuffer также записывает записи для растровых изображений и прямоугольников пикселей. Обратная связь возникает после отбраковки многоугольников и интерпретации многоугольников glPolygonMode , поэтому многоугольников, которые отбираются, не возвращаются в буфер обратной связи. Это также может произойти после разбиения многоугольников с более чем тремя ребрами на треугольники, если реализация OpenGL отрисовывает многоугольник путем выполнения этой декомпозиции.
Вы можете вставить маркер в буфер обратной связи с помощью glPassThrough.
Ниже приведена грамматика для блоков значений, записанных в буфер обратной связи. Каждый примитив обозначается уникальным идентифицирующие значения, за которым следует некоторое количество вершин. Записи многоугольников содержат целочисленное значение, указывающее, сколько вершин следует. Вершина возвращается в виде некоторого количества значений с плавающей запятой, определяемых типом . Цвета передаются в виде четырех значений в режиме RGBA и одного значения в режиме цветового индекса.
feedbackList < feedbackItem FeedbackList | feedbackItem
feedbackItem < point | lineSegment | polygon | bitmap | pixelRectangle | passThru
вершина GL_POINT_TOKEN точки <
lineSegment < GL_LINE_TOKEN вершины | вершина GL_LINE_RESET_TOKEN
polygon < GL_POLYGON_TOKEN n polySpec
polySpec < polySpec vertex | вершина вершины вершины
точечный рисунок < GL_BITMAP_TOKEN вершине
pixelRectangle < GL_DRAW_PIXEL_TOKEN вершины | вершина GL_COPY_PIXEL_TOKEN
Значение GL_PASS_THROUGH_TOKEN passThru <
< вершина 2d | 3d | 3dColor | 3dColorTexture | 4dColorTexture
2d-значение <
Значение 3d-значения <
3dColor value < value value value color
3dColorTexture < value value value color tex
4dColorTexture < value value value value value color tex
color < rgba | index
rgba < value value value value
значение индекса <
tex < value value value value
Параметр value является числом с плавающей запятой, а n — целым числом с плавающей запятой, дающим количество вершин в многоугольнике. Ниже приведены символьные константы с плавающей запятой: GL_POINT_TOKEN, GL_LINE_TOKEN, GL_LINE_RESET_TOKEN, GL_POLYGON_TOKEN, GL_BITMAP_TOKEN, GL_DRAW_PIXEL_TOKEN, GL_COPY_PIXEL_TOKEN и GL_PASS_THROUGH_TOKEN. GL_LINE_RESET_TOKEN возвращается при каждом сбросе шаблона строки. Данные, возвращаемые в виде вершины, зависят от типа обратной связи.
В следующей таблице приведено соответствие между типом и числом значений для каждой вершины. k — 1 в режиме цветового индекса и 4 в режиме RGBA.
Тип | Координаты | Цвет | Текстура | Общее количество значений |
---|---|---|---|---|
GL_2D | x, y | 2 | ||
GL_3D | x, y, z | 3 | ||
GL_3D_COLOR | x, y, z | k | 3 + k | |
GL_3D_COLOR_TEXTURE | x, y, z, | k | 4 | 7 + k |
GL_4D_COLOR_TEXTURE | x, y, z, w | k | 4 | 8 + k |
Координаты вершин обратной связи находятся в координатах окна, за исключением w, который находится в координатах клипа. Цвета обратной связи светятся, если освещение включено. Координаты текстур обратной связи создаются, если включено создание координат текстуры. Они всегда преобразуются матрицей текстуры.
Функция glFeedbackBuffer , используемая в отображаемом списке, не компилируется в отображаемый список, а выполняется немедленно.
Следующая функция извлекает сведения, связанные с glFeedbackBuffer:
glGet с аргументом GL_RENDER_MODE
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера |
Windows 2000 Server [только классические приложения] |
Заголовок |
|
Библиотека |
|
DLL |
|