glCopyTexImage2D: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Hinweise)
K (GlCopyTexImage2D wurde nach glCopyTexImage2D verschoben)
(kein Unterschied)

Version vom 5. Dezember 2005, 20:26 Uhr

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.

Änderungen

Folgende Erweiterungen hat die Funktion erfahren:

Ab OpenGL-Version 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