glFeedbackBuffer 函数

glFeedbackBuffer 函数控制反馈模式。

语法

void WINAPI glFeedbackBuffer(
   GLsizei size,
   GLenum  type,
   GLfloat *buffer
);

parameters

大小

可以写入 缓冲区的值的最大数目。

type

描述将为每个顶点返回的信息的符号常量。 接受以下符号常量:GL_2D、GL_3D、GL_3D_COLOR、GL_3D_COLOR_TEXTURE和GL_4D_COLOR_TEXTURE。

buffer

返回反馈数据。

返回值

此函数不返回值。

错误代码

glGetError 函数可以检索以下错误代码。

名称 含义
GL_INVALID_ENUM
type 不是接受的值。
GL_INVALID_ENUM
size 为负值。
GL_INVALID_OPERATION
在呈现模式GL_FEEDBACK时调用 glFeedbackBuffer,或者在调用 glFeedbackBuffer 之前调用 glFeedbackBuffer 之前,使用参数GL_FEEDBACK调用 glRenderMode
GL_INVALID_OPERATION
在对 glBegin 的调用和对 glEnd 的相应调用之间调用了函数。

备注

glFeedbackBuffer 函数控制反馈。 与选择一样,反馈是 OpenGL 模式。 通过调用 glRenderMode 和 GL_FEEDBACK 来选择模式。 当 OpenGL 处于反馈模式时,光栅化不会生成任何像素。 相反,有关本来要光栅化的基元的信息会使用 OpenGL 反馈给应用程序。

glFeedbackBuffer 函数有三个参数:

  • buffer 是指向将反馈信息放入其中的浮点值数组的指针。
  • size 指示数组的大小。
  • type 是一个符号常量,用于描述为每个顶点反馈的信息。

必须先发出 glFeedbackBuffer ,然后才能启用反馈模式 (,方法是使用参数GL_FEEDBACK) 调用 glRenderMode 。 设置GL_FEEDBACK未建立反馈缓冲区,或在 OpenGL 处于反馈模式时调用 glFeedbackBuffer 是一个错误。

使用 GL_FEEDBACK 以外的参数值调用 glRenderMode ,使 OpenGL 退出反馈模式。 当 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 顶点 | 顶点顶点

位图 < GL_BITMAP_TOKEN顶点

pixelRectangle < GL_DRAW_PIXEL_TOKEN顶点 |GL_COPY_PIXEL_TOKEN顶点

passThru < GL_PASS_THROUGH_TOKEN 值

顶点 < 2d | 3d | 3dColor | 3dColorTexture | 4dColorTexture

2d < 值

3d < 值值

3dColor < 值值值颜色

3dColorTexture < 值值颜色纹

4dColorTexture < 值值值颜色纹

color < rgba | index

rgba < 值值值

index < 值

tex < 值值值

参数是一个浮点数,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,在 RGBA 模式下为 4。

类型 坐标 Color 纹理 值总数
GL_2D x、y 2
GL_3D xyz 3
GL_3D_COLOR xyz k 3 + k
GL_3D_COLOR_TEXTURE xyz k 4 7 + k
GL_4D_COLOR_TEXTURE xyzw k 4 8 + k

反馈顶点坐标位于窗口坐标中 ,w 除外,后者位于剪辑坐标中。 如果启用照明,则会点亮反馈颜色。 如果启用了纹理坐标生成,则会生成反馈纹理坐标。 它们始终由纹理矩阵转换。

在显示列表中使用 glFeedbackBuffer 函数时,不会编译到显示列表中,而是立即执行。

以下函数检索与 glFeedbackBuffer 相关的信息:

带参数GL_RENDER_MODE的 glGet

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Gl.h

Opengl32.lib
DLL
Opengl32.dll

另请参阅

glBegin

glEnd

glGet

glLineStipple

glPassThrough

glPolygonMode

glRenderMode

glSelectBuffer