这是一个情况下,我想去做的..我需要在OpenGL中推送和弹出哪些属性?
void func()
{
glDisable(GL_DEPTH_TEST);
glDisable(GL_FOG);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_1D);
glDisable(GL_TEXTURE_2D);
glDepthFunc(GL_LEQUAL);
glDepthRange (0.0, 0.999);
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glLineWidth(1.0f);
glPushMatrix();
{
glTranslatef(pos.x, pos.y, pos.z);
glRotatef(angle.x, 1.0f, 0.0f, 0.0f);
glRotatef(angle.y, 0.0f, 1.0f, 0.0f);
glRotatef(angle.z, 0.0f, 0.0f, 1.0f);
draw();
}
glPopMatrix();
}
我推这些atributes,但不知道,所以只是想知道什么属性与此功能确定。
glPushAttrib(GL_LINE_BIT | GL_TRANSFORM_BIT | GL_ENABLE_BIT | GL_LIGHTING_BIT | GL_CURRENT_BIT | GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
func();
glPopAttrib();
https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml,这是可以传递给该函数的参数列表以及相应的保存状态。作为一个旁注请记住,状态变化是昂贵的,所以试着对共享相同状态的事物进行分组。 – 2015-03-19 03:02:34
在现代,可能没有可衡量的惩罚,因为要谨慎使用'GL_ALL_ATTRIB_BITS'。很多年前,状态堆栈的大小是有限制的,推动最小状态集是有用的。但是,由于现代OpenGL(核心配置文件)的设计甚至不具备状态堆栈,因此在使用此旧功能时试图提高效率可能会长期影响生产力。 – 2015-03-19 18:35:46