glDrawPixels-Funktion

Die glDrawPixels-Funktion schreibt einen Pixelblock in den Framebuffer.

Syntax

void WINAPI glDrawPixels(
         GLsizei width,
         GLsizei height,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

Parameter

width

Die Breite des Pixelrechtecks, das in den Framebuffer geschrieben wird.

height

Die Höhendimension des Pixelrechtecks, das in den Framebuffer geschrieben wird.

format

Das Format der Pixeldaten. Zulässige symbolische Konstanten sind wie folgt.

Wert Bedeutung
GL_COLOR_INDEX
Jedes Pixel ist ein einzelner Wert, ein Farbindex.
  1. Die glDrawPixels-Funktion konvertiert jedes Pixel in ein Festpunktformat mit einer nicht angegebenen Anzahl von Bits rechts neben dem Binärpunkt, unabhängig vom Speicherdatentyp. Gleitkommawerte werden in echte Festpunktwerte konvertiert. Die glDrawPixels-Funktion konvertiert ganzzahlige Daten mit Vorzeichen und ohne Vorzeichen, wobei alle Bruchbits auf 0 festgelegt sind. Die Funktion konvertiert Bitmapdaten entweder in 0.0 oder 1.0.
  2. Die glDrawPixels-Funktion verschiebt jeden von GL_INDEX_SHIFT Bits verlassenen Festpunktindex und fügt ihn GL_INDEX_OFFSET hinzu. Wenn GL_INDEX_SHIFT negativ ist, erfolgt die Verschiebung nach rechts. In beiden Fällen füllen null Bits nicht angegebene Bitspeicherorte im Ergebnis aus.
  3. Im RGBA-Modus konvertiert glDrawPixels den resultierenden Index mithilfe der Tabellen 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 in ein RGBA-Pixel. Wenn sich der Farbindexmodus befindet und GL_MAP_COLOR true ist, wird der Index durch den Wert ersetzt, den glDrawPixels in der Nachschlagetabelle GL_PIXEL_MAP_I_TO_I.
  4. Unabhängig davon, ob die Nachschlagesetzung des Indexes erfolgt ist oder nicht, ist der ganzzahlige Teil des Indexes UNDmit 2b - 1 versehen, wobei b die Anzahl der Bits in einem Farbindexpuffer ist.
  5. Die resultierenden Indizes oder RGBA-Farben werden dann in Fragmente konvertiert, indem die aktuelle Rasterposition z-Koordinaten und Texturkoordinaten an jeden Pixel angefügt werden, und dann dem n thFragment die Koordinaten des x- und y-Fensterszuweisen. = xr + nMod-Breite
    y? = yr + n/width
    wobei (xr , yr ) die aktuelle Rasterposition ist.
  6. Die glDrawPixels-Funktion behandelt diese Pixelfragmente genau wie die Fragmente, die durch das Rastern von Punkten, Linien oder Polygonen generiert werden. Es wendet Texturzuordnung, Nebel und alle Fragmentvorgänge an, bevor die Fragmente in den Framebuffer geschrieben werden.
GL_STENCIL_INDEX
Jedes Pixel ist ein einzelner Wert, ein Schablonenindex.
  1. Die glDrawPixels-Funktion konvertiert sie in das Festpunktformat mit einer nicht angegebenen Anzahl von Bits rechts neben dem Binären Punkt, unabhängig vom Speicherdatentyp. Gleitkommawerte werden in echte Festpunktwerte konvertiert. Die glDrawPixels-Funktion konvertiert ganzzahlige Daten mit Vorzeichen und ohne Vorzeichen, wobei alle Bruchbits auf 0 festgelegt sind. Bitmapdaten werden entweder in 0.0 oder 1.0 konvertiert.
  2. Die glDrawPixels-Funktion verschiebt jeden von GL_INDEX_SHIFT Bits verlassenen Festpunktindex und fügt ihn GL_INDEX_OFFSET hinzu. Wenn GL_INDEX_SHIFT negativ ist, erfolgt die Verschiebung nach rechts. In beiden Fällen füllen null Bits nicht angegebene Bitspeicherorte im Ergebnis aus.
  3. Wenn GL_MAP_STENCIL true ist, wird der Index durch den Wert ersetzt, den glDrawPixels in der Nachschlagetabelle GL_PIXEL_MAP_S_TO_S.
  4. Unabhängig davon, ob der Nachschlagen des Index ersetzt wird oder nicht, wird der ganzzahlige Teil des Indexes dann mit2b - 1 ediert, wobei b die Anzahl der Bits im Schablonenpuffer ist. Die resultierenden Schablonenindizes werden dann in den Schablonenpuffer geschrieben, sodass der nth Index an position x geschrieben wird? = xr + nMod-Breite
    y? = yr + n/width
    wobei (xr , yr ) die aktuelle Rasterposition ist. Nur der Pixelbesitztest, der Scissor-Test und die Schablonenschreibmaske wirken sich auf diese Schreibvorgänge aus.
GL_DEPTH_COMPONENT
Jedes Pixel ist eine Einzeltiefekomponente.
  1. Die glDrawPixels-Funktion konvertiert Gleitkommadaten direkt in ein internes Gleitkommaformat mit nicht spezifizierter Genauigkeit. Ganzzahldaten mit Vorzeichen werden dem internen Gleitkommaformat linear zugeordnet, sodass der positivste darstellbare ganzzahlige Wert 1,0 und der negativste darstellbare Wert -1,0 zugeordnet wird. Ganzzahlige Daten ohne Vorzeichen werden ähnlich zugeordnet: Der größte ganzzahlige Wert wird 1,0 zugeordnet, und null wird 0,0 zugeordnet.
  2. Die glDrawPixels-Funktion multipliziert den resultierenden Gleitkommatiefewert mit GL_DEPTH_SCALE und fügt ihn GL_DEPTH_BIAS hinzu. Das Ergebnis wird an den Bereich [0,1] geklemmt.
  3. Die glDrawPixels-Funktion konvertiert die resultierenden Tiefenkomponenten in Fragmente, indem die aktuelle Rasterpositionsfarbe oder farbindex- und Texturkoordinaten an jeden Pixel angefügt und dann dem n-ten Fragment x- und y-Fensterkoordinaten wie x zugewiesen werden? = xr + nMod-Breite
    y? = yr + n/width
    wobei (xr , yr ) die aktuelle Rasterposition ist.
  4. Diese Pixelfragmente werden dann genau wie die Fragmente behandelt, die durch das Rastern von Punkten, Linien oder Polygonen generiert werden. Die glDrawPixels-Funktion wendet Texturzuordnung, Nebel und alle Fragmentvorgänge an, bevor die Fragmente in den Framebuffer geschrieben werden.
GL_RGBA
Jedes Pixel ist eine Vier-Komponenten-Gruppe in dieser Reihenfolge: rot, grün, blau, alpha.
  1. Die glDrawPixels-Funktion konvertiert Gleitkommawerte direkt in ein internes Gleitkommaformat mit nicht angegebener Genauigkeit. Ganzzahlwerte mit Vorzeichen werden linear dem internen Gleitkommaformat zugeordnet, sodass der positivste darstellbare ganzzahlige Wert 1,0 und der negativste darstellbare Wert -1,0 zugeordnet wird. Ganzzahlige Daten ohne Vorzeichen werden ähnlich zugeordnet: Der größte ganzzahlige Wert wird 1,0 zugeordnet, und null wird 0,0 zugeordnet.
  2. Die funktion glDrawPixels multipliziert die resultierenden Gleitkommafarbwerte mit GL_c_SCALE und fügt sie GL_c_BIAS hinzu, wobei c für die jeweiligen Farbkomponenten ROT, GRÜN, BLAU und ALPHA ist. Die Ergebnisse werden auf den Bereich [0,1] geklemmt.
  3. Wenn GL_MAP_COLOR true ist, skaliert glDrawPixels jede Farbkomponente nach der Größe der Nachschlagetabelle GL_PIXEL_MAP_c_TO_c und ersetzt dann die Komponente durch den Wert, auf den sie in dieser Tabelle verweist. c ist R, G, B oder A.
  4. Die glDrawPixels-Funktion konvertiert die resultierenden RGBA-Farben in Fragmente, indem die aktuelle Rasterposition z-Koordinaten und Texturkoordinaten an jeden Pixel angefügt und dann dem n thFragment die Koordinaten des x- und y-Fensters zugewiesen werden. = xr + nMod-Breite
    y? = yr + n /width
    wobei (xr , yr ) die aktuelle Rasterposition ist.
  5. Diese Pixelfragmente werden dann genau wie die Fragmente behandelt, die durch das Rastern von Punkten, Linien oder Polygonen generiert werden. Die glDrawPixels-Funktion wendet Texturzuordnung, Nebel und alle Fragmentvorgänge an, bevor die Fragmente in den Framebuffer geschrieben werden.
GL_RED
Jedes Pixel ist eine einzelne rote Komponente.
Die glDrawPixels-Funktion konvertiert diese Komponente in das interne Gleitkommaformat auf die gleiche Weise wie die rote Komponente eines RGBA-Pixels und konvertiert sie dann in ein RGBA-Pixel, dessen Grün und Blau auf 0,0 und Alpha auf 1,0 festgelegt ist. Nach dieser Konvertierung wird das Pixel so behandelt, als wäre es als RGBA-Pixel gelesen worden.
GL_GREEN
Jedes Pixel ist eine einzelne grüne Komponente.
Die glDrawPixels-Funktion konvertiert diese Komponente in das interne Gleitkommaformat auf die gleiche Weise wie die grüne Komponente eines RGBA-Pixels und konvertiert sie dann in ein RGBA-Pixel, dessen Rot und Blau auf 0,0 und Alpha auf 1,0 festgelegt ist. Nach dieser Konvertierung wird das Pixel so behandelt, als wäre es als RGBA-Pixel gelesen worden.
GL_BLUE
Jedes Pixel ist eine einzelne blaue Komponente.
Die glDrawPixels-Funktion konvertiert diese Komponente in das interne Gleitkommaformat auf die gleiche Weise wie die blaue Komponente eines RGBA-Pixels und konvertiert sie dann in ein RGBA-Pixel, dessen Rot und Grün auf 0,0 und Alpha auf 1,0 festgelegt ist. Nach dieser Konvertierung wird das Pixel so behandelt, als wäre es als RGBA-Pixel gelesen worden.
GL_ALPHA
Jedes Pixel ist eine einzelne Alphakomponente.
Die glDrawPixels-Funktion konvertiert diese Komponente in das interne Gleitkommaformat auf die gleiche Weise wie die Alphakomponente eines RGBA-Pixels und konvertiert sie dann in ein RGBA-Pixel mit Rot, Grün und Blau, das auf 0,0 festgelegt ist. Nach dieser Konvertierung wird das Pixel so behandelt, als wäre es als RGBA-Pixel gelesen worden.
GL_RGB
Jedes Pixel ist eine Gruppe von drei Komponenten in dieser Reihenfolge: rot, grün, blau. Die glDrawPixels-Funktion konvertiert jede Komponente in das interne Gleitkommaformat auf die gleiche Weise wie die roten, grünen und blauen Komponenten eines RGBA-Pixels. Das Farbdreifach wird in ein RGBA-Pixel konvertiert, bei dem das Alpha auf 1,0 festgelegt ist. Nach dieser Konvertierung wird das Pixel so behandelt, als wäre es als RGBA-Pixel gelesen worden.
GL_LUMINANCE
Jedes Pixel ist eine einzelne Leuchtdichtekomponente.
Die glDrawPixels-Funktion konvertiert diese Komponente auf die gleiche Weise in das interne Gleitkommaformat wie die rote Komponente eines RGBA-Pixels und konvertiert sie dann in ein RGBA-Pixel, dessen Rot, Grün und Blau auf den konvertierten Leuchtwert festgelegt ist und alpha auf 1,0 festgelegt ist. Nach dieser Konvertierung wird das Pixel so behandelt, als wäre es als RGBA-Pixel gelesen worden.
GL_LUMINANCE_ALPHA
Jedes Pixel ist eine Gruppe von zwei Komponenten in dieser Reihenfolge: Luminanz, Alpha.
Die glDrawPixels-Funktion konvertiert die beiden Komponenten auf die gleiche Weise in das interne Gleitkommaformat wie die rote Komponente eines RGBA-Pixels und konvertiert sie dann in ein RGBA-Pixel, wobei Rot, Grün und Blau auf den konvertierten Leuchtdichtewert festgelegt ist und alpha auf den konvertierten Alphawert festgelegt ist. Nach dieser Konvertierung wird das Pixel so behandelt, als wäre es als RGBA-Pixel gelesen worden.
GL_BGR_EXT
Jedes Pixel ist eine Gruppe von drei Komponenten in dieser Reihenfolge: blau, grün, rot.
GL_BGR_EXT stellt ein Format bereit, das dem Speicherlayout von geräteunabhängigen Bitmaps (DEVICE-Independent Bitmaps, DIBs) von Windows entspricht. Daher können Ihre Anwendungen dieselben Daten mit Windows-Funktionsaufrufen und OpenGL-Pixelfunktionsaufrufen verwenden.
GL_BGRA_EXT
Jedes Pixel ist eine Gruppe von vier Komponenten in dieser Reihenfolge: blau, grün, rot, alpha.
GL_BGRA_EXT stellt ein Format bereit, das dem Speicherlayout von geräteunabhängigen Bitmaps (Device-Independent Bitmaps, DIBs) von Windows entspricht. Daher können Ihre Anwendungen dieselben Daten mit Windows-Funktionsaufrufen und OpenGL-Pixelfunktionsaufrufen verwenden.

type

Der Datentyp für Pixel. Im Folgenden werden die akzeptierten symbolischen Konstanten und ihre Bedeutungen aufgeführt.

Wert Bedeutung
GL_UNSIGNED_BYTE
8-Bit-Ganzzahl ohne Vorzeichen
GL_BYTE
Ganze 8-Bit-Zahl mit Vorzeichen
GL_BITMAP
Einzelne Bits in ganzzahligen 8-Bit-Zahlen ohne Vorzeichen
GL_UNSIGNED_SHORT
16-Bit-Ganzzahl ohne Vorzeichen
GL_SHORT
Ganze 16-Bit-Zahl mit Vorzeichen
GL_UNSIGNED_INT
32-Bit Ganzzahl ohne Vorzeichen
GL_INT
32-bit integer
GL_FLOAT
Gleitkomma mit einfacher Genauigkeit

Pixel

Ein Zeiger auf die Pixeldaten.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Fehlercodes

Die folgenden Fehlercodes können von der glGetError-Funktion abgerufen werden.

Name Bedeutung
GL_INVALID_VALUE
Die Breite oder Höhe war negativ.
GL_INVALID_ENUM
Format oderTyp war kein akzeptierter Wert.
GL_INVALID_OPERATION
format war GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE oder GL_LUMINANCE_ALPHA, und OpenGL befand sich im Farbindexmodus.
GL_INVALID_ENUM
der Typ war GL_BITMAP, und das Format war weder GL_COLOR_INDEX noch GL_STENCIL_INDEX.
GL_INVALID_OPERATION
format wurde GL_STENCIL_INDEX, und es gab keinen Schablonenpuffer.
GL_INVALID_OPERATION
Die Funktion wurde zwischen einem Aufruf von glBegin und dem entsprechenden Aufruf von glEnd aufgerufen.

Bemerkungen

Die glDrawPixels-Funktion liest Pixeldaten aus dem Speicher und schreibt sie relativ zur aktuellen Rasterposition in den Framebuffer. Verwenden Sie glRasterPos , um die aktuelle Rasterposition festzulegen, und verwenden Sie glGet mit argument GL_CURRENT_RASTER_POSITION, um die Rasterposition abzufragen.

Mehrere Parameter definieren die Codierung von Pixeldaten im Arbeitsspeicher und steuern die Verarbeitung der Pixeldaten, bevor sie im Framebuffer platziert werden. Diese Parameter werden mit vier Funktionen festgelegt: glPixelStore, glPixelTransfer, glPixelMap und glPixelZoom. In diesem Thema werden die Auswirkungen auf glDrawPixels von vielen, aber nicht allen Parametern beschrieben, die von diesen vier Funktionen angegeben werden.

Daten werden aus Pixeln als Sequenz von signierten oder nicht signierten Bytes, signierten oder nicht signierten Shorts, ganzen Zahlen mit Vorzeichen oder ganzzahligen Vorzeichen oder Gleitkommawerten mit einfacher Genauigkeit gelesen, je nach Typ. Jeder dieser Bytes, Shorts, Ganzzahlen oder Gleitkommawerte wird je nach Format als eine Farb- oder Tiefenkomponente oder einen Index interpretiert. Indizes werden immer einzeln behandelt. Farbkomponenten werden als Gruppen mit einem, zwei, drei oder vier Werten behandelt, wiederum basierend auf dem Format. Sowohl einzelne Indizes als auch Gruppen von Komponenten werden als Pixel bezeichnet. Wenn type GL_BITMAP ist, müssen die Daten nicht signierte Bytes sein, und das Format muss entweder GL_COLOR_INDEX oder GL_STENCIL_INDEX sein. Jedes nicht signierte Byte wird als acht 1-Bit-Pixel behandelt, wobei die Bitreihenfolge durch GL_UNPACK_LSB_FIRST bestimmt wird (siehe glPixelStore).

Die Breite nach Höhenpixeln wird aus dem Speicher gelesen, beginnend bei Positionspixeln. Standardmäßig werden diese Pixel aus benachbarten Speicherspeicherorten übernommen, mit der Ausnahme, dass der Lesezeiger nach dem Lesen aller Breitenpixel bis zur nächsten 4-Byte-Grenze erweitert wird. Die glPixelStore-Funktion gibt die 4-Byte-Zeilenausrichtung mit argument GL_UNPACK_ALIGNMENT an, und Sie können sie auf 1, 2, 4 oder 8 Byte festlegen. Andere Pixelspeicherparameter geben unterschiedliche Lesezeigererweiterungen an, sowohl vor dem Lesen des ersten Pixels als auch nach dem Lesen aller Breitenpixel . Die glPixelStore-Funktion arbeitet auf der Grundlage der Werte mehrerer Parameter, die von glPixelTransfer und glPixelMap angegeben werden, auf die gleiche Weise mit den Pixeln width-by-height, die sie aus dem Speicher liest. Die Details dieser Vorgänge sowie der Zielpuffer, in den die Pixel gezeichnet werden, sind spezifisch für das Format der Pixel, wie im Format angegeben.

Die bisher beschriebene Rasterung geht von Pixelzoomfaktoren von 1,0 aus. Wenn Sie glPixelZoom verwenden, um die Pixelzoomfaktoren x und y zu ändern, werden Pixel wie folgt in Fragmente konvertiert. Wenn (xr,yr) die aktuelle Rasterposition ist und sich ein bestimmtes Pixel in der n tenSpalte und mth Zeile des Pixelrechtecks befindet, werden Fragmente für Pixel generiert, deren Mittelpunkt sich im Rechteck mit Ecken befindet.

(xr) + Zoomen? n, yr + Zoomym)

(xr) + Zoomen? (n + 1), yr + Zoomy (m + 1))

Wo zoomen? ist der Wert von GL_ZOOM_X, und Zoomy ist der Wert von GL_ZOOM_Y.

Die folgenden Funktionen rufen Informationen im Zusammenhang mit glDrawPixels ab:

glGet mit Argument GL_CURRENT_RASTER_POSITION

glGet mit argument GL_CURRENT_RASTER_POSITION_VALID

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Gl.h
Bibliothek
Opengl32.lib
DLL
Opengl32.dll

Siehe auch

glAlphaFunc

glBegin

glBlendFunc

glCopyPixels

glDepthFunc

glEnd

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc