Bezeichnung
gl.PixelStore -- stellt den Pixelspeichermodi ein
Übersicht
gl.PixelStore(pname, param)
Beschreibung
gl.PixelStore() setzt Pixelspeichermodi, die den Betrieb der nachfolgenden gl.DrawPixels() und gl.ReadPixels() beeinflussen, sowie das Entpacken von Polygon-Punktemustern, Bitmaps und Texturmuster. Siehe gl.PolygonStipple für Details. Siehe gl.Bitmap für Details. Siehe gl.TexImage für Details.

pname ist eine symbolische Konstante, die den zu setzenden Parameter angibt und param ist der neue Wert. Sechs der zwölf Speicherparameter beeinflussen, wie Pixeldaten an den Klientspeicher zurückgegeben werden. Sie sind wie folgt:

#GL_PACK_SWAP_BYTES
Wenn True, wird die Byte-Ordnung für Multibyte-Farbkomponenten, Tiefenkomponenten, Farbindizes oder Schablonenindizes umgekehrt. Das heißt, wenn eine 4-Byte-Komponente aus den Bytes b0, b1, b2, b3 besteht, wird sie im Speicher als b3, b2, b1, b0 gespeichert, wenn #GL_PACK_SWAP_BYTES True ist. #GL_PACK_SWAP_BYTES hat keinen Einfluss auf die Speicherordnung der Komponenten innerhalb eines Pixels, sondern nur auf die Reihenfolge der Bytes innerhalb der Komponenten oder Indizes. So werden beispielsweise die drei Komponenten eines Formats #GL_RGB immer mit roten ersten, grünen zweiten und blauen dritten Pixeln gespeichert, unabhängig vom Wert von #GL_PACK_SWAP_BYTES.

#GL_PACK_LSB_FIRST
Wenn True, werden Bits innerhalb eines Bytes von niederwertig bis höchstwertig angeordnet; andernfalls ist das erste Bit in jedem Byte das bedeutendste. Dieser Parameter ist nur für Bitmap-Daten von Bedeutung.

#GL_PACK_ROW_LENGTH
Wenn größer als 0, definiert #GL_PACK_ROW_LENGTH die Anzahl der Pixel in einer Zeile. Wenn das erste Pixel einer Reihe an der Position p im Speicher platziert wird, dann wird die Position des ersten Pixels der nächsten Reihe durch Überspringen einer bestimmten Anzahl von Komponenten oder Indizes erhalten. Siehe in einem OpenGL-Referenzhandbuch für Einzelheiten.

#GL_PACK_SKIP_PIXELS
Dieser Wert wird dem Programmierer zur Verfügung gestellt; er bietet keine Funktionalität, die nicht durch einfaches Erhöhen des an gl.ReadPixels() übergebenen Zeigers dupliziert werden kann. Das Setzen von #GL_PACK_SKIP_PIXELS auf i entspricht dem Inkrementieren des Zeigers um in Komponenten oder Indizes, wobei n die Anzahl der Komponenten oder Indizes in jedem Pixel ist.

#GL_PACK_SKIP_ROWS
Dieser Wert wird dem Programmierer zur Verfügung gestellt; er bietet keine Funktionalität, die nicht durch einfaches Erhöhen des an gl.ReadPixels() übergebenen Zeigers dupliziert werden kann. Das Setzen von #GL_PACK_SKIP_ROWS auf j entspricht dem Inkrementieren des Zeigers um jm Komponenten oder Indizes, wobei m die Anzahl der Komponenten oder Indizes pro Zeile ist, wie sie gerade im Abschnitt #GL_PACK_ROW_LENGTH berechnet wurde.

#GL_PACK_ALIGNMENT
Gibt die Ausrichtungsanforderungen für den Anfang jeder Pixelzeile im Speicher an. Die zulässigen Werte sind 1 (Byte-Ausrichtung), 2 (Zeilen, die auf geradzahlige Bytes ausgerichtet sind), 4 (Wort-Ausrichtung) und 8 (Zeilen, die an Doppelwortgrenzen beginnen).

