这里有一个案例,我想这样做。。
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();
}
我在推这些矩阵,但不确定,所以我只想知道这个函数的哪些属性是可以的。
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();
Maurice在上面的评论中链接的手册页(https://www.opengl.org/sdk/docs/man2/xhtml/glPushAttrib.xml)应该会让你走很长的路,而且是最简单的来源。不幸的是,手册页往往有错误和遗漏,因此通常不太可靠。
如果你想找到最终的来源,规范文档是你的朋友。例如,从以下位置下载OpenGL 4.5 Compatibility Profile规范https://www.opengl.org/registry/.您将需要兼容配置文件版本,因为属性堆栈功能已弃用,并且在核心配置文件中不可用。
然后,如果你在打开近1000页的PDF文件后没有从椅子上摔下来,你会在第23章中找到一整套状态表,从第697页开始。
现在,让我们从您的列表中选择第一个电话,以说明如何提取您要查找的信息:
glDisable(GL_DEPTH_TEST);
经过一番搜索,我们得出了表23.26"像素操作"。底部的第二行表示第一列中的DEPTH_TEST
。在最后一列(属性)中,它显示"depth buffer/enable"。这告诉我们属性属于哪个属性组。在这种情况下,它是其中的两个。
从那里,我们可以看到第677页的表21.4"属性组"。此表列出了属性组如何转换为_BIT
常量。对于我们的例子,我们发现:
- 深度缓冲区:
DEPTH_BUFFER_BIT
- 启用:
ENABLE_BIT
请注意,规范文档省略了GL_
前缀。
因此,对于深度测试启用状态,当用作glPushAttrib()
的参数时,GL_DEPTH_BUFFER_BIT
和GL_ENABLE_BIT
都将保存该状态。
如果你以同样的方式查看其他州的情况,你就有了权威的答案。