glSelectBuffer 函数

glSelectBuffer 函数为选择模式值建立缓冲区。

语法

void WINAPI glSelectBuffer(
   GLsizei size,
   GLuint  *buffer
);

parameters

大小

缓冲区的大小。

buffer

返回选择数据。

返回值

此函数不返回值。

错误代码

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

名称 含义
GL_INVALID_VALUE
size 为负。
GL_INVALID_OPERATION
在呈现模式GL_SELECT时调用了 函数。
GL_INVALID_OPERATION
函数是在 对 glBegin 的调用和对 glEnd 的相应调用之间调用的。

备注

glSelectBuffer 函数有两个参数:buffer 是指向无符号整数数组的指针,size 指示数组的大小。 当呈现模式GL_SELECT (见 glRenderMode) 时,buffer 参数从名称堆栈返回值, (见 glInitNamesglLoadNameglPushName) 。 glSelectBuffer 函数必须在启用选择模式之前发出,并且不得在呈现模式GL_SELECT时发出。

程序员使用所选内容来确定哪些基元被绘制到窗口的某个区域中。 区域由当前模型视图和透视矩阵定义。

在选择模式下,光栅化不会生成像素片段。 相反,如果基元与视锥定义的剪辑音量相交,则此基元会导致选择命中。 (使用多边形时,如果剔除多边形,则不会发生命中。) 更改名称堆栈或调用 glRenderMode 时,如果自上一个此类事件 (名称堆栈更改或 glRenderMode 调用) 以来发生任何命中,则会将命中记录复制到缓冲区。 命中记录由事件发生时名称堆栈中的名称数组成;后跟自上一个事件以来命中的所有顶点的最小和最大深度值;后跟名称堆栈内容,先是底部名称。

映射返回的深度值,使最大无符号整数值对应于窗口坐标深度 1.0,零对应于窗口坐标深度 0.0。

每当进入选择模式时, 缓冲区 中的内部索引将重置为零。 每次将命中记录复制到 缓冲区时,索引都会递增,使其指向名称块末尾之后的单元格,即下一个可用单元格。 如果命中记录大于 缓冲区中剩余位置的数目,则会复制尽可能多的数据,并设置溢出标志。 如果在复制命中记录时名称堆栈为空,则该记录由零后跟最小和最大深度值组成。

通过使用除 GL_SELECT 以外的参数调用 glRenderMode 来退出选择模式。 每当在呈现模式GL_SELECT时调用 glRenderMode 时,它都会返回复制到 缓冲区的命中记录数,重置溢出标志和选择缓冲区指针,并将名称堆栈初始化为空。 如果在调用 glRenderMode 时设置了溢出位,则返回负命中记录计数。

除非使用除 GL_SELECT 以外的参数调用 glRenderMode,否则缓冲区的内容未定义。

glBegin/glEnd 基元和对 glRasterPos 的调用可能会导致命中。

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

带参数GL_NAME_STACK_DEPTH的 glGet

要求

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

Opengl32.lib
DLL
Opengl32.dll

另请参阅

glBegin

glEnd

glFeedbackBuffer

glInitNames

glLoadName

glPushName

glRenderMode