glPushAttrib および glPopAttrib 関数を使用して、属性スタック上の状態変数のコレクションの値を保存および復元できます。 属性スタックの深さは少なくとも 16 です。 実際の深度を取得するには、 glGetIntegerv で GL_MAX_ATTRIB_STACK_DEPTH を使用します。 いっぱいになったスタックをプッシュしたり、空のスタックをポップしたりすると、エラーが発生します。
通常、自分で値を取得して復元するよりも、 glPushAttrib と glPopAttrib を使用する方が高速です。 一部の値はハードウェアでプッシュおよびポップされる可能性があり、それらの保存と復元には多くのリソースが必要になる場合があります。 また、リモート クライアントで操作している場合は、すべての属性データを保存および復元するときに、ネットワーク接続を介して転送する必要があります。 ただし、OpenGL 実装では属性スタックがサーバー上に保持されるため、不要なネットワーク遅延が回避されます。
glPushAttrib のプロトタイプは次のとおりです。
void glPushAttrib(GLbitfield マスク );
glPushAttrib を使用すると、 mask 内のビットで示されるすべての属性が属性スタックにプッシュされて保存されます。 属性の任意の組み合わせを保存するために論理的に OR 結合できるマスク ビットのリストについては、 属性グループを参照してください。 各ビットは、個々の状態変数の集合に対応します。 たとえば、GL_LIGHTING_BIT は、現在のマテリアルの色、周囲光、拡散光、鏡面光、放射光、有効なライトのリスト、スポットライトの方向など、照明に関連するすべての状態変数を参照します。 glPopAttribを呼び出すと、それらの変数はすべて復元されます。 特定のマスク値に対してどの属性が保存されるかを正確に知るには、 OpenGL 状態変数を参照してください。