我正在做一些与OpenGL 1.3相关的工作,并且遇到一些关于OpenGL状态变量的不确定性,以及它们与属性堆栈的关系,关于它们对应的属性位。在OpenGL Super Bible中,GL_ENABLE_BIT
表示GL_DEPTH_TEST
保存GL_STENCIL_TEST
和GL_COLOR_BUFFER_BIT
状态等其他变量。
然而,圣经还提到GLenum
符号常量除了一些不太具体的状态外,还会保存'当前绘图缓冲区'。本能地,我感觉好像属性位应该仅由于其名称而构成帧缓冲(如在背面/颜色缓冲区中)相关状态,但深度和模板缓冲区自然是缓冲区,可以绘制('绘图缓冲区) “)。
类似地,Khronos man pages虽然指定了与各个位对应的许多变量,但只是简要地概述了哪些某些位的状态(描述了诸如'的启用位之类的状态用户可定义的剪裁平面')。
我的第一个想法是,这是由于用户无法访问的定义较少的状态(在文本中描述而不是指定GL_COLOR_CLEAR_VALUE
名称),因此Kronos没有进一步详述。
然而,有多个纯文本状态可以由用户读取和写入,而不是由名称指定 - 例如'颜色模式和索引模式清除值'(GL_COLOR_WRITEMASK
)和'颜色模式和GL_COLOR_BUFFER_BIT
属性位下包含的索引模式写掩码(glPushAttrib
) - 所以这似乎不太可能。
虽然这可能不会对普通用户造成任何问题,但对于某些开发人员(例如我自己,在这种情况下)可能是一个问题,需要详细信息正好应该推送/弹出哪些状态在glPopAttrib
或GL_DEPTH_TEST
方法调用期间进出属性堆栈。
我的问题是:'当前绘图缓冲区'在这方面是否包含GL_STENCIL_TEST
和{{1}}个状态,我在哪里可以找到详细说明正确的其他信息什么状态组成各自的属性位?
答案 0 :(得分:3)
当GL_DEPTH_TEST
或GL_DEPTH_BUFFER_BIT
传递给GL_ENABLE_BIT
函数时,glPushAttrib
OpenGL状态变量被推送到属性堆栈。
同时,GL_STENCIL_TEST
状态使用GL_STENCIL_BUFFER_BIT
或GL_ENABLE_BIT
符号常量保存到堆栈中。
因此,当GL_DEPTH_TEST
被赋予GL_STENCIL_TEST
时,GL_COLOR_BUFFER_BIT
和glPushAttrib
状态变量都不会被写入属性堆栈。
此外,第6章详述了其他状态及其相应的属性位:OpenGL 1.3 specification的状态和状态请求: