這是一個情況下,我想去做的..我需要在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