Die anderen sechs der zwölf Speicherparameter beeinflussen, wie Pixeldaten aus dem Klientspeicher gelesen werden. Diese Werte sind dann von Bedeutung für die Befehle gl.DrawPixels(), gl.TexImage() und weiterhin auch für gl.TexImage1D(), gl.TexImage2D(), gl.TexSubImage(), gl.TexSubImage1D(), gl.TexSubImage2D(), gl.Bitmap() und gl.PolygonStipple(). Sie sind wie folgt:

#GL_UNPACK_SWAP_BYTES
Wenn True, wird die Byte-Ordnung für Multibyte-Farbkomponenten, Tiefenkomponenten, Farbindizes oder Schablonenindizes umgekehrt. Das heißt, wenn eine 4-Byte-Komponente aus Bytes b0, b1, b2, b3 besteht, wird sie als b3, b2, b1, b1, b0 aus dem Speicher genommen, wenn #GL_UNPACK_SWAP_BYTES True ist. #GL_UNPACK_SWAP_BYTES hat keinen Einfluss auf die Speicherordnung der Komponenten innerhalb eines Pixels, sondern nur auf die Reihenfolge der Bytes innerhalb der Komponenten oder Indizes. So werden beispielsweise die drei Komponenten eines Pixels im Format #GL_RGB immer mit rotem ersten, grünen zweiten und blauen dritten Pixel gespeichert, unabhängig vom Wert von #GL_UNPACK_SWAP_BYTES.

#GL_UNPACK_LSB_FIRST
Wenn True, werden Bits innerhalb eines Bytes von niederwertig bis höchstwertig angeordnet; andernfalls ist das erste Bit in jedem Byte das bedeutendste. Dies ist nur für Bitmap-Daten relevant.

#GL_UNPACK_ROW_LENGTH
Wenn größer als 0, definiert #GL_UNPACK_ROW_LENGTH die Anzahl der Pixel in einer Zeile. Wenn das erste Pixel einer Reihe an der Position p im Speicher platziert wird, dann wird die Position des ersten Pixels der nächsten Reihe durch Überspringen einer bestimmten Anzahl von Komponenten oder Indizes erhalten. Siehe OpenGL-Referenzhandbuch für Einzelheiten.

#GL_UNPACK_SKIP_PIXELS
Dieser Wert wird dem Programmierer als Annehmlichkeit zur Verfügung gestellt; er bietet keine Funktionalität, die nicht durch Inkrementieren des übergebenen Zeigers durch gl.DrawPixels(), oder mit gl.TexImage(), oder auch mit gl.TexImage1D() und gl.TexImage2D(), zusätzlich auch mit gl.TexSubImage(), oder mit gl.TexSubImage1D() und gl.TexSubImage2D(), gl.Bitmap(), oder mit gl.PolygonStipple() dupliziert werden kann. Das Setzen von #GL_UNPACK_SKIP_PIXELS auf i entspricht dem Inkrementieren des Zeigers um in Komponenten oder Indizes, wobei n die Anzahl der Komponenten oder Indizes in jedem Pixel ist.

#GL_UNPACK_SKIP_ROWS
Dieser Wert wird dem Programmierer als Annehmlichkeit zur Verfügung gestellt; er bietet keine Funktionalität, die nicht durch Inkrementieren des übergebenen Zeigers durch gl.DrawPixels(), oder mit gl.TexImage(), oder auch mit gl.TexImage1D() und gl.TexImage2D(), zusätzlich auch mit gl.TexSubImage(), oder mit gl.TexSubImage1D() und gl.TexSubImage2D(), gl.Bitmap(), oder mit gl.PolygonStipple() dupliziert werden kann. Das Setzen von #GL_UNPACK_SKIP_ROWS auf j entspricht dem Inkrementieren des Zeigers um jk-Komponenten oder -Indizes, wobei k die Anzahl der Komponenten oder -Indizes pro Zeile ist, wie gerade im Abschnitt #GL_UNPACK_ROW_LENGTH berechnet.

