我正在做一些与OpenGL 1.3相关的工作,遇到了一些与OpenGL状态变量有关的不确定性,以及它们与属性堆栈的关系,以及它们对应的属性位。在OpenGL超级圣经中,声明GL_ENABLE_BIT
保存了GL_DEPTH_TEST
和GL_STENCIL_TEST
状态等变量。
然而,圣经也提到,GL_COLOR_BUFFER_BIT
符号常量除了保存一些不那么具体的状态之外,还保存了“当前绘图缓冲区”。本能地,我觉得属性位应该只构成帧缓冲区(如后退/颜色缓冲区中的)-related状态,因为它的名称,但深度和模板缓冲区自然是缓冲区,你可以画(‘绘图缓冲区’)。
类似地,Khronos手册页在指定与各自位相对应的许多变量时,只简要地概述了其中一些位表示的状态(描述状态,例如“为用户定义的剪贴面启用位”)。我的第一个想法是,这是因为定义较少的状态(在文本中描述,而不是指定GLenum
名称)是用户无法访问的,因此Kronos没有进一步详细说明。然而,有多个纯文本状态可能被用户读取和写入,而这些状态不是由名称指定的--例如“颜色模式和索引模式清除值”(GL_COLOR_CLEAR_VALUE
)和包含在GL_COLOR_BUFFER_BIT
属性位下的“颜色模式和索引模式写掩码”(GL_COLOR_WRITEMASK
) --因此这似乎不太可能。
虽然这可能不会给普通用户带来任何问题,但对于一些开发人员(比如我,在本例中)来说,这可能是一个问题,因为在glPushAttrib
或glPopAttrib
方法调用期间,需要确切地了解应该将哪些状态推送/弹出到/从属性堆栈。
我的问题是:“当前绘图缓冲区”在这方面是否包含GL_DEPTH_TEST
和GL_STENCIL_TEST
状态,我在哪里可以找到更详细的信息,详细说明哪些状态构成了各自的属性位?
发布于 2014-07-29 03:59:58
GL_DEPTH_TEST
OpenGL状态变量在GL_DEPTH_BUFFER_BIT
或GL_ENABLE_BIT
传递给glPushAttrib
函数时被推送到属性堆栈。同时,GL_STENCIL_TEST
状态使用GL_STENCIL_BUFFER_BIT
或GL_ENABLE_BIT
符号常量保存到堆栈中。
因此,当GL_DEPTH_TEST
和GL_STENCIL_TEST
状态变量被赋予属性堆栈时,GL_COLOR_BUFFER_BIT
都不会被写入属性堆栈。此外,附加状态及其相应的属性位在第6章:OpenGL 1.3规范的状态和状态请求中详细介绍。
https://stackoverflow.com/questions/25010605
复制相似问题