_C_ License Applicability. Except to the extent portions of this file are
_C_ made subject to an alternative license as permitted in the SGI Free
_C_ Software License B, Version 1.1 (the "License"), the contents of this
_C_ file are subject only to the provisions of the License. You may not use
_C_ this file except in compliance with the License. You may obtain a copy
_C_ of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
_C_ Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
_C_ 
_C_ http://oss.sgi.com/projects/FreeB
_C_ 
_C_ Note that, as provided in the License, the Software is distributed on an
_C_ "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
_C_ DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
_C_ CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
_C_ PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
_C_ 
_C_ Original Code. The Original Code is: OpenGL Sample Implementation,
_C_ Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
_C_ Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
_C_ Copyright in any portions created by third parties is as indicated
_C_ elsewhere herein. All Rights Reserved.
_C_ 
_C_ Additional Notice Provisions: The application programming interfaces
_C_ established by SGI in conjunction with the Original Code are The
_C_ OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
_C_ April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
_C_ 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
_C_ Window System(R) (Version 1.3), released October 19, 1998. This software
_C_ was created using the OpenGL(R) version 1.2.1 Sample Implementation
_C_ published by SGI, but has not been independently verified as being
_C_ compliant with the OpenGL(R) version 1.2.1 Specification.
_C_
_C_ The first character in this file must be an '_'!
_C_ Anything on a line after _C_ is ignored
_define(_filters,eqn|tbl)_C_
_header(PushAttrib,push and pop the server attribute stack)
_names(PushAttrib)
.SH PARAMETERS
_phead(_param1)
Specifies a mask that indicates which attributes to save. Values for
_param1 are listed below.
_names(PopAttrib)
.SH DESCRIPTION
_cmnd takes one argument,
a mask that indicates which groups of state variables
to save on the attribute stack.
Symbolic constants are used to set bits in the mask.
_param1(1)
is typically constructed by ORing several of these constants together.
The special mask
_const(ALL_ATTRIB_BITS)
can be used to save all stackable states.
.P
The symbolic mask constants and their associated GL state are as follows
(the second column lists which attributes are saved):
.P
.TS
;
l l .
_const(ACCUM_BUFFER_BIT)	Accumulation buffer clear value

_const(COLOR_BUFFER_BIT)	_const(ALPHA_TEST) enable bit
	Alpha test function and reference value
	_const(BLEND) enable bit
	Blending source and destination functions
	Constant blend color
	Blending equation
	_const(DITHER) enable bit
	_const(DRAW_BUFFER) setting
	_const(COLOR_LOGIC_OP) enable bit
	_const(INDEX_LOGIC_OP) enable bit
	Logic op function
	Color mode and index mode clear values
	Color mode and index mode writemasks

_const(CURRENT_BIT)	Current RGBA color
	Current color index
	Current normal vector
	Current texture coordinates
	Current raster position
	_const(CURRENT_RASTER_POSITION_VALID) flag
	RGBA color associated with current raster position
	Color index associated with current raster position
	Texture coordinates associated with current raster position
	_const(EDGE_FLAG) flag

_const(DEPTH_BUFFER_BIT)	_const(DEPTH_TEST) enable bit
	Depth buffer test function
	Depth buffer clear value
	_const(DEPTH_WRITEMASK) enable bit

_const(ENABLE_BIT)	_const(ALPHA_TEST) flag
	_const(AUTO_NORMAL) flag
	_const(BLEND) flag
	Enable bits for the user-definable clipping planes
	_const(COLOR_MATERIAL)
	_const(CULL_FACE) flag
	_const(DEPTH_TEST) flag
	_const(DITHER) flag
	_const(FOG) flag
	_const(LIGHT)\f2i\fP where 0\ <= \f2i\fP<_const(MAX_LIGHTS)
	_const(LIGHTING) flag
	_const(LINE_SMOOTH) flag
	_const(LINE_STIPPLE) flag
	_const(COLOR_LOGIC_OP) flag
	_const(INDEX_LOGIC_OP) flag
	_const(MAP1_)\f2x\fP where \f2x\fP is a map type
	_const(MAP2_)\f2x\fP where \f2x\fP is a map type
	_const(NORMALIZE) flag
	_const(POINT_SMOOTH) flag
	_const(POLYGON_OFFSET_LINE) flag
	_const(POLYGON_OFFSET_FILL) flag
	_const(POLYGON_OFFSET_POINT) flag
	_const(POLYGON_SMOOTH) flag
	_const(POLYGON_STIPPLE) flag
	_const(SCISSOR_TEST) flag
	_const(STENCIL_TEST) flag
	_const(TEXTURE_1D) flag
	_const(TEXTURE_2D) flag
	_const(TEXTURE_3D) flag
	Flags _const(TEXTURE_GEN_)\f2x\fP where \f2x\fP is S, T, R, or Q 

_const(EVAL_BIT)	_const(MAP1_)\f2x\fP enable bits, where \f2x\fP is a map type
	_const(MAP2_)\f2x\fP enable bits, where \f2x\fP is a map type
	1D grid endpoints and divisions
	2D grid endpoints and divisions
	_const(AUTO_NORMAL) enable bit

_const(FOG_BIT)	_const(FOG) enable bit
	Fog color
	Fog density
	Linear fog start
	Linear fog end
	Fog index
	_const(FOG_MODE) value

_const(HINT_BIT)	_const(PERSPECTIVE_CORRECTION_HINT) setting
	_const(POINT_SMOOTH_HINT) setting
	_const(LINE_SMOOTH_HINT) setting
	_const(POLYGON_SMOOTH_HINT) setting
	_const(FOG_HINT) setting

