glPixelTransfer: Unterschied zwischen den Versionen
(→Parameter) |
Flash (Diskussion | Beiträge) K (→Hinweise) |
||
(16 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
= glPixelTransfer = | = glPixelTransfer = | ||
− | + | ||
+ | |||
== Name == | == Name == | ||
− | ''' | + | '''glPixelTransferi''', '''glPixelTransferf''' - Bestimmt den Pixeltransfer-Modus |
+ | |||
+ | |||
+ | |||
− | |||
== Delphi-Spezifikation == | == Delphi-Spezifikation == | ||
procedure '''glPixelTransferi'''(''pname'' : GLenum; ''param'' : GLint) | procedure '''glPixelTransferi'''(''pname'' : GLenum; ''param'' : GLint) | ||
+ | procedure '''glPixelTransferf'''(''pname'' : GLenum; ''param'' : GLfloat) | ||
+ | |||
− | |||
− | |||
== Parameter == | == Parameter == | ||
Zeile 24: | Zeile 27: | ||
|} | |} | ||
− | + | ||
+ | |||
== Beschreibung == | == Beschreibung == | ||
− | '''glPixelTransfer''' setzt die Pixeltransfer-Modi, die die Ausführung der untergeordneten Funtkionen [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], [[glDrawPixels]], [[glReadPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]] und [[glTexSubImage2D]] 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. | + | '''glPixelTransfer''' setzt die Pixeltransfer-Modi, die die Ausführung der untergeordneten Funtkionen |
− | + | *[[glCopyPixels]], | |
+ | *[[glCopyTexImage1D]], [[glCopyTexImage2D]], | ||
+ | *[[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], | ||
+ | *[[glDrawPixels]], | ||
+ | *[[glReadPixels]], | ||
+ | *[[glTexImage1D]], [[glTexImage2D]], | ||
+ | *[[glTexSubImage1D]] und [[glTexSubImage2D]] | ||
+ | beeinflussen. <br> | ||
+ | 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]]. <br> | ||
+ | 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''. <br> | Pixeltransfer-Operationen behandeln vier grundlegende Pixeltypen: ''color'', ''color index'', ''depth'' und ''stencil''. <br> | ||
− | color-Pixel bestehen aus vier Fließkomma-Zahlen mit unbestimmter | + | color-Pixel bestehen aus vier Fließkomma-Zahlen mit unbestimmter [http://mathworld.wolfram.com/Mantissa.html Mantissa] und Exponenten, die die Größe angeben, so skaliert, dass 0 null und 1 voller Intensität entsprichen.<br> |
color-Indices bestehen aus einer einzelnen Fließkomma-Zahl mit unbestimmter Präzision hinter dem Komma. <br> | color-Indices bestehen aus einer einzelnen Fließkomma-Zahl mit unbestimmter Präzision hinter dem Komma. <br> | ||
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.<br> | 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.<br> | ||
− | stencil-Pixel bestehen aus einer einzelnen Fließkomma-Zahl, mit unbestimmter Präzision hinter dem Komma. | + | stencil-Pixel bestehen aus einer einzelnen Fließkomma-Zahl, mit unbestimmter Präzision hinter dem Komma.<br> |
+ | <br> | ||
− | ''' | + | '''color:'''<br> |
− | + | :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.<br> | |
− | + | <br> | |
− | + | :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.<br> | |
− | + | <br> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | '''color index:'''<br> | |
− | + | :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.<br> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | :In diesem Schritt hängt das weitere Verfahren vom verlangten Format der resultierenden Pixel ab.<br> | |
− | + | :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.<br> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | :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. | ||
+ | <div align="center"> | ||
+ | {|{{Prettytable_B1}} | ||
+ | !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) | ||
+ | |- | ||
+ | |} | ||
+ | </div> | ||
+ | '''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.<br> | ||
+ | <br> | ||
+ | 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. | ||
+ | <br> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Hinweise == | == 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 | + | 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. |
<br> | <br> | ||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
'''GL_INVALID_ENUM''' wird generiert, wenn ''pname'' keinen zulässigen Wert hat.<br> | '''GL_INVALID_ENUM''' wird generiert, wenn ''pname'' keinen zulässigen Wert hat.<br> | ||
Zeile 174: | Zeile 127: | ||
== Zugehörige Wertrückgaben == | == Zugehörige Wertrückgaben == | ||
− | [[glGet]] mit Token [[glGet#GL_MAP_COLOR|GL_MAP_COLOR]] | + | [[glGet]] mit Token [[glGet#GL_MAP_COLOR|GL_MAP_COLOR]]<br> |
− | [[glGet]] mit Token [[glGet#GL_MAP_STENCIL|GL_MAP_STENCIL]] | + | [[glGet]] mit Token [[glGet#GL_MAP_STENCIL|GL_MAP_STENCIL]]<br> |
− | [[glGet]] mit Token [[glGet#GL_INDEX_SHIFT|GL_INDEX_SHIFT]] | + | [[glGet]] mit Token [[glGet#GL_INDEX_SHIFT|GL_INDEX_SHIFT]]<br> |
− | [[glGet]] mit Token [[glGet#GL_INDEX_OFFSET|GL_INDEX_OFFSET]] | + | [[glGet]] mit Token [[glGet#GL_INDEX_OFFSET|GL_INDEX_OFFSET]]<br> |
− | [[glGet]] mit Token [[glGet#GL_RED_SCALE|GL_RED_SCALE]] | + | [[glGet]] mit Token [[glGet#GL_RED_SCALE|GL_RED_SCALE]]<br> |
− | [[glGet]] mit Token [[glGet#GL_RED_BIAS|GL_RED_BIAS]] | + | [[glGet]] mit Token [[glGet#GL_RED_BIAS|GL_RED_BIAS]]<br> |
− | [[glGet]] mit Token [[glGet#GL_GREEN_SCALE|GL_GREEN_SCALE]] | + | [[glGet]] mit Token [[glGet#GL_GREEN_SCALE|GL_GREEN_SCALE]]<br> |
− | [[glGet]] mit Token [[glGet#GL_GREEN_BIAS|GL_GREEN_BIAS]] | + | [[glGet]] mit Token [[glGet#GL_GREEN_BIAS|GL_GREEN_BIAS]]<br> |
− | [[glGet]] mit Token [[glGet#GL_BLUE_SCALE|GL_BLUE_SCALE]] | + | [[glGet]] mit Token [[glGet#GL_BLUE_SCALE|GL_BLUE_SCALE]]<br> |
− | [[glGet]] mit Token [[glGet#GL_BLUE_BIAS|GL_BLUE_BIAS]] | + | [[glGet]] mit Token [[glGet#GL_BLUE_BIAS|GL_BLUE_BIAS]]<br> |
− | [[glGet]] mit Token [[glGet#GL_ALPHA_SCALE|GL_ALPHA_SCALE]] | + | [[glGet]] mit Token [[glGet#GL_ALPHA_SCALE|GL_ALPHA_SCALE]]<br> |
− | [[glGet]] mit Token [[glGet#GL_ALPHA_BIAS|GL_ALPHA_BIAS]] | + | [[glGet]] mit Token [[glGet#GL_ALPHA_BIAS|GL_ALPHA_BIAS]]<br> |
− | [[glGet]] mit Token [[glGet#GL_DEPTH_SCALE|GL_DEPTH_SCALE]] | + | [[glGet]] mit Token [[glGet#GL_DEPTH_SCALE|GL_DEPTH_SCALE]]<br> |
− | [[glGet]] mit Token [[glGet#GL_DEPTH_BIAS|GL_DEPTH_BIAS]] | + | [[glGet]] mit Token [[glGet#GL_DEPTH_BIAS|GL_DEPTH_BIAS]]<br> |
+ | |||
+ | |||
− | |||
== Siehe auch == | == Siehe auch == | ||
[[glCallList]], [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], [[glDrawPixels]], [[glNewList]], [[glPixelMap]], [[glPixelStore]], [[glPixelZoom]], [[glReadPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]], [[glTexSubImage2D]] | [[glCallList]], [[glCopyPixels]], [[glCopyTexImage1D]], [[glCopyTexImage2D]], [[glCopyTexSubImage1D]], [[glCopyTexSubImage2D]], [[glDrawPixels]], [[glNewList]], [[glPixelMap]], [[glPixelStore]], [[glPixelZoom]], [[glReadPixels]], [[glTexImage1D]], [[glTexImage2D]], [[glTexSubImage1D]], [[glTexSubImage2D]] | ||
− | + | ||
+ | |||
'''[[Kategorie:GL|PixelTransfer]]''' | '''[[Kategorie:GL|PixelTransfer]]''' | ||
− | + | [[Kategorie:GL1.0]] | |
− | |||
− |
Aktuelle Version vom 13. Mai 2008, 21:36 Uhr
Inhaltsverzeichnis
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
- glCopyPixels,
- glCopyTexImage1D, glCopyTexImage2D,
- glCopyTexSubImage1D, glCopyTexSubImage2D,
- glDrawPixels,
- glReadPixels,
- glTexImage1D, glTexImage2D,
- glTexSubImage1D und glTexSubImage2D
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
'