Bezeichnung
gl.Accum -- definiert die Arbeitsweise des Akkumulationspuffers
Übersicht
gl.Accum(op, value)
Beschreibung
Der Akkumulationspuffer ist ein erweiterter Farbpuffer. Bilder werden nicht darin wiedergegeben. Stattdessen werden Bilder, die in einem der Farbpuffer berechnet werden, nach der Berechnung zu den Inhalten des Akkumulationspuffers hinzugefügt. Effekte wie Antialiasing (von Punkten, Linien und Polygonen), Bewegungsunschärfe und Tiefenschärfe können durch Akkumulieren von Bildern erzeugt werden, die mit verschiedenen Transformationsmatrizen erzeugt wurden.

Jedes Pixel im Akkumulationspuffer besteht aus Rot-, Grün-, Blau- und Alpha-Werten. Die Anzahl der Bits pro Komponente im Akkumulationspuffer hängt von der Implementierung ab. Sie können diese Zahl untersuchen, indem Sie gl.Get() viermal jeweils mit den Argumenten #GL_ACCUM_RED_BITS, #GL_ACCUM_GREEN_BITS, #GL_ACCUM_BLUE_BITS und #GL_ACCUM_ALPHA_BITS aufrufen. Unabhängig von der Anzahl der Bits pro Komponente beträgt der Wertebereich für jede Komponente -1 bis 1. Die Akkumulationspufferpixel werden eins zu eins mit Bildpufferpixeln abgebildet.

gl.Accum() arbeitet mit dem Akkumulationspuffer. Das erste Argument, op, ist eine symbolische Konstante, die eine Akkumulationspufferoperation auswählt. Das zweite Argument value ist ein Gleitkommawert, der in dieser Operation verwendet wird. Fünf Operationen sind angegeben: #GL_ACCUM, #GL_LOAD, #GL_ADD, #GL_MULT, und #GL_RETURN.

Alle Akkumulationspufferoperationen sind auf den Rahmen des aktuellen Bereichs beschränkt und werden identisch auf die Rot-, Grün-, Blau- und Alpha-Komponenten jedes Pixels angewendet. Wenn eine gl.Accum()-Operation zu einem Wert außerhalb des Bereichs von -1 bis 1 führt, sind die Inhalte einer Akkumulationspufferpixel-Komponente nicht definiert.

Die Operationen sind wie folgt:

#GL_ACCUM
Ermittelt R-, G-, B- und A-Werte aus dem aktuell zum Lesen ausgewählten Puffer. Siehe gl.ReadBuffer für Details. Jeder Komponentenwert wird durch 2^n - 1 geteilt, wobei n die Anzahl von Bits ist, die jeder Farbkomponente in dem gegenwärtig ausgewählten Puffer zugeordnet ist. Das Ergebnis ist ein Gleitkommawert im Bereich von 0 bis 1, der mit dem Wert multipliziert und zu der entsprechenden Pixelkomponente in dem Akkumulationspuffer addiert wird, wodurch der Akkumulationspuffer aktualisiert wird.

#GL_LOAD
Ähnlich wie #GL_ACCUM, außer dass der aktuelle Wert im Akkumulationspuffer bei der Berechnung des neuen Wertes nicht verwendet wird. Das heißt, die R-, G-, B- und A-Werte aus dem gegenwärtig ausgewählten Puffer werden durch 2^n - 1 geteilt, mit dem Wert multipliziert und dann in der entsprechenden Akkumulationspufferzelle gespeichert, wobei der aktuelle Wert überschrieben wird.

#GL_ADD
Fügt jedem R, G, B und A im Akkumulationspuffer einen Wert hinzu.

#GL_MULT
Multipliziert jedes R, G, B und A im Akkumulationspuffer mit dem Wert und gibt die skalierte Komponente an die entsprechende Akkumulationspufferposition zurück.

#GL_RETURN
Überträgt die Akkumulationspufferwerte in den Farbpuffer oder in den Puffer, der derzeit zum Schreiben ausgewählt wurde. Jede Komponente R, G, B und A wird mit einem Wert multipliziert, dann mit 2^n - 1 multipliziert, auf den Bereich [0,2^n - 1] fixiert und in der entsprechenden Anzeigepufferzelle gespeichert. Die einzigen Fragmentoperationen, die auf diese Übertragung angewendet werden, sind Pixelbesitz-, Schere-, Dither- und Farbschreibmasken.

Um den Akkumulationspuffer zu löschen, rufen Sie gl.ClearAccum() mit R-, G-, B- und A-Werten auf, um den Puffer zu setzen. Dann rufen Sie gl.Clear() mit aktiviertem Akkumulationspuffer auf.

Nur Pixel innerhalb der aktuellen Scherenbox werden durch eine gl.Accum()-Operation aktualisiert. Siehe glScissor für weitere Informationen über die Scherenbox.

Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.

Eingaben
op
spezifiziert die Akkumulationspufferoperation. Symbolische Konstanten #GL_ACCUM, #GL_LOAD, #GL_ADD, #GL_MULT und #GL_RETURN werden akzeptiert
value
gibt einen Gleitkommawert an, der in der Akkumulationspufferoperation verwendet wird. op legt fest, wie value verwendet wird
Fehler
#GL_INVALID_ENUM wird generiert, wenn op kein akzeptierter Wert ist.

#GL_INVALID_OPERATION wird generiert, wenn kein Akkumulationspuffer vorhanden ist.

#GL_INVALID_OPERATION wird generiert, wenn gl.Accum() zwischen gl.Begin() und gl.End() ausgeführt wird.

Verbundene get-operationen
gl.Get() mit dem Argument #GL_ACCUM_RED_BITS

gl.Get() mit dem Argument #GL_ACCUM_GREEN_BITS

gl.Get() mit dem Argument #GL_ACCUM_BLUE_BITS

gl.Get() mit dem Argument #GL_ACCUM_ALPHA_BITS


Navigation zeigen