glSelectBuffer 函数
glSelectBuffer 函数为选择模式值建立缓冲区。
语法
void WINAPI glSelectBuffer(
GLsizei size,
GLuint *buffer
);
parameters
-
大小
-
缓冲区的大小。
-
buffer
-
返回选择数据。
返回值
此函数不返回值。
错误代码
glGetError 函数可以检索以下错误代码。
名称 | 含义 |
---|---|
|
size 为负。 |
|
在呈现模式GL_SELECT时调用了 函数。 |
|
函数是在 对 glBegin 的调用和对 glEnd 的相应调用之间调用的。 |
备注
glSelectBuffer 函数有两个参数:buffer 是指向无符号整数数组的指针,size 指示数组的大小。 当呈现模式GL_SELECT (见 glRenderMode) 时,buffer 参数从名称堆栈返回值, (见 glInitNames、glLoadName、glPushName) 。 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 [仅限桌面应用] |
标头 |
|
库 |
|
DLL |
|