glDrawPixels: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Beschreibung)
K (Kategorisierung)
 
(22 dazwischenliegende Versionen von 9 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Unvollständig}}
 
 
= glDrawPixels =
 
= glDrawPixels =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
 
'''glDrawPixels''' - liest Pixeldaten aus dem Speicher und schreibt diese in den [[Framebuffer]] relativ zur aktuellen Rasterposition.
 
'''glDrawPixels''' - liest Pixeldaten aus dem Speicher und schreibt diese in den [[Framebuffer]] relativ zur aktuellen Rasterposition.
  
<br>
 
  
 +
 +
== Delphi-Spezifikation ==
 
  procedure '''glDrawPixels'''(''width'': TGLsizei; ''height'': TGLsizei;  
 
  procedure '''glDrawPixels'''(''width'': TGLsizei; ''height'': TGLsizei;  
 
                         ''format'': TGLenum; ''_type'': TGLenum;  
 
                         ''format'': TGLenum; ''_type'': TGLenum;  
 
                         const ''pixels'': PGLvoid);
 
                         const ''pixels'': PGLvoid);
  
<br>
+
 
 +
 
  
 
== Parameter ==
 
== Parameter ==
<table border=1 rules=all>
+
{| border=1 rules=all
<tr>
+
! ''width, height''
<td>''width, height''</td>
+
|Beschreibt die Dimensionen des Pixelrechtecks. Die Angaben werden dabei in Pixel gemacht.
<td>Beschreibt die Dimensionen des Pixelrechtecks. Die Angaben werden dabei in Pixel gemacht.</td>
+
|-
</tr>
+
!''format''
<tr>
+
| Bestimmt das Format der Pixeldaten. Folgende symbolische Werte werden akzeptiert: <br>
<td>''format''</td>
+
'''GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE,''' und '''GL_LUMINANCE_ALPHA'''
<td>Bestimmt das Format der Pixeldaten. Folgende symbolische Werte werden akzeptiert: <br>
+
|-
'''GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE,''' und '''GL_LUMINANCE_ALPHA'''</td>
+
!''type''
</tr>
+
| Beschreibt den Datentyp der Pixeldaten. Muss einer der Folgenden sein:<br>
<tr>
+
'''GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT,''' oder '''GL_FLOAT'''
<td>''type''</td>
+
|-
<td>Beschreibt den Datentyp der Pixeldaten. Muss einer der Folgenden sein:<br>
+
!''pixels''
'''GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT,''' oder '''GL_FLOAT'''</td>
+
| Beschreibt die Pixeldaten, die in einem Array gespeichert sind.
</tr>
+
|}
<tr>
+
 
<td>''pixels''</td>
 
<td>Beschreibt die Pixeldaten die in einem Array gespeichert sind.</td>
 
</tr>
 
</table>
 
  
<br>
 
  
 
== Beschreibung ==
 
== Beschreibung ==
'''glDrawPixels''' ließt Pixeldaten aus dem Speicher und schreibt diese in den [[Framebuffer]] relativ zur aktuellen Rasterposition. Nutzen Sie [[glRasterPos]] um die aktuelle Rasterposition zu setzen. Um die aktuelle Rasterposition abzufragen nutzen Sie [[glGet]] mit dem Argument '''GL_CURRENT_RASTER_POSITION'''.
+
'''glDrawPixels''' liest Pixeldaten aus dem Speicher und schreibt diese in den [[Framebuffer]] relativ zur aktuellen Rasterposition. Nutzen Sie [[glRasterPos]], um die aktuelle Rasterposition zu setzen. Um die aktuelle Rasterposition abzufragen, nutzen Sie [[glGet]] mit dem Argument '''GL_CURRENT_RASTER_POSITION'''.
<br>
 
  
  
Verschiedene Parameter bestimmen des decodieren der Pixeldaten im Speicher und die Verarbeitung der Daten bevor diese im Framebuffer abgelegt werden. Diese Parameter werden mit 4 Befehlen gesetzt: [[glPixelStore]], [[glPixelTransfer]], [[glPixelMap]], und [[glPixelZoom]]. Dieser Artikel beschreibt den Effekt vieler, jedoch nicht aller Parameter welche die 4 genannten Befehle auf '''glDrawPixels''' haben können.
 
<br>
 
  
 +
Verschiedene Parameter bestimmen das Decodieren der Pixeldaten im Speicher und die Verarbeitung der Daten, bevor diese im Framebuffer abgelegt werden. Diese Parameter werden mit 4 Befehlen gesetzt: [[glPixelStore]], [[glPixelTransfer]], [[glPixelMap]], und [[glPixelZoom]]. Dieser Artikel beschreibt den Effekt vieler, jedoch nicht aller Parameter, welche die 4 genannten Befehle auf '''glDrawPixels''' haben können.
  
Die Daten welche aus ''pixels'' gelesen werden, werden als Sequenz von vorzeichenlosen bzw. behafteten Bytes, Shortints, Integer oder Fließkommazahlen mit einfacher Genauigkeit angesehen. Bestimmt wird dies über die Typangabe in ''type''. Jeder einzelne dieser Werte wird je nach Wert von ''format'' als Farb- oder Tiefenkomponente oder als Index verstanden. Indizes werden immer einzeln behandelt. Farbkomponenten werden als Gruppen von ein bis vier Elementen angesehen. (Dies ist wiederum abhängig von ''format''). Indizes und Farbkomponentengruppen gehören jeweils zu einem Pixel. Wenn ''type'' '''GL_BITMAP''' ist müssen die Daten vorzeichenlose Ganzzahlen sein und ''format'' muss entweder '''GL_COLOR_INDEX''' oder '''GL_STENCIL_INDEX''' sein. Jedes vorzeichenlose Byte wird als acht 1-Bit Pixel behandelt. Die Bitanordnung wird über '''GL_UNPACK_LSB_FIRST''' gesteuert. (siehe [[glPixelStore]])
 
<br>
 
  
  
