glPixelTransfer

Aus DGL Wiki
Wechseln zu: Navigation, Suche

glPixelTransfer

Name

glPixelTransferi, glPixelTransferf - Bestimmt den Pixeltransfer-Modus



Delphi-Spezifikation

procedure glPixelTransferi(pname : GLenum; param : GLint)
procedure glPixelTransferf(pname : GLenum; param : GLfloat)



Parameter

pname Gibt den symbolischen Namen des Pixeltransfer-Parameters an. Muss eine der folgenden Konstanten sein:

GL_MAP_COLOR, GL_MAP_STENCIL, GL_INDEX_SHIFT, GL_INDEX_OFFSET, GL_RED_SCALE, GL_RED_BIAS, GL_GREEN_SCALE, GL_GREEN_BIAS, GL_BLUE_SCALE, GL_BLUE_BIAS, GL_ALPHA_SCALE, GL_ALPHA_BIAS, GL_DEPTH_SCALE oder GL_DEPTH_BIAS.

param Gibt den Wert an, dem pname zugewiesen wird.



Beschreibung

glPixelTransfer setzt die Pixeltransfer-Modi, die die Ausführung der untergeordneten Funtkionen

beeinflussen.
Die Algorithmen, die durch die Pixeltransfer-Modi spezifizert werden, werden nach dem Lesen vom Framebuffer auf die Pixels angewendet (bei glCopyPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D und glReadPixels) oder nach dem Entpacken aus dem Client-Speicher (bei glDrawPixels, glTexImage1D, glTexImage2D, glTexSubImage1D und glTexSubImage2D.
Pixeltransfer-Operationen werden in der selben Reihenfolge und Weise vorgenommen, unabhängig vom Ergebnis der Pixeloperation. Die Modi zur Pixel-Speicherung (siehe glPixelStore kontrollieren das Entpacken der Pixel, die aus dem Client-Speicher ausgelesen werden und das Packen der Pixel, die wieder in den Client-Speicher geschrieben werden.


Pixeltransfer-Operationen behandeln vier grundlegende Pixeltypen: color, color index, depth und stencil.
color-Pixel bestehen aus vier Fließkomma-Zahlen mit unbestimmter Mantissa und Exponenten, die die Größe angeben, so skaliert, dass 0 null und 1 voller Intensität entsprichen.
color-Indices bestehen aus einer einzelnen Fließkomma-Zahl mit unbestimmter Präzision hinter dem Komma.
depth-Pixel beinhalten eine einzelne Fließkomma-Zahl mit unbestimmter Mantissa und Exponenten, die die Größe angeben, so skaliert, dass 0.0 dem minimalen bzw 1.0 dem maximalen Depth-Buffer-Wert entsprichen.
stencil-Pixel bestehen aus einer einzelnen Fließkomma-Zahl, mit unbestimmter Präzision hinter dem Komma.

color:

Jede der vier Farbkomponenten wird mit einem Skalierungsfaktor multipliziert und dann zu einem bias-Faktor addiert. Die rote Farbkomponente wird mit GL_RED_SCALE multipliziert und dann zu GL_RED_BIAS addiert. Mit den grünen und blauen Farbkomponenten und mit dem Alphawert verhält es sich entsprechend. Die Ergebnisse dieser vier Operationen werden jeweils an den [0,1]-Bereich angepasst. Alle Farb-, Skalierungs- und Biaswerte werden mit glPixelTransfer angegeben.


Hat GL_MAP_COLOR den Wert true, wird jede Farbkomponente mit der zugehörigen color-to-color-Map skaliert und dann durch den Inhalt dieser Map, angegeben durch die skalierte Komponente, ersetzt. So wird die rote Komponente durch GL_PIXEL_MAP_R_TO_R_SIZE skaliert und dann durch den Inhalt von GL_PIXEL_MAP_R_TO_R ersetzt. Mit den anderen drei Werten verhält es sich analog, die Konstanten heissen dann dementsprechend GL_PIXEL_MAP_G_TO_G_SIZE / GL_PIXEL_MAP_G_TO_G, GL_PIXEL_MAP_B_TO_B_SIZE / GL_PIXEL_MAP_B_TO_B bzw. GL_PIXEL_MAP_A_TO_A_SIZE/ GL_PIXEL_MAP_A_TO_A. Alle Komponenten, die den Maps entnommen werden, werden anschließend an den [0,1]-Bereich angepasst. GL_MAP_COLOR wird durch glPixelTransfer festgelegt. Die Inhalte der verschiedenen Maps werden mit glPixelMap festgelegt.


color index:

Jeder Farbindex wird um so viele Bits nach links verschoben, wie in GL_INDEX_SHIFT angegeben sind. Alle Bits, die sich zwischen dem ursprünglichen Wert und dem Punkt befinden, werden mit Nullen aufgefüllt. Ist GL_INDEX_SHIFT negativ, wird nach rechts verschoben und wieder mit Nullen aufgefüllt. Dann wird GL_INDEX_OFFSET zu dem Index-Wert hinzuaddiert. :GL_INDEX_SHIFT und GL_INDEX_OFFSET werden mit glPixelTransfer festgelegt.
In diesem Schritt hängt das weitere Verfahren vom verlangten Format der resultierenden Pixel ab.
Wenn die Pixel in einen color-index-Puffer geschrieben werden sollen oder wenn sie zurück in den client-Speicher gelesen werden sollen (im Format GL_COLOR_INDEX), werden die Pixel weiterhin als Indices behandelt. Hat GL_MAP_COLOR den Wert true, wird aus jedem Index der Bereich 2n-1 (n hat den Wert von GL_PIXEL_MAP_I_TO_I_SIZE) entnommen, und anschließend durch den Inhalt von GL_PIXEL_MAP_I_TO_I ersetzt. GL_MAP_COLOR widr durch glPixelTransfer festgelegt. Der Inhalt der Index-Map wird mit glPixelMap bestimmt.
Sollen die resultierenden Pixel in einen RGBA-Farb-Puffer geschrieben werden, oder wenn sie in den client-Speicher in einem anderen Format als dem in GL_COLOR_INDEX angegebenen zurückgelesen werden sollen, werden die Pixel von Indices zu Farben konvertiert, bei Beziehung auf die vier Maps GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B und GL_PIXEL_MAP_I_TO_A. Der Index wird auf den Bereich 2n-1 eingeschränkt, wobei sich n für die rote Map auf GL_PIXEL_MAP_I_TO_R_SIZE, für die grüne Map auf GL_PIXEL_MAP_I_TO_G_SIZE, für die blaue Map auf GL_PIXEL_MAP_I_TO_B_SIZE und für die Alpha-Map auf GL_PIXEL_MAP_I_TO_A_SIZE bezieht. Alle Komponenten, die den Maps entnommen wurden, werden dann auf den [0,1]-Bereich angepasst. Die Inhalte der vier Maps werden mit glPixelMap festgelegt.


depth:

Jeder Tiefenwert wird mit GL_DEPTH_SCALE multipliziert und zu GL_DEPTH_BIAS addiert. Anschließend wird das Ergebnis auf das Interval [0,1] beschränkt.


stencil:

Jeder Index wird, genau wie die Farbindizes, GL_INDEX_SHIFT Bits weit verschoben und dann auf GL_INDEX_OFFSET addiert.
Wenn GL_MAP_STENCIL true ist, wird jeder Index durch 2^n -1 maskiert, wobei n gleich GL_PIXEL_MAP_S_TO_S_SIZE ist, und dann durch den Inhalt von GL_PIXEL_MAP_S_TO_S, indexiert durch den maskierten Wert, ersetzt.


Die nachfolgende Tabelle zeigt den Typ, Standardwert, und Wertebereich für jeden Pixeltransferparameter der mit glPixelTransfer gesetzt werden kann.

pname type initial value valid range
GL_MAP_COLOR boolean false true/false
GL_MAP_STENCIL boolean false true/false
GL_INDEX_SHIFT integer 0 (-oo,oo)
GL_INDEX_OFFSET integer 0 (-oo,oo)
GL_RED_SCALE float 1 (-oo,oo)
GL_GREEN_SCALE float 1 (-oo,oo)
GL_BLUE_SCALE float 1 (-oo,oo)
GL_ALPHA_SCALE float 1 (-oo,oo)
GL_DEPTH_SCALE float 1 (-oo,oo)
GL_RED_BIAS float 0 (-oo,oo)
GL_GREEN_BIAS float 0 (-oo,oo)
GL_BLUE_BIAS float 0 (-oo,oo)
GL_ALPHA_BIAS float 0 (-oo,oo)
GL_DEPTH_BIAS float 0 (-oo,oo)

glPixelTransferf kann verwendet werden, um beliebige Pixeltransfer-Parameter zu übergeben. Ist der Parameter-Typ eine Bool`sche Variable, gilt 0 als false und alle anderen Werte als true. Ist pname eine Integer-Variable, wird param auf eine ganzen Zahl gerundet.

Analog dazu wird auch glPixelTransferi dazu verwendet, beliebige Pixeltransfer-Parameter festzulegen. Bool`sche Parameter haben den Wert false wenn param 0 ist, andernfalls hat der Parameter den Wert true. param wird vor der Zuordnung zu einem Fließkommawert-Parameter in eine FLießkommazahl umgewandelt.

Hinweise

Sollte glCopyPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glDrawPixels, glReadPixels, glTexImage1D, glTexImage2D, glTexSubImage1D oder glTexSubImage2D in einer Displayliste ausgeführt werden (siehe glNewList und glCallList), werden die Pixeltransfer-Modi, die beim Aufruf der Displayliste galten, verwendet. Diese unterscheiden sich eventuell von den Einstellungen, die gemacht wurden, als die jeweilige Funktion in die Displayliste kompiliert wurde.

Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn pname keinen zulässigen Wert hat.
GL_INVALID_OPERATION wird generiert, wenn glPixelTransfer innerhalb eines glBegin-glEnd Blocks aufgerufen wird.

Zugehörige Wertrückgaben

glGet mit Token GL_MAP_COLOR
glGet mit Token GL_MAP_STENCIL
glGet mit Token GL_INDEX_SHIFT
glGet mit Token GL_INDEX_OFFSET
glGet mit Token GL_RED_SCALE
glGet mit Token GL_RED_BIAS
glGet mit Token GL_GREEN_SCALE
glGet mit Token GL_GREEN_BIAS
glGet mit Token GL_BLUE_SCALE
glGet mit Token GL_BLUE_BIAS
glGet mit Token GL_ALPHA_SCALE
glGet mit Token GL_ALPHA_BIAS
glGet mit Token GL_DEPTH_SCALE
glGet mit Token GL_DEPTH_BIAS



Siehe auch

glCallList, glCopyPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glDrawPixels, glNewList, glPixelMap, glPixelStore, glPixelZoom, glReadPixels, glTexImage1D, glTexImage2D, glTexSubImage1D, glTexSubImage2D


'