【opengl函数】glFeedbackBuffer

原文地址:https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glFeedbackBuffer.xml

Name

glFeedbackBuffer —用来控制反馈模式

C Specification

void glFeedbackBuffer(

GLsizei size,

 

GLenum type,

 

GLfloat * buffer);

 

Parameters

Size:可以被写进buffer的值的最大数量。

Type:符号常量,描述每个顶点返回的信息。有: GL_2D, GL_3D, GL_3D_COLOR, GL_3D_COLOR_TEXTURE, and GL_4D_COLOR_TEXTURE 。

Buffer:返回反馈信息。

 

Description

glFeedBackBuffer函数控制反馈。反馈模式(Feedbak)和选择模式(Selection)一样,是GL模式。通过使用glRenderMode(GL_FEEDBACK)选择这个模式。在反馈模式下,不会产生光栅化的像素,而是把将会被光栅化的图元信息返回到使用GL的应用里。

glFeedbackBuffer有三个参数:buffer是一个浮点数数组的的指针,反馈信息写入到这个数组里。Size指明了这个数组的大小。Type是一个符号化常量,描述了每个顶点返回的信息。在进入GL_FEEDBACK模式之前glFeedBackBuffer必须已经被创建了。在没有创建glFeedBackBuffer之前设置GL_FEEDBACK或者在反馈模式下创建GLFeedBackBuffer都会出现错误。

glRenderMode函数在feedback模式下被调用的时候,它返回被存入feedback数组的词目数量,并且将feedback数组的指针重新设置到feedback buffer的底部。函数的返回的值永远不会超过size。如果feedback数据需要更多的可用空间,glRenderMode函数会返回一个负值。调用glRenderMode并且选一个不是GL_FEEDBACK的参数可退出反馈模式。

在反馈模式下,每个(在绘制模式下)将会被光栅化的图元、位图或者像素三角形产生一块数值,拷贝到反馈数组里。如果这么做会导致词目的数量超过最大值,数据块会被部分地写入以填充数组(如果数组还有空间的话),然后设置一个溢出标志。每一个数据块以一条指明图元类型的代码开始,后面接着描述图元顶点和相关信息的数据。对于位图和像素三角形来说,词目也被写入了。反馈发生在多边形剔除(culling)和glPolygonMode解释三角形之后,所以被剔除的多边形没有在反馈数组中返回。它也发生在有多于三条边的多边形被分解成三角形之后,如果GL通过这种分解来渲染多边形的话。

glPassThrough 命令可以用来在反馈数组里插入一个marker

接下来是数值块写入反馈缓存的语法。每一个图元都用一个独一无二大的数值指明,后面跟着一些顶点,多边形词目包括一个整数,指明后面跟了多少顶点。顶点以一些浮点数的形式反馈,数量取决于type。在RGBA的模式下,颜色返回四个值;在颜色索引模式下返回一个值。

feedbackList  feedbackItem feedbackList | feedbackItem

feedbackItem  point| lineSegment | polygon | bitmap | pixelRectangle | passThru

point  GL_POINT_TOKEN vertex

lineSegment  GL_LINE_TOKEN vertex vertex| GL_LINE_RESET_TOKEN vertex vertex

polygon  GL_POLYGON_TOKEN n polySpec

polySpec  polySpec vertex | vertex vertex vertex

bitmap  GL_BITMAP_TOKEN vertex

pixelRectangle  GL_DRAW_PIXEL_TOKEN vertex| GL_COPY_PIXEL_TOKEN vertex

passThru  GL_PASS_THROUGH_TOKEN value

 

vertex  2d | 3d | 3dColor | 3dColorTexture | 4dColorTexture

2d  value value

3d  value value value

3dColor  value value value color

3dColorTexture  value value value colortex

4dColorTexture  value value value value colortex

color  rgba | index

rgba  value value value value

index  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 andGL_PASS_THROUGH_TOKEN是符号化的浮点数常量。无论何时重新设置点画线(line stipple)模式的时候,GL_LINE_RESET_TOKEN将会被返回。数值将会以顶点的方式返回,取决于反馈type

下面的表格给出type和每个顶点值的个数的关系。k在颜色索引模式下为1RGBA模式下为4.

Type

Coordinates

Color

Texture

Total Number of Values

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,也就是裁剪坐标。如果启用了灯光,feedback中的颜色是被照亮过的。如果启用了生成纹理坐标,反馈的纹理坐标被生成了。并且总是被纹理矩阵转换过的。

注意:

glFeedBackBuffer,当使用到displaylist里是,不编译进display list而是直接执行。

glFeedBackBuffer只返回GL_TEXTURE0的纹理坐标。

你可能感兴趣的:(opengl函数笔记)