gl.PixelStore(pname, param)
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
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
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
#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
#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
#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
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
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
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
#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
#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
#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
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.
pname
gesetzt ist#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.
#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