glSelectBuffer 函数

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

语法

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

parameters

大小

缓冲区的大小。

缓冲区

返回选择数据。

返回值

此函数不返回值。

错误代码

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

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

注解

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

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

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

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

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

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

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

glBeginglEnd/ 基元和对 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