保存和还原状态变量集

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

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

glPushAttrib 的原型为:

void glPushAttrib(GLbitfield mask );

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