Es werden ''width'' x ''height'' Pixel aus dem Speicher gelesen. Begonnen wird an der Stelle auf die  ''pixels'' zeigt. Standardmäßi werden die Pixel aus angrenzenden Speicherregionen gelesen. Eine Ausnahme tritt nach allen ''width'' Pixel ein, wo der Lesepointer zur nächsten 4-Byte-Grenze vorgerückt wird. Die 4-Byte Zeilenausrichtung wird über [[glPixelStore]] mit dem Argument '''GL_UNPACK_ALIGNMENT''' gesetzt. Die Ausrichtung kann auch zur 1, 2, 4 oder 8-Byte-Grenze geändert werden. Andere Pixelstore Prameter spezifizieren andere Lesepointerschrittweiten (bevor das erste Pixel gelsen wird, aber auch nachdem ''width'' Pixel gelesen wurden.)
+
Die Daten, welche aus ''pixels'' gelesen werden, werden als Sequenz von vorzeichenlosen bzw. -behafteten Bytes, Shortints, Integer oder Fließkommazahlen mit einfacher Genauigkeit angesehen. Bestimmt wird dies über die Typangabe in ''type''. Jeder einzelne dieser Werte wird je nach Wert von ''format'' als Farb- oder Tiefenkomponente oder als Index verstanden. Indizes werden immer einzeln behandelt. Farbkomponenten werden als Gruppen von ein bis vier Elementen angesehen. (Dies ist wiederum abhängig von ''format''.) Indizes und Farbkomponentengruppen gehören jeweils zu einem Pixel. Wenn ''type'' '''GL_BITMAP''' ist, müssen die Daten vorzeichenlose Ganzzahlen sein und ''format'' muss entweder '''GL_COLOR_INDEX''' oder '''GL_STENCIL_INDEX''' sein. Jedes vorzeichenlose Byte wird als acht 1-Bit Pixel behandelt. Die Bitanordnung wird über '''GL_UNPACK_LSB_FIRST''' gesteuert (siehe [[glPixelStore]]).
<br>
 
  
  
Die ''width'' x ''height'' Pixel welche aus dem Speicher gelesen werden, werden alle auf die selbe Art und Weise verarbeitet. Bestimmt wird dies durch diverse Parameter die durch [[glPixelTransfer]] und [[glPixelMap]] gesetzt werden können. Details dieser Operationen genauso wie der Zielpuffer indem die Pixel gezeichnet werden sollen, werden über das Pixelformat bestimmt. Dieses wiederum wird über den Parameter ''format'' angegeben. ''format'' kann einen von elf symbolischen Werten annehmen:
 
  
'''GL_COLOR_INDEX'''<b><i>
+
Es werden ''width'' x ''height'' Pixel aus dem Speicher gelesen. Begonnen wird an der Stelle auf die  ''pixels'' zeigt. Standardmäßig werden die Pixel aus angrenzenden Speicherregionen gelesen. Eine Ausnahme tritt nach allen ''width'' Pixel ein, wo der Lesepointer zur nächsten 4-Byte-Grenze vorgerückt wird. Die 4-Byte Zeilenausrichtung wird über [[glPixelStore]] mit dem Argument '''GL_UNPACK_ALIGNMENT''' gesetzt. Die Ausrichtung kann auch zur 1, 2, 4 oder 8-Byte-Grenze geändert werden. Andere Pixelstore Prameter spezifizieren andere Lesepointerschrittweiten (bevor das erste Pixel gelesen wird, aber auch nachdem ''width'' Pixel gelesen wurden.)
:Each pixel is a single value, a color index. It is converted to fixed-point format, with an unspecified number of bits to the right of the binary point, regardless of the memory data type.  Floating-point values convert to true fixed-point values. Signed and unsigned integer data is converted with all fraction bits set to zero. Bitmap data convert to either 0.0 or 1.0.
 
:Each fixed-point index is then shifted left by GL_INDEX_SHIFT bits and added to GL_INDEX_OFFSET. If GL_INDEX_SHIFT is negative, the shift is to the right. In either case, zero bits fill otherwise unspecified bit locations in the result.  
 
  
:If the GL is in RGBA mode, the resulting index is converted to an RGBA pixel  using the GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B, and GL_PIXEL_MAP_I_TO_A tables. If the GL is in color index mode, and if GL_MAP_COLOR is true, the index is replaced with the value that it references in lookup table GL_PIXEL_MAP_I_TO_I. Whether the lookup replacement of the index is done or not, the integer part of the index is then ANDed with 2b-1, where b is the number of bits in a color index buffer.
 
  
:The resulting indices or RGBA colors are then converted to fragments by attaching the current raster position z coordinate and texture coordinates to each pixel, then assigning x and y window coordinates to the nth fragment such that
 
  
:BITTE GRAFIK EINFÜGEN: x (n)  = x (r)  + n mod width
+
Die ''width'' x ''height'' Pixel welche aus dem Speicher gelesen werden, werden alle auf die selbe Art und Weise verarbeitet. Bestimmt wird dies durch diverse Parameter die durch [[glPixelTransfer]] und [[glPixelMap]] gesetzt werden können. Details dieser Operationen genauso wie der Zielpuffer indem die Pixel gezeichnet werden sollen, werden über das Pixelformat bestimmt. Dieses wiederum wird über den Parameter ''format'' angegeben. ''format'' kann einen von elf symbolischen Werten annehmen:
:BITTE GRAFIK EINFÜGEN: y (n)  = y (r)  + ë n/width û
 
  
:where (x (r)  , y (r) ) is the current raster position. These pixel fragments are then treated just like the fragments generated by rasterizing points, lines, or polygons. Texture mapping, fog, and all the fragment operations are applied before the fragments are written to the frame buffer.  
+
'''GL_COLOR_INDEX'''
</i></b>
+
:Jedes Pixel ist ein einzelnder Wert, ein Farbindex. Dieser wird in eine Festkommazahl mit einer undefinerten Anzahl an binären Nachkommastellen, unabhängig vom verwendeten Datentyp, konvertiert. Fließkomma-Zahlen werden zu Festkommazahlen. Ganze Zahlen mit oder ohne Vorzeichen werden ebenfalls zu Festkommazahlen konviertiert wobei die Bits für die Nachkommastellen in dem Fall alle 0 sind. Bitmap-Werte werden entweder zu 0.0 oder 1.0 konvertiert.
 +
:Jeder Festkommaindex wird dann um '''GL_INDEX_SHIFT''' Bits nach links verschoben und dann zu '''GL_INDEX_OFFSET''' addiert. Wenn '''GL_INDEX_SHIFT''' negativ ist, wird nach rechts verschoben. In beiden Fällen werden undefinierte Bits mit Nullen aufgefüllt.
  
 +
:Wennn sich OpenGL im RGBA-Modus befindet, wird der resultierende Index in ein RGBA-Pixel mithilfe der '''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'''-Tabellen konvertiert. Befindet sich die GL im Color-Index-Modus, und ist '''GL_MAP_COLOR''' aktiviert, wird der Index durch den Wert ersetzt, auf den er in der Tabelle '''GL_PIXEL_MAP_I_TO_I''' zeigt. Egal ob das Ersetzen des Index vollzogen wurde, oder auch nicht, wird der Integer-Teil des Index mit 2*b-1 '''AND''' verknüpft(''b'' ist die Anzahl der Bits im Stencil-Puffer).
 +