#GL_UNPACK_ALIGNMENT
Gibt die Ausrichtungsanforderungen für den Anfang jeder Pixelzeile im Speicher an. Die zulässigen Werte sind 1 (Byte-Ausrichtung), 2 (Zeilen, die auf geradzahlige Bytes ausgerichtet sind), 4 (Wort-Ausrichtung) und 8 (Zeilen, die an Doppelwortgrenzen beginnen).

Die folgende Tabelle enthält den Typ, den Anfangswert und den Bereich der gültigen Werte für jeden Speicherparameter, der mit gl.PixelStore() eingestellt werden kann.

 
pname                 |  Type   | Default | Valid Range
-------------------------------------------------------
#GL_PACK_SWAP_BYTES   | boolean | false   | true or false
#GL_PACK_LSB_FIRST    | boolean | false   | true or false
#GL_PACK_ROW_LENGTH   | integer | 0       | [0,oo)
#GL_PACK_SKIP_ROWS    | integer | 0       | [0,oo)
#GL_PACK_SKIP_PIXELS  | integer | 0       | [0,oo)
#GL_PACK_ALIGNMENT    | integer | 4       | 1, 2, 4, or 8
#GL_UNPACK_SWAP_BYTES | boolean | false   | true or false
#GL_UNPACK_LSB_FIRST  | boolean | false   | true or false
#GL_UNPACK_ROW_LENGTH | integer | 0       | [0,oo)
#GL_UNPACK_SKIP_ROWS  | integer | 0       | [0,oo)
#GL_UNPACK_SKIP_PIXELS| integer | 0       | [0,oo)
#GL_UNPACK_ALIGNMENT  | integer | 4       | 1, 2, 4, or 8

Die Pixelspeichermodi, die wirksam sind, wenn gl.DrawPixels(), gl.ReadPixels() oder gl.TexImage(), gl.TexImage1D() oder gl.TexImage2D(), oder gl.TexSubImage(), gl.TexSubImage1D(), oder auch GL's gl.TexSubImage2D() oder gl.Bitmap(), oder gl.PolygonStipple() in eine Display-Liste gestellt werden, die die Interpretation von Speicherdaten steuert. Die Pixelspeichermodi, die beim Ausführen einer Display-Liste wirksam werden, sind nicht signifikant.

Pixelspeichermodi sind Klient-Zustände und mit gl.PushClientAttrib() und gl.PopClientAttrib() angestoßen und wiederhergestellt werden.

Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.

Eingaben
pname
gibt den symbolischen Namen des zu setzenden Parameters an (siehe oben für mögliche Modi)
param
gibt den Wert an, auf den pname gesetzt ist
Fehler
#GL_INVALID_ENUM wird erzeugt, wenn pname kein akzeptierter Wert ist.

#GL_INVALID_VALUE wird erzeugt, wenn eine negative Zeilenlänge, Pixel-Sprung oder Zeilen-Sprung-Wert angegeben ist, oder wenn die Ausrichtung von 1, 2, 4 oder 8 verschieden ist.

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

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

gl.Get() mit dem Argument #GL_PACK_LSB_FIRST

gl.Get() mit dem Argument #GL_PACK_ROW_LENGTH

gl.Get() mit dem Argument #GL_PACK_SKIP_ROWS

gl.Get() mit dem Argument #GL_PACK_SKIP_PIXELS

gl.Get() mit dem Argument #GL_PACK_ALIGNMENT

gl.Get() mit dem Argument #GL_UNPACK_SWAP_BYTES

gl.Get() mit dem Argument #GL_UNPACK_LSB_FIRST

gl.Get() mit dem Argument #GL_UNPACK_ROW_LENGTH

gl.Get() mit dem Argument #GL_UNPACK_SKIP_ROWS

gl.Get() mit dem Argument #GL_UNPACK_SKIP_PIXELS

gl.Get() mit dem Argument #GL_UNPACK_ALIGNMENT


Navigation zeigen