gl.PixelTransfer(pname, param)
gl.PixelTransfer()
setzt Pixel-Transfer-Modi, die den Betrieb der
nachfolgenden Systeme beeinflussen: gl.CopyPixels(),
gl.CopyTexImage(), gl.CopyTexSubImage(),
gl.DrawPixels(), gl.ReadPixels(),
gl.TexImage(), gl.TexImage1D(),
gl.TexImage2D(), gl.TexSubImage(),
gl.TexSubImage1D() und gl.TexSubImage2D().
Die Algorithmen, die durch Pixelübertragungsmodi angegeben werden,
arbeiten mit Pixeln, nachdem sie aus dem Rahmenpuffer mit
gl.CopyPixels(), gl.CopyTexImage(),
gl.CopyTexSubImage(), gl.ReadPixels()
gelesen wurden oder falls sie aus dem Klientspeicher mit
gl.DrawPixels(), gl.TexImage(),
gl.TexImage1D(), gl.TexImage2D(),
gl.TexSubImage(), gl.TexSubImage1D()
und gl.TexSubImage2D() entpackt wurden.
Pixeltransferoperationen erfolgen in der gleichen Reihenfolge und auf die
gleiche Weise, unabhängig von dem Befehl, der zur Pixeloperation geführt hat.
Pixelspeichermodi steuern das Entpacken von Pixeln, die aus dem Klientspeicher
gelesen werden und das Packen von Pixeln, die wieder in den Klientspeicher
geschrieben werden. Siehe gl.PixelStore für Details.
Pixeltransferoperationen behandeln vier grundlegende Pixeltypen: Farbe, Farbindex, Tiefe und Schablone. Farbpixel bestehen aus vier Gleitkommawerten mit nicht angegebener Fangvorrichtung und Exponentialgrößen, skaliert so, dass 0 die Nullintensität und 1 die volle Intensität darstellt. Farbindizes bestehen aus einem einzigen Festpunktwert mit unbestimmter Genauigkeit rechts vom Binärpunkt. Tiefenpixel umfassen einen einzelnen Gleitkommawert mit nicht angegebener Fangvorrichtung und Exponentengrößen, skaliert so, dass 0,0 den minimalen Tiefenpufferwert und 1,0 den maximalen Tiefenpufferwert darstellt. Schließlich bestehen Schablonenpixel aus einem einzigen Festkommawert mit nicht angegebener Genauigkeit rechts neben dem Binärpunkt.
Die Pixelübertragungsvorgänge, die bei den vier grundlegenden Pixeltypen durchgeführt werden, sind wie folgt:
#GL_RED_SCALE
multipliziert, dann zu #GL_RED_BIAS
hinzugefügt; die grüne
Komponente wird mit #GL_GREEN_SCALE
multipliziert und dann zu #GL_GREEN_BIAS
hinzugefügt; die blaue Komponente wird mit #GL_BLUE_SCALE
multipliziert und
dann zu #GL_BLUE_BIAS
hinzugefügt; und die Alpha-Komponente wird mit
#GL_ALPHA_SCALE
multipliziert und dann zu #GL_ALPHA_BIAS
hinzugefügt. Nachdem
alle vier Farbkomponenten skaliert und voreingestellt sind, wird jede einzelne
auf den Bereich [0, 1] festgelegt. Alle Farb-, Skalierungs- und Voreinstellungswerte
werden mit gl.PixelTransfer()
angegeben. Wenn #GL_MAP_COLOR
True
ist, wird
jede Farbkomponente um die Größe der entsprechenden Farb-zu-Farb-Karte skaliert
und dann durch den Inhalt dieser Karte ersetzt, die von der skalierten
Komponente indiziert wird. Das heißt, die rote Komponente wird durch
#GL_PIXEL_MAP_R_TO_R_R_SIZE
skaliert und dann durch den Inhalt von
#GL_PIXEL_MAP_R_TO_TO_R
ersetzt, der von selbst indiziert wird. Die grüne
Komponente wird durch #GL_PIXEL_MAP_G_TO_G_G_SIZE
skaliert und dann durch
den Inhalt von #GL_PIXEL_MAP_G_TO_G
ersetzt, der von selbst indiziert wird.
Die blaue Komponente wird durch #GL_PIXEL_MAP_B_TO_B_B_SIZE
skaliert und dann
durch den Inhalt von #GL_PIXEL_MAP_B_TO_B
ersetzt, das von selbst indiziert
wird. Und die Alpha-Komponente wird durch #GL_PIXEL_MAP_A_TO_A_A_SIZE
skaliert
und dann durch den Inhalt von #GL_PIXEL_MAP_A_TO_A
ersetzt, der von selbst
indiziert wird. Alle aus den Karten entnommenen Komponenten werden dann in
den Bereich [0, 1] festgelegt. #GL_MAP_COLOR
wird mit gl.PixelTransfer()
angegeben. Der Inhalt der verschiedenen Karten wird durch die Angabe von
gl.PixelMap() bestimmt.
#GL_INDEX_SHIFT
negativ ist, ist die
Verschiebung nach rechts, auch hier wird mit Nullen gefüllt. Dann wird
#GL_INDEX_OFFSET
dem Index hinzugefügt. #GL_INDEX_SHIFT
und #GL_INDEX_OFFSET
werden mit gl.PixelTransfer()
angegeben.
Von diesem Punkt an variiert die Operation je nach dem erforderlichen
Format der resultierenden Pixel. Wenn die resultierenden Pixel in einen
Farbindexpuffer geschrieben werden sollen oder wenn sie im Format
#GL_COLOR_INDEX
in den Klient-Speicher zurückgelesen werden, werden die
Pixel weiterhin als Indizes behandelt. Wenn #GL_MAP_COLOR
True
ist, wird
jeder Index durch 2^n - 1 maskiert, wobei n #GL_PIXEL_MAP_I_TO_I_I_SI_SIZE
ist, ersetzt durch den Inhalt von #GL_PIXEL_MAP_I_TO_I
, indiziert durch den
maskierten Wert. #GL_MAP_COLOR
wird mit gl.PixelTransfer()
angegeben. Der
Inhalt der Indexkarte wird mit glPixelMap festgelegt.
Wenn die resultierenden Pixel in einen RGBA-Farbpuffer geschrieben werden
sollen oder wenn sie in einem anderen Format als #GL_COLOR_INDEX
in den
Klient-Speicher zurückgelesen werden, werden die Pixel von Indizes in
Farben umgewandelt, indem auf die vier Karten #GL_PIXEL_MAP_I_TO_R
,
#GL_PIXEL_MAP_I_TO_G
, #GL_PIXEL_I_TO_G
, #GL_PIXEL_MAP_I_I_TO_B
und
#GL_PIXEL_MAP_I_TO_A
Bezug genommen wird. Vor der Dereferenzierung wird
der Index durch 2^n - 1 maskiert, wobei n #GL_PIXEL_MAP_I_TO_R_SIZE
für
die rote Karte, #GL_PIXEL_MAP_I_I_TO_G_SIZE
für die grüne Karte,
#GL_PIXEL_MAP_I_TO_B_SIZE
für die blaue Karte und #GL_PIXEL_MAP_I_TO_A_SIZE
für die Alpha-Karte ist. Alle aus den Karten entnommenen Komponenten werden
dann in den Bereich [0, 1] festgelegt. Der Inhalt der vier Karten wird
mit gl.PixelMap() festgelegt.
#GL_DEPTH_SCALE
multipliziert, zu #GL_DEPTH_BIAS
addiert und dann auf den Bereich [0, 1] festgelegt.
#GL_INDEX_SHIFT
Bits verschoben genau wie ein Farbindex und
dann zu #GL_INDEX_OFFSET
hinzugefügt. Wenn #GL_MAP_STENCIL
True
ist, wird
jeder Index durch 2^n - 1 maskiert, wobei n #GL_PIXEL_MAP_S_TO_S_SIZE
ist,
dann ersetzt durch den Inhalt von #GL_PIXEL_MAP_S_TO_S_TO_S
, indiziert
durch den maskierten Wert.
Weitere Informationen finden Sie in einem OpenGL-Referenzhandbuch.
pname
gesetzt ist#GL_INVALID_ENUM
wird erzeugt, wenn pname
kein akzeptierter Wert ist.
#GL_INVALID_OPERATION
wird erzeugt, wenn gl.PixelTransfer()
zwischen
gl.Begin() und gl.End() ausgeführt wird.
#GL_MAP_COLOR
gl.Get() mit dem Argument #GL_MAP_STENCIL
gl.Get() mit dem Argument #GL_INDEX_SHIFT
gl.Get() mit dem Argument #GL_INDEX_OFFSET
gl.Get() mit dem Argument #GL_RED_SCALE
gl.Get() mit dem Argument #GL_RED_BIAS
gl.Get() mit dem Argument #GL_GREEN_SCALE
gl.Get() mit dem Argument #GL_GREEN_BIAS
gl.Get() mit dem Argument #GL_BLUE_SCALE
gl.Get() mit dem Argument #GL_BLUE_BIAS
gl.Get() mit dem Argument #GL_ALPHA_SCALE
gl.Get() mit dem Argument #GL_ALPHA_BIAS
gl.Get() mit dem Argument #GL_DEPTH_SCALE
gl.Get() mit dem Argument #GL_DEPTH_BIAS