Opengl glPushName+;glPopName堆栈溢出和下溢

Opengl glPushName+;glPopName堆栈溢出和下溢,opengl,selection,stack-overflow,picking,stackunderflow,Opengl,Selection,Stack Overflow,Picking,Stackunderflow,谁能解释一下如何使用glPushName和glPopName吗。我喜欢用它们代替glLoadName,但我经常会遇到GL_STACK_溢出和GL_STACK_下溢错误。(首先,然后是溢出) 示例代码也会帮助我 注#1: 我的渲染/选择\u刷新代码由多个glBegin(…)/glEnd()块组成,如果这是任何问题,还包括各种旋转和变换 注#2: 我知道GL selection/picking已被弃用,但我必须在不久前用OpenGL2.1开发的应用程序中实现它。在这种情况下,我只是哑巴,因为堆栈溢出

谁能解释一下如何使用glPushName和glPopName吗。我喜欢用它们代替glLoadName,但我经常会遇到GL_STACK_溢出和GL_STACK_下溢错误。(首先,然后是溢出)

示例代码也会帮助我

注#1: 我的渲染/选择\u刷新代码由多个glBegin(…)/glEnd()块组成,如果这是任何问题,还包括各种旋转和变换

注#2:
我知道GL selection/picking已被弃用,但我必须在不久前用OpenGL2.1开发的应用程序中实现它。

在这种情况下,我只是哑巴,因为堆栈溢出是由于对glPushMatrix进行了大量操作而导致的,因为该堆栈的容量非常低(在我的特殊硬件情况下为3)。绘图模式工作得很好,但我有一个额外的矩阵用于拾取模式

如何使用glPopName/glPushName(名称)


在本例中,我只是哑巴,因为stackoverflow是由于对glPushMatrix做了太多操作造成的,因为该堆栈的容量非常低(在我的特殊硬件案例中为3)。绘图模式工作得很好,但我有一个额外的矩阵用于拾取模式

如何使用glPopName/glPushName(名称)

glPushName(obj->name());
glBegin(...);
//draw it;
glEnd();

glPushName(obj->child->name());
glBegin(...);
//draw child it;
glEnd();

glPopName();
glPopName(); //important, or yoou will get a stackoverflow after some time