Freigeben über


Speichern und Wiederherstellen von Zustandsvariablensätzen

Sie können die Werte einer Zustandsvariablensammlung in einem Attributstapel mit den Funktionen glPushAttrib und glPopAttrib speichern und wiederherstellen. Der Attributstapel hat eine Tiefe von mindestens 16. Verwenden Sie zum Abrufen der tatsächlichen Tiefe GL_MAX_ATTRIB_STACK_DEPTH mit glGetIntegerv. Beim Pushen eines vollständigen Stapels oder beim Auffüllen eines leeren Stapels wird ein Fehler generiert.

Im Allgemeinen ist es schneller, glPushAttrib und glPopAttrib zu verwenden, als die Werte selbst abzurufen und wiederherzustellen. Einige Werte werden möglicherweise per Push übertragen und in der Hardware angezeigt, und das Speichern und Wiederherstellen kann ressourcenintensiv sein. Wenn Sie auch auf einem Remoteclient arbeiten, müssen alle Attributdaten über die Netzwerkverbindung übertragen und wiederhergestellt werden. Ihre OpenGL-Implementierung hält den Attributstapel jedoch auf dem Server, wodurch unnötige Netzwerkverzögerungen vermieden werden.

Der Prototyp von glPushAttrib lautet:

void glPushAttrib(GLbitfield mask );

Mithilfe von glPushAttrib werden alle Attribute gespeichert, die von Bits in der Maske angegeben werden, indem sie auf den Attributstapel verschoben werden. Eine Liste der möglichen Maskenbits, die Sie logisch ODER zusammen verwenden können, um eine beliebige Kombination von Attributen zu speichern, finden Sie unter Attributgruppen. Jedes Bit entspricht einer Auflistung einzelner Zustandsvariablen. Beispielsweise bezieht sich GL_LIGHTING_BIT auf alle Zustandsvariablen im Zusammenhang mit der Beleuchtung, einschließlich der aktuellen Materialfarbe, des Umgebungslichts, des diffusen Lichts, des Spiegelungslichts und des emittierten Lichts, einer Liste der aktivierten Lichter und der Ausrichtung der Scheinwerfer. Wenn Sie glPopAttrib aufrufen, werden diese Variablen alle wiederhergestellt. Informationen dazu, welche Attribute für bestimmte Maskenwerte gespeichert werden, finden Sie unter OpenGL-Zustandsvariablen.