保存和还原状态变量集

可以使用 glPushAttribglPopAttrib 函数保存和还原属性堆栈上状态变量集合的值。 属性堆栈的深度至少为 16。 若要获取实际深度,请使用 glGetIntegerv GL_MAX_ATTRIB_STACK_DEPTH。 推送完整堆栈或弹出空堆栈会生成错误。

使用 glPushAttribglPopAttrib 的速度通常比自行获取和还原值要快。 某些值可能会在硬件中推送和弹出,并且保存和还原这些值可能占用大量资源。 此外,如果要在远程客户端上运行,则所有属性数据都必须在保存和还原时通过网络连接传输并返回。 但是,OpenGL 实现将属性堆栈保留在服务器上,避免不必要的网络延迟。

glPushAttrib 的原型是:

voidglPushAttrib (GLbitfieldmask ) ;

使用 glPushAttrib 通过将位推送到属性堆栈来保存 掩码 中由位指示的所有属性。 有关可以逻辑方式或一起保存任意属性组合的可能掩码位的列表,请参阅 属性组。 每个位对应于单个状态变量的集合。 例如,GL_LIGHTING_BIT是指与照明相关的所有状态变量,其中包括当前材料颜色;环境、漫射、反射和发出光:已启用的灯的列表;和聚光灯的方向。 调用 glPopAttrib 时,将还原所有这些变量。 若要确切了解为特定掩码值保存哪些属性,请参阅 OpenGL 状态变量