:Die resultierenden Indices oder RGBA-Farben werden dann zu Fragmenten konvertiert, indem die aktuelle Raster-Positions-Z-Koordinate und Textur-Koordinaten auf jedes Pixel angewendet werden und anschließend die x- und y-Fenster-Koordinaten auf das n-te Fragment so angewendet werden, dass
  
'''GL_STENCIL_INDEX'''<b><i>
+
:[[Bild:GlDrawPixels_RasterPosToFragment.png]]
:Each pixel is a single value, a stencil index. It is converted to fixed-point format, with an unspecified number of bits to the right of the binary point, regardless of the memory data type.  Floating-point values convert to true fixed-point values. Signed and unsigned integer data is converted with all fraction bits set to zero. Bitmap data convert to either 0.0 or 1.0.
 
:Each fixed-point index is then shifted left by GL_INDEX_SHIFT bits, and added to GL_INDEX_OFFSET.  If GL_INDEX_SHIFT is negative, the shift is to the right. In either case, zero bits fill otherwise unspecified bit locations in the result. If GL_MAP_STENCIL is true, the index is replaced with the value that it references in lookup table GL_PIXEL_MAP_S_TO_S. Whether the lookup replacement of the index is done or not, the integer part of the index is then ANDed with 2b - 1, where b is the number of bits in the stencil buffer. The resulting stencil indices are then written to the stencil buffer such that the nth index is written to location
 
  
:BITTE GRAFIK EINFÜGEN: x (n)  = x (r) + n mod width
+
:wobei [x(r), y(r)] die aktuelle Rasterposition ist. Diese Pixel werden dann genauso behandelt, wie wenn die Fragmente durch Rasterisieren von Punkten, Linien oder Polygonen erzeugt worden wären. Texturen, Nebel und andere Fragment-Operationen werden durchgeführt, bevor die Fragmente in den Framebuffer geschrieben werden.
:BITTE GRAFIK EINFÜGEN: y (n)  = y (r) + ë n /width û
 
  
:where (x (r)  , y (r) ) is the current raster position. Only the pixel ownership test, the scissor test, and the stencil writemask affect these writes.
 
</i></b>
 
  
 +
'''GL_STENCIL_INDEX'''
 +
:Jedes Pixel ist ein einzelner Wert, ein Stecil-Index. Dieser wird in eine Festkommazahl mit einer undefinerten Anzahl an binären Nachkommastellen, unabhängig vom verwendeten Datentyp, konvertiert. Fließkomma-Zahlen werden zu Festkommazahlen. Ganze Zahlen mit oder ohne Vorzeichen werden ebenfalls zu Festkommazahlen konviertiert wobei die Bits für die Nachkommastellen in dem Fall alle 0 sind. Bitmap-Werte werden entweder zu 0.0 oder 1.0 konvertiert.
  
'''GL_DEPTH_COMPONENT'''<b><i>
+
:Jeder Festkommaindex wird dann um '''GL_INDEX_SHIFT''' Bits nach links verschoben und dann zu '''GL_INDEX_OFFSET''' addiert. Wenn '''GL_INDEX_SHIFT''' negativ ist, wird nach rechts verschoben. In beiden Fällen werden undefinierte Bits mit Nullen aufgefüllt. Wenn '''GL_MAP_STENCIL''' aktiviert ist, wird ''index'' durch den Wert ersetzt, auf den ''index'' in der Tabelle '''GL_PIXEL_MAP_S_TO_S''' zeigt. Egal ob das Ersetzen des Index vollzogen wurde, oder auch nicht, wird der Integer-Teil des Index mit 2*b-1 '''AND''' verknüpft(''b'' ist die Anzahl der Bits im Stencil-Puffer), so dass der n-te Index an die Location
:Each pixel is a single-depth component. Floating-point data is converted directly to an internal floating-point format with unspecified precision. Signed integer data is mapped linearly to the internal floating-point format such that the most positive representable integer value maps to 1.0, and the most negative representable value maps to -1.0. Unsigned integer data is mapped similarly: the largest integer value maps to 1.0, and zero maps to 0.0. The resulting floating-point depth value is then multiplied by GL_DEPTH_SCALE and added to GL_DEPTH_BIAS. The result is clamped to the range [0,1].
 
  
:The resulting depth components are then converted to fragments by attaching the current raster position color or color index and texture coordinates to each pixel, then assigning x and y window coordinates to the nth fragment such that
+
:[[Bild:GlDrawPixels_RasterPosToFragment.png]]
  
:BITTE GRAFIK EINFÜGEN: x (n)  = x (r) + n mod width
+
:geschrieben wird,
:BITTE GRAFIK EINFÜGEN: y (n)  = y (r) + ë n /width û
+
:wobei [x(r),y(r)] die aktuelle Rasterposition ist. Nur der Pixel-Ownership-Test, der Scissor-Test und Stencil-Writemask beeinflussen diesen Schreinvorgang.
  
:where (x (r)  , y (r) ) is the current raster position. These pixel fragments are then treated just like the fragments generated by rasterizing points, lines, or polygons. Texture mapping, fog, and all the fragment operations are applied before the fragments are written to the frame buffer.
 
</i></b>
 
  
 +
'''GL_DEPTH_COMPONENT'''
 +
:Jedes Pixel ist eine einzelne Depth-Komponente. Fließkomma-Daten werden direkt in ein internes Fließkomma-Format mit undefinierter Präzision konvertiert. Ganze Zahlen mit Vorzeichen werden linear auf das interne Fließkomma-Format gemapped, so dass die größte positive Zahl 1.0 entspricht, und die kleinste negative Zahl -1.0. Ganze Zahlen ohne Vorzeichen werden genauso gemapped: Die größte Zahl wird zu 1.0, 0 wird zu 0.0. Der resultierende Fließkomma-Tiefenwert wird dann mit '''GL_DEPTH_SCALE''' multipliziert und  zu '''GL_DEPTH_BIAS''' adiiert. Das Ergebnis wird auf den [0,1]-Bereich angepasst.
  
