Поделиться через


Функция 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 .

Имя Значение
GL_INVALID_ENUM
Тип не является допустимым значением.
GL_INVALID_ENUM
размер был отрицательным.
GL_INVALID_OPERATION
glFeedbackBuffer был вызван, когда режим отрисовки был GL_FEEDBACK, или glRenderMode был вызван с аргументом GL_FEEDBACK до вызова glFeedbackBuffer по крайней мере один раз.
GL_INVALID_OPERATION
Функция была вызвана между вызовом 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 [только классические приложения]
Заголовок
Gl.h
Библиотека
Opengl32.lib
DLL
Opengl32.dll

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

glBegin

glEnd

glGet

glLineStipple

glPassThrough

glPolygonMode

glRenderMode

glSelectBuffer