Bezeichnung
gl.PixelTransfer -- stellt die Pixelübertragungsmodi ein
Übersicht
gl.PixelTransfer(pname, param)
Beschreibung
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:

Color
Jede der vier Farbkomponenten wird mit einem Skalierungsfaktor multipliziert und dann zu einem Biasfaktor addiert. Das heißt, die rote Komponente wird mit #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.

Color index
Jeder Farbindex wird um #GL_INDEX_SHIFT-Bits nach links verschoben; alle Bits, die über die Anzahl der vom Festkommaindex getragenen Bruchteilen hinausgehen, werden mit Nullen gefüllt. Wenn #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.

Depth
Jeder Tiefenwert wird mit #GL_DEPTH_SCALE multipliziert, zu #GL_DEPTH_BIAS addiert und dann auf den Bereich [0, 1] festgelegt.

Stencil
Jeder Index wird um #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.

Eingaben
pname
gibt den symbolischen Namen des zu setzenden Pixelübertragungsparameters an (siehe oben)
param
gibt den Wert an, auf den pname gesetzt ist
Fehler
#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.

Verbundene get-operationen
gl.Get() mit dem Argument #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


Navigation zeigen