'''GL_RGBA'''
+
:Die resultierenden Depth-Komponenten werden dann zu Fragmenten konvertiert, indem die aktuelle Rasterpositionsfarbe oder der aktuelle Rasterpositionsfarbindex und Texturkoordinaten auf jedes Pixel angewendet werden, und dann die x- und y-Fenster-Koordinaten so auf das n-te Fragment angewendet werden, dass
:Jedes Pixel wird auf eine Gruppe aus vier Werten abgebildet: Rot, Grün, Blau und Alpha-Wert.
+
:[[Bild:GlDrawPixels_RasterPosToFragment.png]]
:Fließkommazahlen werden in ein internes Fließkommaformat mit unbestimmter Genauigkeit umgewandelt. Vorzeichenbehaftete Integer werden linear in das interne Fließkommaformat umgewandelt, wobei der größtmögliche Wert (MAXINT) auf 1.0 und der kleinstmögliche Wert (MININT) auf -1.0 abgebildet wird. Vorzeichenlose Integer werden ähnlich behandelt. Null wird auf 0.0 abgebildet und der größtmögliche Wert wird auf 1.0 abgebildet. Die resultierenden Fließkommewerte werden dann entsprechend mit [[GL_RED_SCALE]],[[GL_GREEN_SCALE]], [[GL_BLUE_SCALE]] bzw. [[GL_ALPHA_SCALE]] multipliziert und zu [[GL_RED_BIAS]], [[GL_GREEN_BIAS]], [[GL_BLUE_BIAS]] bzw. [[GL_ALPHA_BIAS]] addiert. In einem letzten Schritt werden die Resultate noch auf den Wertebereich [0..1] abgebildet.
 
  
<b><i>
+
:wobei [x(r), y(r)] die aktuelle Rasterposition ist. Diese Pixel werden dann genauso behandelt, wie wenn die Fragmente durch rasterisieren von Punkten, Linien oder Polygonen erzeugt worden wären. Texturen, Nebel und andere Fragment-Operationen werden durchgeführt, bevor die Fragmente in den Framebuffer geschrieben werden.
:If GL_MAP_COLOR is true, each color component is scaled by the size of lookup table  GL_PIXEL_MAP_c_TO_c, then replaced by the value that it references in that table. c is R, G, B, or A, respectively.
 
:The resulting RGBA colors are then converted to fragments by attaching the current raster position z coordinate and texture coordinates to each pixel, then assigning x and y window coordinates to the nth fragment such that
 
  
:BITTE GRAFIK EINFÜGEN: x (n)  = x (r)  + n mod width
 
:BITTE GRAFIK EINFÜGEN: y (n)  = y (r)  + ë n /width û
 
  
:where (x (r) , y (r) ) is the current raster position. These pixel fragments are then treated just like the fragments generated by rasterizing points, lines, or polygons. Texture mapping, fog, and all the fragment operations are applied before the fragments are written to the frame buffer.  
+
'''GL_RGBA'''
</i></b>
+
:Jedes Pixel wird auf eine Gruppe aus vier Werten abgebildet: Rot, Grün, Blau und Alpha-Wert.
 +
:Fließkommazahlen werden in ein internes Fließkommaformat mit unbestimmter Genauigkeit umgewandelt. Vorzeichenbehaftete Integer werden linear in das interne Fließkommaformat umgewandelt, wobei der größtmögliche Wert (MAXINT) auf 1.0 und der kleinstmögliche Wert (MININT) auf -1.0 abgebildet wird. Vorzeichenlose Integer werden ähnlich behandelt. Null wird auf 0.0 abgebildet und der größtmögliche Wert wird auf 1.0 abgebildet. Die resultierenden Fließkommewerte werden dann entsprechend mit '''GL_RED_SCALE''', '''GL_GREEN_SCALE''', '''GL_BLUE_SCALE''' bzw. '''GL_ALPHA_SCALE''' multipliziert und zu '''GL_RED_BIAS''', '''GL_GREEN_BIAS''', '''GL_BLUE_BIAS''' bzw. '''GL_ALPHA_BIAS''' addiert. In einem letzten Schritt werden die Resultate noch auf den Wertebereich [0..1] abgebildet.
 +
:Hat '''GL_MAP_COLOR''' den Wert true, dann werden alle Farbkomponenten anhand der Tabelle '''GL_PIXEL_MAP_c_TO_c''' (c ist je nachdem R, G, B oder A) skaliert und anschließend durch den entsprechenden Wert in der Tabelle ersetzt.
 +
:Die resultierenden RGBA-Farben werden dann zu Fragmenten konvertiert, indem die aktuelle Z-Koordinate und Textur-Koordinate auf jedes Pixel angewendet werden und anschließend die x und y Koordinaten des Fensters so auf das n-te Fragment angewendet werden, dass
 +
:[[Bild:GlDrawPixels_RasterPosToFragment.png]]
 +
:wobei [x(r), y(r)] die aktuelle Raster-Position ist. Diese Pixel werden dann genauso behandelt, wie wenn die Fragmente durch rasterisieren von Punkten, Linien oder Polygonen erzeugt worden wären. Texturen, Nebel und andere Fragment-Operationen werden durchgeführt, bevor die Fragmente in den Framebuffer geschrieben werden.
  
  
Zeile 136: Zeile 121:
 
:Jedes Pixel besteht aus einer 2-Komponenten-Gruppe: Zuerst ein Helligkeitswert dann der Alphawert. Die Komponenten werden in der selben Weise in das interne Fließkommaformat kovertiert wie die Rotkomponente eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen RGB-Komponenten auf den Konvertierten Helligkeitswert gesetzt sind und dessen Alphakomponente auf den konvertierten Alphawert gesetzt ist. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.
 
:Jedes Pixel besteht aus einer 2-Komponenten-Gruppe: Zuerst ein Helligkeitswert dann der Alphawert. Die Komponenten werden in der selben Weise in das interne Fließkommaformat kovertiert wie die Rotkomponente eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen RGB-Komponenten auf den Konvertierten Helligkeitswert gesetzt sind und dessen Alphakomponente auf den konvertierten Alphawert gesetzt ist. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.
  
<br>
 
  
Hier nocheinmal eine Zusammenfassung der für den Parameter ''format'' akzeptierten Werte:<br>
+
 
 +
 
 +
Hier nocheinmal eine Zusammenfassung der für den Parameter ''format'' akzeptierten Werte:
 
=== Format Parameter ===
 
=== Format Parameter ===
{| border="1" rules="all"
+
<div align="center">
 +
{| {{Prettytable_B1}}
 
! Name  
 
! Name  
 
! Art der Pixeldaten
 
! Art der Pixeldaten
Zeile 167: Zeile 154:
 
|-  
 
|-  
 
|}
 
|}
 
+
</div>
  
 
Der Parameter ''type'' gibt an, wieviel Speicherplatz für eine Komponente eines Pixels reserviert wurde<br>
 