_const(LIGHTING_BIT)	_const(COLOR_MATERIAL) enable bit
	_const(COLOR_MATERIAL_FACE) value
	Color material parameters that are tracking the current color
	Ambient scene color
	_const(LIGHT_MODEL_LOCAL_VIEWER) value
	_const(LIGHT_MODEL_TWO_SIDE) setting
	_const(LIGHTING) enable bit
	Enable bit for each light
	Ambient, diffuse, and specular intensity for each light
	Direction, position, exponent, and cutoff angle for each light
	Constant, linear, and quadratic attenuation factors for each light
	Ambient, diffuse, specular, and emissive color for each material
	Ambient, diffuse, and specular color indices for each material
	Specular exponent for each material
	_const(SHADE_MODEL) setting

_const(LINE_BIT)	_const(LINE_SMOOTH) flag
	_const(LINE_STIPPLE) enable bit
	Line stipple pattern and repeat counter
	Line width

_const(LIST_BIT)	_const(LIST_BASE) setting

_const(PIXEL_MODE_BIT)	_const(RED_BIAS) and _const(RED_SCALE) settings
	_const(GREEN_BIAS) and _const(GREEN_SCALE) values
	_const(BLUE_BIAS) and _const(BLUE_SCALE)
	_const(ALPHA_BIAS) and _const(ALPHA_SCALE)
	_const(DEPTH_BIAS) and _const(DEPTH_SCALE)
	_const(INDEX_OFFSET) and _const(INDEX_SHIFT) values
	_const(MAP_COLOR) and _const(MAP_STENCIL) flags
	_const(ZOOM_X) and _const(ZOOM_Y) factors
	_const(READ_BUFFER) setting

_const(POINT_BIT)	_const(POINT_SMOOTH) flag
	Point size

_const(POLYGON_BIT)	_const(CULL_FACE) enable bit
	_const(CULL_FACE_MODE) value
	_const(FRONT_FACE) indicator
	_const(POLYGON_MODE) setting
	_const(POLYGON_SMOOTH) flag
	_const(POLYGON_STIPPLE) enable bit
	_const(POLYGON_OFFSET_FILL) flag
	_const(POLYGON_OFFSET_LINE) flag
	_const(POLYGON_OFFSET_POINT) flag
	_const(POLYGON_OFFSET_FACTOR)
	_const(POLYGON_OFFSET_UNITS)

_const(POLYGON_STIPPLE_BIT)	Polygon stipple image

_const(SCISSOR_BIT)	_const(SCISSOR_TEST) flag
	Scissor box

_const(STENCIL_BUFFER_BIT)	_const(STENCIL_TEST) enable bit
	Stencil function and reference value
	Stencil value mask
	Stencil fail, pass, and depth buffer pass actions
	Stencil buffer clear value
	Stencil buffer writemask

_const(TEXTURE_BIT)	Enable bits for the four texture coordinates
	Border color for each texture image
	Minification function for each texture image
	Magnification function for each texture image
	Texture coordinates and wrap mode for each texture image
	Color and mode for each texture environment
	Enable bits _const(TEXTURE_GEN_)\f2x\fP, \f2x\fP is S, T, R, and Q 
	_const(TEXTURE_GEN_MODE) setting for S, T, R, and Q
	_cmnd(TexGen) plane equations for S, T, R, and Q
	Current texture bindings (for example, _const(TEXTURE_BINDING_2D))

_const(TRANSFORM_BIT)	Coefficients of the six clipping planes
	Enable bits for the user-definable clipping planes
	_const(MATRIX_MODE) value
	_const(NORMALIZE) flag
	_const(RESCALE_NORMAL) flag

_const(VIEWPORT_BIT)	Depth range (near and far)
	Viewport origin and extent
.TE
.P
_cmnd(PopAttrib) restores the values of the state variables saved with the last
.br
_cmnd(PushAttrib) command.
Those not saved are left unchanged.
.P
It is an error to push attributes onto a full stack,
or to pop attributes off an empty stack.
In either case, the error flag is set
and no other change is made to GL state.
.P
Initially, the attribute stack is empty.
.SH NOTES
Not all values for GL state can be saved on the attribute stack.
For example,
render mode state,
and select and feedback state cannot be saved.
Client state must be saved with 
_cmnd(PushClientAttrib).
.P
The depth of the attribute stack depends on the implementation,
but it must be at least 16.
.P
When the _arbstring(multitexture) extension is supported, pushing and
popping texture state applies to all supported texture units.
.SH ERRORS
_const(STACK_OVERFLOW) is generated if _cmnd(PushAttrib) is called while
the attribute stack is full.
.P
_const(STACK_UNDERFLOW) is generated if _cmnd(PopAttrib) is called while
the attribute stack is empty.
.P
_const(INVALID_OPERATION) is generated if _cmnd(PushAttrib) or _cmnd(PopAttrib)
is executed between the execution of _cmnd(Begin)
and the corresponding execution of _cmnd(End).
.SH ASSOCIATED GETS 
_cmnd(Get) with argument _const(ATTRIB_STACK_DEPTH)
.br
_cmnd(Get) with argument _const(MAX_ATTRIB_STACK_DEPTH)
.SH SEE ALSO
_cmnd(Get),
_cmnd(GetClipPlane),
_cmnd(GetError),
_cmnd(GetLight),
_cmnd(GetMap),
_cmnd(GetMaterial),
.br
_cmnd(GetPixelMap),
_cmnd(GetPolygonStipple),
_cmnd(GetString),
_cmnd(GetTexEnv),
_cmnd(GetTexGen),
_cmnd(GetTexImage),
_cmnd(GetTexLevelParameter),
_cmnd(GetTexParameter),
_cmnd(IsEnabled),
_cmnd(PushClientAttrib)
