glCopyPixels-Funktion
Die glCopyPixels-Funktion kopiert Pixel in den Framepuffer.
Syntax
void WINAPI glCopyPixels(
GLint x,
GLint y,
GLsizei width,
GLsizei height,
GLenum type
);
Parameter
-
x
-
Die x-Ebenenkoordinate des Fensters der unteren linken Ecke des rechteckigen Bereichs der zu kopierenden Pixel.
-
y
-
Die Fensterkoordinate der unteren linken Ecke des rechteckigen Bereichs der zu kopierenden Pixel.
-
width
-
Die Breite des rechteckigen Bereichs von Pixeln, die kopiert werden sollen. Darf nicht negativ sein.
-
height
-
Die Höhendimension des rechteckigen Bereichs von Pixeln, die kopiert werden sollen. Darf nicht negativ sein.
-
type
-
Gibt an, ob glCopyPixels Farbwerte, Tiefenwerte oder Schablonenwerte kopieren soll. Die zulässigen symbolischen Konstanten sind .
Wert Bedeutung - GL_COLOR
Die glCopyPixels-Funktion liest Indizes oder RGBA-Farben aus dem Puffer, der derzeit als Lesequellpuffer angegeben ist (siehe glReadBuffer).
Wenn Sich OpenGL im Farbindexmodus befindet:- Jeder Index, der aus diesem Puffer gelesen wird, wird in ein Festkommaformat mit einer nicht angegebenen Anzahl von Bits rechts vom Binärpunkt konvertiert.
- Jeder Index wird um GL_INDEX_SHIFT Bits nach links verschoben und GL_INDEX_OFFSET hinzugefügt. Wenn GL_INDEX_SHIFT negativ ist, erfolgt die Verschiebung nach rechts. In beiden Fällen füllen null Bits andernfalls nicht angegebene Bitpositionen im Ergebnis aus.
- Wenn GL_MAP_COLOR true ist, wird der Index durch den Wert ersetzt, auf den er in der GL_PIXEL_MAP_I_TO_I der Nachschlagetabelle verweist.
- Unabhängig davon, ob die Nachschlageersetzung des Indexes erfolgt oder nicht, wird der ganzzahlige Teil des Indexes mit2b 1 ed, wobei b die Anzahl der Bits in einem Farbindexpuffer ist.
- Die Rot-, Grün-, Blau- und Alphakomponenten jedes gelesenen Pixels werden in ein internes Gleitkommaformat mit nicht angegebener Genauigkeit konvertiert.
- Die Konvertierung ordnet den größten darstellbaren Komponentenwert 1,0 und den Komponentenwert 0,0 zu.
- Die resultierenden Gleitkommafarbwerte werden dann mit GL_c_SCALE multipliziert und GL_c_BIAS hinzugefügt, wobei c für die jeweiligen Farbkomponenten ROT, GRÜN, BLAU und ALPHA ist.
- Die Ergebnisse werden an den Bereich [0,1] klammern.
- Wenn GL_MAP_COLOR true ist, wird jede Farbkomponente anhand der Größe der GL_PIXEL_MAP_c_TO_c Nachschlagetabelle skaliert und dann durch den Wert ersetzt, auf den sie in dieser Tabelle verweist. c ist R, G, B bzw. A. Die resultierenden Indizes oder RGBA-Farben werden dann in Fragmente konvertiert, indem die aktuelle Rasterposition z-coordinate und Texturkoordinaten an jedes Pixel angefügt werden. Anschließend werden Fensterkoordinaten (xr + i, yrj ) zugewiesen, + wobei (xr , yr ) die aktuelle Rasterposition ist und das Pixel das Pixel in der i-Position in der j-Zeile ist. Diese Pixelfragmente werden dann genau wie die Fragmente behandelt, die durch Rastern von Punkten, Linien oder Polygonen generiert werden. Texturzuordnung, Oberfläche und alle Fragmentvorgänge werden angewendet, bevor die Fragmente in den Framepuffer geschrieben werden.
- GL_DEPTH
Tiefenwerte werden aus dem Tiefenpuffer gelesen und direkt in ein internes Gleitkommaformat mit nicht angegebener Genauigkeit konvertiert. Der resultierende Gleitkommatiefewert wird dann mit GL_DEPTH_SCALE multipliziert und GL_DEPTH_BIAS hinzugefügt. Das Ergebnis wird an den Bereich [0,1] klammern.
Die resultierenden Tiefenkomponenten werden dann in Fragmente konvertiert, indem die aktuelle Rasterpositionsfarbe oder der Farbindex und die Texturkoordinaten an jedes Pixel angefügt werden. Anschließend werden Fensterkoordinaten (xr + i, yrj ) zugewiesen, wobei ( + xr , yr ) die aktuelle Rasterposition ist und das Pixel das Pixel in der i-Position in der j-Zeile ist. Diese Pixelfragmente werden dann genau wie die Fragmente behandelt, die durch Rastern von Punkten, Linien oder Polygonen generiert werden. Texturzuordnung, Oberfläche und alle Fragmentvorgänge werden angewendet, bevor die Fragmente in den Framepuffer geschrieben werden.- GL_STENCIL
Schablonenindizes werden aus dem Schablonenpuffer gelesen und in ein internes Festkommaformat mit einer nicht angegebenen Anzahl von Bits rechts vom Binärpunkt konvertiert. Jeder Festkommaindex wird dann um GL_INDEX_SHIFT Bits nach links verschoben und GL_INDEX_OFFSET hinzugefügt. Wenn GL_INDEX_SHIFT negativ ist, erfolgt die Verschiebung nach rechts. In beiden Fällen füllen null Bits andernfalls nicht angegebene Bitpositionen im Ergebnis aus. Wenn GL_MAP_STENCIL true ist, wird der Index durch den Wert ersetzt, auf den er in der GL_PIXEL_MAP_S_TO_S der Nachschlagetabelle verweist. Unabhängig davon, ob die Nachschlageersetzung des Indexes erfolgt oder nicht, wird der ganzzahlige Teil des Indexes mit 2 b bis 1, wobei b die Anzahl der Bits im Schablonenpuffer ist, andernfalls mit 2b bis 1 beziffert. Die resultierenden Schablonenindizes werden dann in den Schablonenpuffer geschrieben, sodass der index read from the i location of the j row to location(xr + i, yr + j), wobei (xr , yr ) die aktuelle Rasterposition ist. Nur der Pixelbesitztest, der Scissortest und die Schablonenschreibmaske wirken sich auf diese Schreibvorgänge aus.
Rückgabewert
Diese Funktion gibt keinen Wert zurück.
Fehlercodes
Die folgenden Fehlercodes können von der glGetError-Funktion abgerufen werden.
| Name | Bedeutung |
|---|---|
|
type war kein akzeptierter Wert. |
|
Die Breite oder Höhe war negativ. |
|
Der Typ war GL _ DEPTH, und es gab keinen Tiefenpuffer. |
|
Type war GL _ STENCIL, und es gab keinen Schablonenpuffer. |
|
Die Funktion wurde zwischen einem Aufruf von glBegin und dem entsprechenden Aufruf von glEndaufgerufen. |
Bemerkungen
Die glCopyPixels-Funktion kopiert ein am Bildschirm ausgerichtetes Rechteck von Pixeln von der angegebenen Framepufferposition in einen Bereich relativ zur aktuellen Rasterposition. Der Vorgang ist nur gut definiert, wenn sich der gesamte Pixelquellbereich innerhalb des verfügbar gemachten Teils des Fensters befindet. Die Ergebnisse von Kopien von außerhalb des Fensters oder aus Bereichen des Fensters, die nicht verfügbar gemacht werden, sind hardwareabhängig und nicht definiert.
Die Parameter x und y geben die Fensterkoordinaten der unteren linken Ecke des rechteckigen Bereichs an, der kopiert werden soll. Die Parameter für Breite und Höhe geben die Abmessungen des rechteckigen Bereichs an, der kopiert werden soll. Sowohl Breite als auch Höhe müssen nicht negative Zeichen sein.
Mehrere Parameter steuern die Verarbeitung der Pixeldaten, während sie kopiert werden. Diese Parameter werden mit drei Funktionen festgelegt: glPixelTransfer, glPixelMapund glPixelZoom. In diesem Thema werden die Auswirkungen der meisten, aber nicht aller Parameter, die von diesen drei Funktionen angegeben werden, auf glCopyPixels beschrieben.
Die glCopyPixels-Funktion kopiert Werte aus jedem Pixel mit der unteren linken Ecke an (x + i, y + j) für 0 = i < Breite und 0 = j < Höhe. Dieses Pixel wird als das i-Pixel in der j-Zeile bezeichnet. Pixel werden in Zeilenreihenfolge von der untersten in die höchste Zeile kopiert, von links nach rechts in jeder Zeile.
Der Typparameter gibt an, ob Farb-, Tiefen- oder Schablonendaten kopiert werden sollen.
Bei der bisher beschriebenen Rasterung wird ein Pixelzoomfaktor von 1,0 angenommen. Wenn Sie glPixelZoom verwenden, um die Zoomfaktoren "x" und "y Pixel" zu ändern, werden Pixel wie folgt in Fragmente konvertiert. Wenn (xr , yr ) die aktuelle Rasterposition ist und sich ein bestimmtes Pixel an der i-Position in der j-Zeile des Quellpixelrechtecks befindet, werden Fragmente für Pixel generiert, deren Mittelpunkte sich im Rechteck mit Ecken an befinden.
(xr + zoom? i, y r + zoomy j)
and
(xr + zoom? (i + 1), yr + zoomy (j + 1))
where zoom? ist der Wert von GL _ ZOOM _ X, und zoomy ist der Wert von GL _ ZOOM _ Y.
Von glPixelStore angegebene Modi haben keine Auswirkungen auf den Vorgang von glCopyPixels.
Die folgenden Funktionen rufen Informationen im Zusammenhang mit glCopyPixels ab:
glGet mit argument GL _ CURRENT _ RASTER _ POSITION
glGet mit argument GL _ CURRENT RASTER POSITION _ _ _ VALID
Verwenden Sie , um das Farbpixel in der unteren linken Ecke des Fensters an die aktuelle Rasterposition zu kopieren.
glCopyPixels( 0, 0, 1, 1, GL _ COLOR );
Requirements (Anforderungen)
| Anforderung | Wert |
|---|---|
| Unterstützte Mindestversion (Client) |
Windows 2000 Professional [nur Desktop-Apps] |
| Unterstützte Mindestversion (Server) |
Windows 2000 Server [nur Desktop-Apps] |
| Header |
|
| Bibliothek |
|
| DLL |
|