Der Parameter ''type'' gibt an, wieviel Speicherplatz für eine Komponente eines Pixels reserviert wurde<br>
{| border="1" rules="all"
+
<div align="center">
 +
{| {{Prettytable_B1}}
 
! Name  
 
! Name  
! Datentype
+
! Datentyp
 
|-
 
|-
 
|'''GL_UNSIGNED_BYTE''' ||  unsigned 8-bit integer
 
|'''GL_UNSIGNED_BYTE''' ||  unsigned 8-bit integer
Zeile 189: Zeile 177:
 
|-
 
|-
 
|'''GL_FLOAT''' ||  single-precision floating point
 
|'''GL_FLOAT''' ||  single-precision floating point
 +
|-
 +
|'''GL_UNSIGNED_BYTE_3_3_2''' ||  unsigned 8-bit integer
 +
|-
 +
|'''GL_UNSIGNED_BYTE_2_3_3_REV''' ||  unsigned 8-bit integer with reversed component ordering
 +
|-
 +
|'''GL_UNSIGNED_SHORT_5_6_5'''  ||  unsigned 16-bit integer
 +
|-
 +
|'''GL_UNSIGNED_SHORT_5_6_5_REV'''  ||  unsigned 16-bit integer with reversed component ordering
 +
|-
 +
|'''GL_UNSIGNED_SHORT_4_4_4_4'''  ||  unsigned 16-bit integer
 +
|-
 +
|'''GL_UNSIGNED_SHORT_4_4_4_4_REV'''  ||  unsigned 16-bit integer with reversed component ordering
 +
|-
 +
|'''GL_UNSIGNED_SHORT_5_5_5_1'''  ||  unsigned 16-bit integer
 +
|-
 +
|'''GL_UNSIGNED_SHORT_1_5_5_5_REV'''  ||  unsigned 16-bit integer with reversed component ordering
 +
|-
 +
|'''GL_UNSIGNED_INT_8_8_8_8'''  ||  unsigned 32-bit integer
 +
|-
 +
|'''GL_UNSIGNED_INT_8_8_8_8_REV'''  ||  unsigned 32-bit integer with reversed component ordering
 +
|-
 +
|'''GL_UNSIGNED_INT_10_10_10_2'''  ||  unsigned 32-bit integer
 +
|-
 +
|'''GL_UNSIGNED_INT_2_10_10_10_REV'''  ||  unsigned 32-bit integer with reversed component ordering
 
|-
 
|-
 
|}
 
|}
 +
</div>
 +
 +
'''Beispiel:''' Wenn das Format '''GL_RGBA''' ist und als ''type'' '''GL_INT''' (32 bit) eingegeben wurde, dann braucht jedes Pixel einen Speicher von 16 bytes (4 Komponenten x 4 bytes).
 +
  
Beispiel: wenn das Format GL_RGBA ist und als ''type'' GL_INT (32 bit) eingegeben wurde, dann braucht jedes Pixel einen Speicher von 16 bytes (4 Komponenten x 4 bytes)<br><br>
 
  
 
== Hinweise ==
 
== Hinweise ==
Zeile 199: Zeile 214:
 
Wenn ein Fehler bei der Durchführung der Funktion auftritt, werden keine Veränderungen am Inhalt von ''pixels'' durchgeführt.
 
Wenn ein Fehler bei der Durchführung der Funktion auftritt, werden keine Veränderungen am Inhalt von ''pixels'' durchgeführt.
  
<br>
+
'''GL_BGR''' und '''GL_BGRA''' sind nur für ''format'' gültig, wenn die OpenGL-Version 1.2 oder höher ist.
 +
 
 +
'''GL_UNSIGNED_BYTE_3_3_2''', '''GL_UNSIGNED_BYTE_2_3_3_REV''', '''GL_UNSIGNED_SHORT_5_6_5''', '''GL_UNSIGNED_SHORT_5_6_5_REV''', '''GL_UNSIGNED_SHORT_4_4_4_4''', '''GL_UNSIGNED_SHORT_4_4_4_4_REV''', '''GL_UNSIGNED_SHORT_5_5_5_1''', '''GL_UNSIGNED_SHORT_1_5_5_5_REV''', '''GL_UNSIGNED_INT_8_8_8_8''', '''GL_UNSIGNED_INT_8_8_8_8_REV''', '''GL_UNSIGNED_INT_10_10_10_2''' und '''GL_UNSIGNED_INT_2_10_10_10_REV''' sind nur für ''_type'' gültig, wenn die OpenGL-Version 1.2 oder höher ist.
 +
 
 +
 
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
'''GL_INVALID_ENUM''' wird generiert wenn ''format'' oder ''type'' ein ungültiger Wert übergeben wird.<br>
+
'''GL_INVALID_ENUM''' wird generiert, wenn ''format'' oder ''type'' ein ungültiger Wert übergeben wird.
'''GL_INVALID_VALUE''' wird generiert wenn entweder ''width'' oder ''height'' negativ ist.<br>
+
 
'''GL_INVALID_OPERATION''' wird generiert wenn ''format'' '''GL_COLOR_INDEX''' ist und der [[Farbpuffer]] RGBA Werte enthält.<br>
+
'''GL_INVALID_VALUE''' wird generiert, wenn entweder ''width'' oder ''height'' negativ ist.
'''GL_INVALID_OPERATION''' wird generiert wenn ''format'' '''GL_STENCIL_INDEX''' ist und kein Schablonen-(/Stencil-)Puffer existiert.<br>
+
 
'''GL_INVALID_OPERATION''' wird generiert wenn ''format'' '''GL_DEPTH_COMPONENT''' ist und kein [[Tiefenpuffer]] existiert.<br>
+
'''GL_INVALID_OPERATION''' wird generiert, wenn ''format'' '''GL_COLOR_INDEX''' ist und der [[Farbpuffer]] RGBA Werte enthält.
'''GL_INVALID_OPERATION''' wird generiert wenn '''glDrawPixels''' innerhalb eines [[glBegin]]-[[glEnd]] Blocks aufgerufen wird.
+
 
 +
'''GL_INVALID_OPERATION''' wird generiert, wenn ''format'' '''GL_STENCIL_INDEX''' ist und kein Schablonen-(/Stencil-)Puffer existiert.
 +
 
 +
