glCopyTexImage2D: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (Korrektur gelesen) |
Lyr (Diskussion | Beiträge) (→Hinweise) |
||
Zeile 73: | Zeile 73: | ||
<br> | <br> | ||
Ein Bild mit der Breite 0 entspricht einer '''nil'''-Textur. | Ein Bild mit der Breite 0 entspricht einer '''nil'''-Textur. | ||
+ | |||
+ | === OpenGL 1.3 === | ||
+ | [[GL_ARB_texture_cube_map]] definiert weitere 6 2D-Texture-Typen welche als target angegeben werden können. | ||
<br> | <br> |
Version vom 4. September 2005, 22:48 Uhr
Inhaltsverzeichnis
glCopyTexImage2D
Name
glCopyTexImage2D - Kopiert Pixel in eine 2-dimensionale Textur
Delphi-Spezifikation
procedure glCopyTexImage2D(target : GLenum; level : GLint; internalformat : GLenum; x : GLint; y : GLint; width : GLsizei; height : GLsizei; border : GLint)
Parameter
target | Gibt die zu bearbeitende Textur an. Die Textur muss vom Typ GL_TEXTURE_2D sein. |
---|---|
level | Gibt den level-of-detail-Grad an. Level 0 ist das normale Bild. Level n ist der n-te Mipmap-Level |
internalformat | Gibt das interne Format der Textur an. Muss eine der folgenden Konstanten sein: GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, GL_LUMINANCE, GL_LUMINANCE4, GL_LUMINANCE8, GL_LUMINANCE12, GL_LUMINANCE16, GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4, GL_LUMINANCE6_ALPHA2, GL_LUMINANCE8_ALPHA8, GL_LUMINANCE12_ALPHA4, GL_LUMINANCE12_ALPHA12, GL_LUMINANCE16_ALPHA16, GL_INTENSITY, GL_INTENSITY4, GL_INTENSITY8, GL_INTENSITY12, GL_INTENSITY16, GL_RGB, GL_R3_G3_B2, GL_RGB4, GL_RGB5, GL_RGB8, GL_RGB10, GL_RGB12, GL_RGB16, GL_RGBA, GL_RGBA2, GL_RGBA4, GL_RGB5_A1, GL_RGBA8, GL_RGB10_A2, GL_RGBA12, oder GL_RGBA16. |
x, y | Gibt die Fenster-Koordinaten der linken Ecke der zu kopierenden Teile von Pixeln an. |
width | Gibt die Breite der Textur an. Muss entweder 0 oder 2^n + 2 * border (für Ganzahlige n) sein. |
height | Gibt die Höhe der Textur an. Muss 2^m + 2 * border (für Ganzahlige m) sein. Wenn GL_INTERLACE_EXT aktiviert ist, muss die Höhe 2^m + border sein, da die Höhe dann verdoppelt wird. Alle Implementationen unterstützen Texturen, die mindestens 64 Texel hoch sind. |
border | Gibt die Breite des Rands an. Muss 0 oder 1 sein. |
Beschreibung
glCopyTexImage2D definiert eine 2-dimensionale Textur mit Pixeln aus dem aktuellen GL_READ_BUFFER.
Das Bildschirm-bezogene Pixelrechteck mit der unteren linken Ecke bei (x, y) und mit einer Länge von width + 2 * border und einer Höhe von height + 2 * border definiert den Texturbereich. Als Mipmap-Level wird level benutzt.
internalformat gibt das interne Format des Textur-Arrays an.
Die Pixel in dem Rechteck werden genau so bearbeitet wie wenn glCopyPixels aufgerufen worden wäre, nur dass der Vorgang vor der finalen Konvertierung gestoppt wird. An diesem Punkt werden alle Pixel-Werte an den [0, 1]-Bereich angepasst und dann in das interne Texturformat konvertiert, um im Texel-Array gespeichert zu werden.
Das Bildschirm-bezogene Pixelrechteck mit der unteren linken Ecke bei (x, y), der Breite width und der Höhe height wird benutzt, um die Textur zu definieren. Ist GL_INTERLACE_READ_I3D aktiviert, werden gewisse Zeilen ignoriert, so dass das Pixelrechteck mit der linken unteren Ecke bei (x, y), der Breite width und der Höhe 2 * height - 1 verwendet wird, um die Textur zu definieren. Wenn Pixel die innerhalb dieses Bereich liegen sich außerhalb des Fensters des GL-Kontextes befinden, bleiben die Werte für diese Pixel undefiniert.
Die Pixel werden so geordnet, dass kleinere x- und y-Werte am Bildschirm kleineren s- und t-Texturkoordinaten entsprechen.
Wenn sich einige der Pixel, die in der Zeile des aktuellen GL_READ_BUFFER angegeben werden, außerhalb des Bildschirms befinden, sind die Werte für diese Pixel undefiniert.
Ist GL_INTERLACE_EXT aktiviert, sind nur die Zeilen (0,2,4,...) der Textur - bei der der Rand als Teil der Textur zählt - definiert. Die restlichen Zeilen (1,3,5,...) bleiben undefiniert und können nur per glTexSubImage2D oder glCopyTexSubImage2D definiert werden.
Hinweise
glCopyTexImage2D ist ab OpenGL Version 1.1 verfügbar.
Texturierung hat keinen Effekt im Farbindex-Modus.
1, 2, 3 oder 4 werden nicht als internalformat akzeptiert.
Ein Bild mit der Breite 0 entspricht einer nil-Textur.
OpenGL 1.3
GL_ARB_texture_cube_map definiert weitere 6 2D-Texture-Typen welche als target angegeben werden können.
Extensions
Einige der Anweisungen und Konstanten dieser Funktion sind Teil einer Extension, also in der Standard-OpenGL-Implementation nicht enthalten. Die folgenden Extension-Bezeichnungen müssen in dem String, den glGetString liefert, enthalten sein, wenn die Funktion mit dem Argument GL_EXTENSIONS aufgerufen wird, um diese Anweisungen und Konstanten zu verwenden.
EXT_interlace
- GL_INTERLACE_EXT ist Teil der EXT_interlace - Extension.
EXT_interlace_read
- GL_INTERLACE_READ_I3D ist Teil der EXT_interlace_read - Extension.
Fehlermeldungen
GL_INVALID_ENUM wird generiert, wenn target nicht GL_TEXTURE_2D ist.
GL_INVALID_VALUE wird generiert, wenn level kleiner als 0 ist.
GL_INVALID_VALUE könnte generiert werden, wenn level größer als log2(max) ist. (max ist der Wert, der beim Aufruf von glGet mit Token GL_MAX_TEXTURE_SIZE geliefert wird)
GL_INVALID_VALUE wird genereirt, wenn internalformat keinen zulässigen Wert hat.
GL_INVALID_VALUE wird generiert, wenn
- width oder height kleiner als 0 oder
- width größer als 2 + GL_MAX_TEXTURE_SIZE ist oder nicht als 2^n + 2 * border (n ganzzahlig) dargestellt werden kann oder
- height nicht als 2^k + I * border dargestellt werden kann. (k ganzzahlig, I ist 1, wenn GL_INTERLACE_EXT aktiviert ist oder andernfalls 2)
GL_INVALID_VALUE wird erzeugt, wenn border nicht 1 oder 0 ist.
GL_INVALID_OPERATION wird generiert wenn glCopyTexImage2D innerhalb eines glBegin-glEnd Blocks aufgerufen wird.
Zugehörige Wertrückgaben
glGetTexImage
glIsEnabled mit dem Parameter GL_TEXTURE_2D
Siehe auch
glCopyPixels, glCopyTexImage1D, glCopyTexSubImage1D, glCopyTexSubImage2D, glPixelStore, glPixelTransfer, glTexEnv, glTexGen, glTexImage1D, glTexImage2D, glTexImage3DEXT, glTexSubImage1D, glTexSubImage2D, glTexSubImage3DEXT, glTexParameter