glAccum
Inhaltsverzeichnis
glAccum
Name
glAccum spezifiziert die Betriebsart des Accumulation-Buffers.
Delphi-Spezifikation
procedure glAccum(op : GLenum; value : GLfloat);
Parameter
op | Bestimmt die Betriebsart des Accumulation-Buffers.
Es werden die folgenden fünf symbolischen Konstanten aktzeptiert: GL_ACCUM, GL_LOAD, GL_ADD, GL_MULT, GL_RETURN |
---|---|
value | Eine Fließkommazahl, die je nach Betriebsart (op) des Accumulation-Buffers unterschiedlich verwendet wird. |
Beschreibung
Der Accumulation-Buffer ist ein erweiterter Color-Buffer. Allerdings wird nicht direkt in den Accumulation-Buffer gerendert. Stattdessen wird nach dem Rendern in einen Color-Buffer der Inhalt des Accumulation-Buffers geändert, wobei die Betriebsart des Accumulation-Buffers darüber entscheidet, wie dies genau geschieht. Mit Hilfe des Accumulation-Buffers lassen sich z.B. Effekte wie Antialiasing, Bewegungs- und Tiefenunschärfe erzeugen, indem man Szenen mehrmals mit unterschiedlichen Transformationsmatritzen rendert und im Accumulation-Buffer kombiniert.
Jeder Pixel im Accumulation-Buffer enthält Rot-, Grün-, Blau- und Alphawerte im Bereich von 0 bis 1. Dabei bilden die Pixel im Accumulation-Buffer eins zu eins auf die Pixel im Framebuffer ab.
Folgende Funktionsmodi gibt es für den Accumulation-Buffer:
GL_ACCUM
- Nimmt Farbwerte (RGBA) aus dem gegenwärtig per glReadBuffer selektierten Color-Buffer und bildet die Farbwerte aus dem Intervall [0, 255]* auf Fließkommzahlen im Intervall [0,1] ab. (Und zwar linear, wobei 0 bestehen bleibt und 255 zu 1 wird.)
- Jeder Farbwert wird nun mit dem beim Aufruf von glAccum als value übergebenen Wert multipliziert und zur entsprechenden Pixelkomponente im Accumulation-Buffer hinzugefügt.
GL_LOAD
- Die Berechnung läuft wie bei GL_ACCUM, nur das am Ende die Farbwerte nicht zu den bereits im Accumulation-Buffer stehenden, hinzuaddiert werden sondern diese überschreiben.
GL_ADD
- Zu jeder im Accumulation-Buffer stehenden Farbkomponente wird value hinzuaddiert.
GL_MULT
- Jede im Accumulation-Buffer stehenden Farbkomponente wird mit value multipliziert.
GL_RETURN
- Funktioniert wie GL_ACCUM nur andersrum: Die Farbwerte des Accumulation-Buffers werden mit value multipliziert, auf das Intervall [0, 255]* abgebildet (und dabei u.U. geclampt) und in den gerade aktiven Color-Buffer geschrieben.
Um den Accumulation-Buffer zu löschen, kann der Befehl glClear benutzt werden. Mit glClearAccum lassen sich die beim Löschen geschriebenen Farbwerte festlegen.
*) Dieses Intervall bezieht sich auf 32bit Fartiefe, die heutzutage wohl als Standard angesehen werden darf. Bei 16bit Farbtiefe sieht der Bereich natürlich anders aus.
Hinweise
Nur die Pixel innerhalb der Scissor-Box werden beachtet. Diese lässt sich mit glScissor setzen.
Zugehörige Wertrückgaben
glGet mit dem Token GL_ACCUM_RED_BITS
glGet mit dem Token GL_ACCUM_GREEN_BITS
glGet mit dem Token GL_ACCUM_BLUE_BITS
glGet mit dem Token GL_ACCUM_ALPHA_BITS
Fehlermeldungen
GL_INVALID_ENUM wird ausgelöst, wenn op einen ungültigen Wert besitzt.
GL_INVALID_OPERATION wird ausgelöst, wenn es keinen Accumulation-Buffer gibt oder der Befehl innerhalb eines glBegin/glEnd-Blocks aufgerufen wird.
Siehe auch
glBegin, glBlendFunc, glClear, glClearAccum, glCopyPixels, glEnd, glGet, glLogicOp, glPixelStore, glPixelTransfer, glReadBuffer, glReadPixels, glScissor, glStencilOp