'''GL_INVALID_OPERATION''' wird generiert, wenn ''format'' '''GL_DEPTH_COMPONENT''' ist und kein [[Tiefenpuffer]] existiert.
 +
 
 +
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glDrawPixels''' innerhalb eines [[glBegin]]-[[glEnd]]-Blocks aufgerufen wird.
 +
 
 +
 
  
<br>
 
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
 
[[glGet]] mit Token [[glGet#GL_INDEX_MODE|GL_INDEX_MODE]]
 
[[glGet]] mit Token [[glGet#GL_INDEX_MODE|GL_INDEX_MODE]]
  
<br>
+
[[glGet]] mit Token [[glGet#GL_CURRENT_RASTER_POSITION|GL_CURRENT_RASTER_POSITION]]
 +
 
 +
[[glGet]] mit Token [[glGet#GL_CURRENT_RASTER_POSITION_VALID|GL_CURRENT_RASTER_POSITION_VALID]]
 +
 
 +
[[glGet]] mit Token [[glGet#GL_PIXEL_UNPACK_BUFFER_BINDING|GL_PIXEL_UNPACK_BUFFER_BINDING]]
 +
 
 +
 
  
 
== Siehe auch ==
 
== Siehe auch ==
[[glCopyPixels]], [[glReadPixels]], [[glPixelMap]], [[glPixelStore]], [[glPixelTransfer]], [[glReadBuffer]]
+
[[glCopyPixels]], [[glReadPixels]], [[glPixelMap]], [[glPixelStore]], [[glPixelZoom]], [[glPixelTransfer]], [[glReadBuffer]]
  
 
[[Kategorie:GL|DrawPixels]]
 
[[Kategorie:GL|DrawPixels]]
 +
[[Kategorie:GL1.0|DrawPixels]]

Aktuelle Version vom 25. Juli 2011, 09:28 Uhr

glDrawPixels

Name

glDrawPixels - liest Pixeldaten aus dem Speicher und schreibt diese in den Framebuffer relativ zur aktuellen Rasterposition.


Delphi-Spezifikation

procedure glDrawPixels(width: TGLsizei; height: TGLsizei; 
                       format: TGLenum; _type: TGLenum; 
                       const pixels: PGLvoid);



Parameter

width, height Beschreibt die Dimensionen des Pixelrechtecks. Die Angaben werden dabei in Pixel gemacht.
format Bestimmt das Format der Pixeldaten. Folgende symbolische Werte werden akzeptiert:

GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE, und GL_LUMINANCE_ALPHA

type Beschreibt den Datentyp der Pixeldaten. Muss einer der Folgenden sein:

GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, oder GL_FLOAT

pixels Beschreibt die Pixeldaten, die in einem Array gespeichert sind.


Beschreibung

glDrawPixels liest Pixeldaten aus dem Speicher und schreibt diese in den Framebuffer relativ zur aktuellen Rasterposition. Nutzen Sie glRasterPos, um die aktuelle Rasterposition zu setzen. Um die aktuelle Rasterposition abzufragen, nutzen Sie glGet mit dem Argument GL_CURRENT_RASTER_POSITION.


Verschiedene Parameter bestimmen das Decodieren der Pixeldaten im Speicher und die Verarbeitung der Daten, bevor diese im Framebuffer abgelegt werden. Diese Parameter werden mit 4 Befehlen gesetzt: glPixelStore, glPixelTransfer, glPixelMap, und glPixelZoom. Dieser Artikel beschreibt den Effekt vieler, jedoch nicht aller Parameter, welche die 4 genannten Befehle auf glDrawPixels haben können.


Die Daten, welche aus pixels gelesen werden, werden als Sequenz von vorzeichenlosen bzw. -behafteten Bytes, Shortints, Integer oder Fließkommazahlen mit einfacher Genauigkeit angesehen. Bestimmt wird dies über die Typangabe in type. Jeder einzelne dieser Werte wird je nach Wert von format als Farb- oder Tiefenkomponente oder als Index verstanden. Indizes werden immer einzeln behandelt. Farbkomponenten werden als Gruppen von ein bis vier Elementen angesehen. (Dies ist wiederum abhängig von format.) Indizes und Farbkomponentengruppen gehören jeweils zu einem Pixel. Wenn type GL_BITMAP ist, müssen die Daten vorzeichenlose Ganzzahlen sein und format muss entweder GL_COLOR_INDEX oder GL_STENCIL_INDEX sein. Jedes vorzeichenlose Byte wird als acht 1-Bit Pixel behandelt. Die Bitanordnung wird über GL_UNPACK_LSB_FIRST gesteuert (siehe glPixelStore).


Es werden width x height Pixel aus dem Speicher gelesen. Begonnen wird an der Stelle auf die pixels zeigt. Standardmäßig werden die Pixel aus angrenzenden Speicherregionen gelesen. Eine Ausnahme tritt nach allen width Pixel ein, wo der Lesepointer zur nächsten 4-Byte-Grenze vorgerückt wird. Die 4-Byte Zeilenausrichtung wird über glPixelStore mit dem Argument GL_UNPACK_ALIGNMENT gesetzt. Die Ausrichtung kann auch zur 1, 2, 4 oder 8-Byte-Grenze geändert werden. Andere Pixelstore Prameter spezifizieren andere Lesepointerschrittweiten (bevor das erste Pixel gelesen wird, aber auch nachdem width Pixel gelesen wurden.)


Die width x height Pixel welche aus dem Speicher gelesen werden, werden alle auf die selbe Art und Weise verarbeitet. Bestimmt wird dies durch diverse Parameter die durch glPixelTransfer und glPixelMap gesetzt werden können. Details dieser Operationen genauso wie der Zielpuffer indem die Pixel gezeichnet werden sollen, werden über das Pixelformat bestimmt. Dieses wiederum wird über den Parameter format angegeben. format kann einen von elf symbolischen Werten annehmen:

GL_COLOR_INDEX

Jedes Pixel ist ein einzelnder Wert, ein Farbindex. Dieser wird in eine Festkommazahl mit einer undefinerten Anzahl an binären Nachkommastellen, unabhängig vom verwendeten Datentyp, konvertiert. Fließkomma-Zahlen werden zu Festkommazahlen. Ganze Zahlen mit oder ohne Vorzeichen werden ebenfalls zu Festkommazahlen konviertiert wobei die Bits für die Nachkommastellen in dem Fall alle 0 sind. Bitmap-Werte werden entweder zu 0.0 oder 1.0 konvertiert.
Jeder Festkommaindex wird dann um GL_INDEX_SHIFT Bits nach links verschoben und dann zu GL_INDEX_OFFSET addiert. Wenn GL_INDEX_SHIFT negativ ist, wird nach rechts verschoben. In beiden Fällen werden undefinierte Bits mit Nullen aufgefüllt.
Wennn sich OpenGL im RGBA-Modus befindet, wird der resultierende Index in ein RGBA-Pixel mithilfe der 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-Tabellen konvertiert. Befindet sich die GL im Color-Index-Modus, und ist GL_MAP_COLOR aktiviert, wird der Index durch den Wert ersetzt, auf den er in der Tabelle GL_PIXEL_MAP_I_TO_I zeigt. Egal ob das Ersetzen des Index vollzogen wurde, oder auch nicht, wird der Integer-Teil des Index mit 2*b-1 AND verknüpft(b ist die Anzahl der Bits im Stencil-Puffer).
Die resultierenden Indices oder RGBA-Farben werden dann zu Fragmenten konvertiert, indem die aktuelle Raster-Positions-Z-Koordinate und Textur-Koordinaten auf jedes Pixel angewendet werden und anschließend die x- und y-Fenster-Koordinaten auf das n-te Fragment so angewendet werden, dass
GlDrawPixels RasterPosToFragment.png
wobei [x(r), y(r)] die aktuelle Rasterposition ist. Diese Pixel werden dann genauso behandelt, wie wenn die Fragmente durch Rasterisieren von Punkten, Linien oder Polygonen erzeugt worden wären. Texturen, Nebel und andere Fragment-Operationen werden durchgeführt, bevor die Fragmente in den Framebuffer geschrieben werden.


GL_STENCIL_INDEX

Jedes Pixel ist ein einzelner Wert, ein Stecil-Index. Dieser wird in eine Festkommazahl mit einer undefinerten Anzahl an binären Nachkommastellen, unabhängig vom verwendeten Datentyp, konvertiert. Fließkomma-Zahlen werden zu Festkommazahlen. Ganze Zahlen mit oder ohne Vorzeichen werden ebenfalls zu Festkommazahlen konviertiert wobei die Bits für die Nachkommastellen in dem Fall alle 0 sind. Bitmap-Werte werden entweder zu 0.0 oder 1.0 konvertiert.
Jeder Festkommaindex wird dann um GL_INDEX_SHIFT Bits nach links verschoben und dann zu GL_INDEX_OFFSET addiert. Wenn GL_INDEX_SHIFT negativ ist, wird nach rechts verschoben. In beiden Fällen werden undefinierte Bits mit Nullen aufgefüllt. Wenn GL_MAP_STENCIL aktiviert ist, wird index durch den Wert ersetzt, auf den index in der Tabelle GL_PIXEL_MAP_S_TO_S zeigt. Egal ob das Ersetzen des Index vollzogen wurde, oder auch nicht, wird der Integer-Teil des Index mit 2*b-1 AND verknüpft(b ist die Anzahl der Bits im Stencil-Puffer), so dass der n-te Index an die Location
GlDrawPixels RasterPosToFragment.png
geschrieben wird,
wobei [x(r),y(r)] die aktuelle Rasterposition ist. Nur der Pixel-Ownership-Test, der Scissor-Test und Stencil-Writemask beeinflussen diesen Schreinvorgang.


GL_DEPTH_COMPONENT

Jedes Pixel ist eine einzelne Depth-Komponente. Fließkomma-Daten werden direkt in ein internes Fließkomma-Format mit undefinierter Präzision konvertiert. Ganze Zahlen mit Vorzeichen werden linear auf das interne Fließkomma-Format gemapped, so dass die größte positive Zahl 1.0 entspricht, und die kleinste negative Zahl -1.0. Ganze Zahlen ohne Vorzeichen werden genauso gemapped: Die größte Zahl wird zu 1.0, 0 wird zu 0.0. Der resultierende Fließkomma-Tiefenwert wird dann mit GL_DEPTH_SCALE multipliziert und zu GL_DEPTH_BIAS adiiert. Das Ergebnis wird auf den [0,1]-Bereich angepasst.
Die resultierenden Depth-Komponenten werden dann zu Fragmenten konvertiert, indem die aktuelle Rasterpositionsfarbe oder der aktuelle Rasterpositionsfarbindex und Texturkoordinaten auf jedes Pixel angewendet werden, und dann die x- und y-Fenster-Koordinaten so auf das n-te Fragment angewendet werden, dass
GlDrawPixels RasterPosToFragment.png
wobei [x(r), y(r)] die aktuelle Rasterposition ist. Diese Pixel werden dann genauso behandelt, wie wenn die Fragmente durch rasterisieren von Punkten, Linien oder Polygonen erzeugt worden wären. Texturen, Nebel und andere Fragment-Operationen werden durchgeführt, bevor die Fragmente in den Framebuffer geschrieben werden.


GL_RGBA

Jedes Pixel wird auf eine Gruppe aus vier Werten abgebildet: Rot, Grün, Blau und Alpha-Wert.
Fließkommazahlen werden in ein internes Fließkommaformat mit unbestimmter Genauigkeit umgewandelt. Vorzeichenbehaftete Integer werden linear in das interne Fließkommaformat umgewandelt, wobei der größtmögliche Wert (MAXINT) auf 1.0 und der kleinstmögliche Wert (MININT) auf -1.0 abgebildet wird. Vorzeichenlose Integer werden ähnlich behandelt. Null wird auf 0.0 abgebildet und der größtmögliche Wert wird auf 1.0 abgebildet. Die resultierenden Fließkommewerte werden dann entsprechend mit GL_RED_SCALE, GL_GREEN_SCALE, GL_BLUE_SCALE bzw. GL_ALPHA_SCALE multipliziert und zu GL_RED_BIAS, GL_GREEN_BIAS, GL_BLUE_BIAS bzw. GL_ALPHA_BIAS addiert. In einem letzten Schritt werden die Resultate noch auf den Wertebereich [0..1] abgebildet.
Hat GL_MAP_COLOR den Wert true, dann werden alle Farbkomponenten anhand der Tabelle GL_PIXEL_MAP_c_TO_c (c ist je nachdem R, G, B oder A) skaliert und anschließend durch den entsprechenden Wert in der Tabelle ersetzt.
Die resultierenden RGBA-Farben werden dann zu Fragmenten konvertiert, indem die aktuelle Z-Koordinate und Textur-Koordinate auf jedes Pixel angewendet werden und anschließend die x und y Koordinaten des Fensters so auf das n-te Fragment angewendet werden, dass
GlDrawPixels RasterPosToFragment.png
wobei [x(r), y(r)] die aktuelle Raster-Position ist. Diese Pixel werden dann genauso behandelt, wie wenn die Fragmente durch rasterisieren von Punkten, Linien oder Polygonen erzeugt worden wären. Texturen, Nebel und andere Fragment-Operationen werden durchgeführt, bevor die Fragmente in den Framebuffer geschrieben werden.


GL_RED

Jedes Pixel besteht aus einer einzelnen roten Farbkomponente. Die Komponente wird in der selben Weise in das interne Fließkommaformat kovertiert wie die Rotkomponente eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen Grün bzw. Blaukomponente 0.0 und dessen Alphakomponente 1.0 ist. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.


GL_GREEN

Jedes Pixel besteht aus einer einzelnen grünen Farbkomponente. Die Komponente wird in der selben Weise in das interne Fließkommaformat kovertiert wie die Grünkomponente eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen Rot bzw. Blaukomponente 0.0 und dessen Alphakomponente 1.0 ist. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.


GL_BLUE

Jedes Pixel besteht aus einer einzelnen blauen Farbkomponente. Die Komponente wird in der selben Weise in das interne Fließkommaformat kovertiert wie die Blaukomponente eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen Grün bzw. Rotkomponente 0.0 und dessen Alphakomponente 1.0 ist. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.

GL_ALPHA

Jedes Pixel besteht aus einer einzelnen Alphakomponente. Die Komponente wird in der selben Weise in das interne Fließkommaformat kovertiert wie die Alphakomponente eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen RGB-Komponenten alle 0.0 sind. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.


GL_RGB

Jedes Pixel besteht aus einer 3-Komponenten-Gruppe. Die einzelnen Komponenten werden in der selben Weise in das interne Fließkommaformat kovertiert wie die Komponenten eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen Alphakomponente 1.0 ist. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.


GL_LUMINANCE

Jedes Pixel besteht aus einer einzelnen Helligkeitskomponente. Die Komponente wird in der selben Weise in das interne Fließkommaformat kovertiert wie die Rotkomponente eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen RGB-Komponenten auf den Konvertierten Helligkeitswert gesetzt sind und dessen Alphakomponente 1.0 ist. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.


GL_LUMINANCE_ALPHA

Jedes Pixel besteht aus einer 2-Komponenten-Gruppe: Zuerst ein Helligkeitswert dann der Alphawert. Die Komponenten werden in der selben Weise in das interne Fließkommaformat kovertiert wie die Rotkomponente eines RGBA Pixels. Anschließend wird das Pixel in ein RGBA Pixel umgewandelt dessen RGB-Komponenten auf den Konvertierten Helligkeitswert gesetzt sind und dessen Alphakomponente auf den konvertierten Alphawert gesetzt ist. Nach dieser Konvertierung wird das Pixel wie ein normales RGBA Pixel behandelt.



Hier nocheinmal eine Zusammenfassung der für den Parameter format akzeptierten Werte:

Format Parameter

Name Art der Pixeldaten
GL_COLOR_INDEX Ein Farb-Index
GL_RGB Eine rote Farbkomponente, gefolgt von einer grünen und einer blauen
GL_RGBA Eine rote Farbkomponente, gefolgt von einer grünen, einer blauen und eines Alpha-Wertes
GL_RED Eine rote Farbkomponente
GL_GREEN Eine gruene Farbkomponente
GL_BLUE Eine blaue Farbkomponente
GL_ALPHA Eine Alpha-Wert Farbkomponente
GL_LUMINANCE Eine Helligkeits-Komponente
GL_LUMINANCE_ALPHA Eine Helligkeits-Komponente gefolgt von einer Alpha-Wert Farbkomponente
GL_STENCIL_INDEX Eine Masken- Komponente
GL_DEPTH_COMPONENT Eine Farbtiefen-Wert Farbkomponente

Der Parameter type gibt an, wieviel Speicherplatz für eine Komponente eines Pixels reserviert wurde

Name Datentyp
GL_UNSIGNED_BYTE unsigned 8-bit integer
GL_BYTE signed 8-bit integer
GL_BITMAP single bits in unsigned 8-bit integers
GL_UNSIGNED_SHORT unsigned 16-bit integer
GL_SHORT signed 16-bit integer
GL_UNSIGNED_INT unsigned 32-bit integer
GL_INT 32-bit integer
GL_FLOAT single-precision floating point
GL_UNSIGNED_BYTE_3_3_2 unsigned 8-bit integer
GL_UNSIGNED_BYTE_2_3_3_REV unsigned 8-bit integer with reversed component ordering
GL_UNSIGNED_SHORT_5_6_5 unsigned 16-bit integer
GL_UNSIGNED_SHORT_5_6_5_REV unsigned 16-bit integer with reversed component ordering
GL_UNSIGNED_SHORT_4_4_4_4 unsigned 16-bit integer
GL_UNSIGNED_SHORT_4_4_4_4_REV unsigned 16-bit integer with reversed component ordering
GL_UNSIGNED_SHORT_5_5_5_1 unsigned 16-bit integer
GL_UNSIGNED_SHORT_1_5_5_5_REV unsigned 16-bit integer with reversed component ordering
GL_UNSIGNED_INT_8_8_8_8 unsigned 32-bit integer
GL_UNSIGNED_INT_8_8_8_8_REV unsigned 32-bit integer with reversed component ordering
GL_UNSIGNED_INT_10_10_10_2 unsigned 32-bit integer
GL_UNSIGNED_INT_2_10_10_10_REV unsigned 32-bit integer with reversed component ordering

Beispiel: Wenn das Format GL_RGBA ist und als type GL_INT (32 bit) eingegeben wurde, dann braucht jedes Pixel einen Speicher von 16 bytes (4 Komponenten x 4 bytes).


Hinweise

Werte von Pixeln außerhalb des Fensters, das mit dem aktuellen GL-Kontext verbunden ist, sind undefiniert.

Wenn ein Fehler bei der Durchführung der Funktion auftritt, werden keine Veränderungen am Inhalt von pixels durchgeführt.

GL_BGR und GL_BGRA sind nur für format gültig, wenn die OpenGL-Version 1.2 oder höher ist.

GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5, GL_UNSIGNED_SHORT_5_6_5_REV, GL_UNSIGNED_SHORT_4_4_4_4, GL_UNSIGNED_SHORT_4_4_4_4_REV, GL_UNSIGNED_SHORT_5_5_5_1, GL_UNSIGNED_SHORT_1_5_5_5_REV, GL_UNSIGNED_INT_8_8_8_8, GL_UNSIGNED_INT_8_8_8_8_REV, GL_UNSIGNED_INT_10_10_10_2 und GL_UNSIGNED_INT_2_10_10_10_REV sind nur für _type gültig, wenn die OpenGL-Version 1.2 oder höher ist.


Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn format oder type ein ungültiger Wert übergeben wird.

GL_INVALID_VALUE wird generiert, wenn entweder width oder height negativ ist.

GL_INVALID_OPERATION wird generiert, wenn format GL_COLOR_INDEX ist und der Farbpuffer RGBA Werte enthält.

GL_INVALID_OPERATION wird generiert, wenn format GL_STENCIL_INDEX ist und kein Schablonen-(/Stencil-)Puffer existiert.

GL_INVALID_OPERATION wird generiert, wenn format GL_DEPTH_COMPONENT ist und kein Tiefenpuffer existiert.

GL_INVALID_OPERATION wird generiert, wenn glDrawPixels innerhalb eines glBegin-glEnd-Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGet mit Token GL_INDEX_MODE

glGet mit Token GL_CURRENT_RASTER_POSITION

glGet mit Token GL_CURRENT_RASTER_POSITION_VALID

glGet mit Token GL_PIXEL_UNPACK_BUFFER_BINDING


Siehe auch

glCopyPixels, glReadPixels, glPixelMap, glPixelStore, glPixelZoom, glPixelTransfer, glReadBuffer