Speichern und Wiederherstellen von Sätzen von Zustandsvariablen

Sie können die Werte einer Auflistung von Zustandsvariablen in einem Attributstapel mit den Funktionen glPushAttrib und glPopAttrib speichern und wiederherstellen. Der Attributstapel hat eine Tiefe von mindestens 16. Um die tatsächliche Tiefe zu erhalten, verwenden Sie GL _ MAX _ ATTRIB _ STACK DEPTH mit _ glGetIntegerv. Das Pushen eines vollständigen Stapels oder das Popen eines leeren Stapels führt zu einem Fehler.

Im Allgemeinen ist es schneller, glPushAttrib und glPopAttrib zu verwenden, als die Werte selbst abzurufen und wiederherzustellen. Einige Werte werden möglicherweise in die Hardware gepusht und per Pop übertragen, und das Speichern und Wiederherstellen dieser Werte kann ressourcenintensiv sein. Wenn Sie auf einem Remoteclient arbeiten, müssen außerdem alle Attributdaten über die Netzwerkverbindung und zurück übertragen werden, während sie gespeichert und wiederhergestellt werden. Ihre OpenGL-Implementierung behält jedoch den Attributstapel auf dem Server bei, um unnötige Netzwerkverzögerungen zu vermeiden.

Der Prototyp von glPushAttrib lautet:

void glPushAttrib(GLbitfield mask );

Mit glPushAttrib werden alle attribute gespeichert, die durch Bits in mask angegeben werden, indem sie auf den Attributstapel gepusht werden. Eine Liste der möglichen Maskierungsbits, die Sie logisch OR zusammen erstellen können, um eine beliebige Kombination von Attributen zu speichern, finden Sie unter Attributgruppen. Jedes Bit entspricht einer Auflistung einzelner Zustandsvariablen. GL LIGHTING BIT bezieht sich z. _ _ B. auf alle Zustandsvariablen im Zusammenhang mit der Beleuchtung, die die aktuelle Materialfarbe, die Umgebungsfarbe, die Diffuse, das Glanzlicht und das ausgegebene Licht, eine Liste der aktivierten Beleuchtungen und die Richtungen der Strahler enthalten. Wenn Sie glPopAttribaufrufen, werden alle diese Variablen wiederhergestellt. Informationen dazu, welche Attribute genau für bestimmte Maskenwerte gespeichert werden, finden Sie unter OpenGL State Variables.