glTexSubImage

Aus DGL Wiki
Version vom 13. September 2005, 20:54 Uhr von Flash (Diskussion | Beiträge) (Neuer Artikel)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

glTexSubImage


Name

glTexSubImage1D, glTexSubImage2D, glTexSubImage3D - ersetzen eine ein-, zwei-, bzw. dreidimensionalen Texturbereich mit neuen Daten.


Delphi-Spezifikation

procedure glTexSubImage1D(target: TGLenum; level: TGLint; 
                          xoffset: TGLint; 
                          width: TGLsizei; 
                          format: TGLenum; _type: TGLenum; 
                          const pixels: PGLvoid); 
procedure glTexSubImage2D(target: TGLenum; level: TGLint; 
                          xoffset: TGLint; yoffset: TGLint; 
                          width: TGLsizei; height: TGLsizei; 
                          format: TGLenum; _type: TGLenum; 
                          const pixels: PGLvoid);
procedure glTexSubImage3D(target: TGLenum; level: TGLint; 
                          xoffset: TGLint; yoffset: TGLint; zoffset: TGLint; 
                          width: TGLsizei; height: TGLsizei; depth: TGLsizei; 
                          format: TGLenum; _type: TGLenum; 
                          const pixels: PGLvoid);


Parameter

target Legt die Zieltextur fest. Die Zieltextur muss die selbe Dimension wie glTexSubImage haben. (Also z.B. GL_TEXTURE_2D bei einem Aufruf von glTexSubImage2D.)
level Bestimmt die Level-Of-Detail Nummer. 0 ist das Ausgangsbild. Level n stellt die nte MipMapstufe des Ausgangsbildes dar.
xoffset, yoffset, zoffset Bestimmt die Koordinaten des Ankerpunktes an dem der zu ersetzende Texturbereich beginnt. yoffset ist ab glTexSubImage2D vorhanden, zoffset ab glTexSubImage3D.
width, height, depth Bestimmt die Breite, Höhe (Nur glTexSubImage2D und glTexSubImage3D) und Tiefe (Nur glTexSubImage3D) des zu ersetzenden Texturbereichs.
format Bestimmt das Format der Pixeldaten. Folgende Konstanten werden akzeptiert: GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_LUMINANCE und GL_LUMINANCE_ALPHA.
_type Bestimmt den Datentyp der Pixeldaten. Die folgenden symbolischen Konstanten werden akzeptiert: GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT, 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.
pixels Pointer auf die Bilddaten im Speicher.


Beschreibung

Bei der Texturierung wird ein Teil eines Texturbildes auf ein Primitiv, für welches Texturierung aktiviert wurde, abgebildet. Um die verschiedenen Texturierungsmöglichkeiten zu aktivieren bzw. deaktivieren rufen sie glEnable bzw. glDisable mit GL_TEXTURE_1D, GL_TEXTURE_2D bzw. GL_TEXTURE_3D auf.

glTexSubImageXD redefiniert einen zusammenhängenden Teilbereich einer bereits bestehenden X-dimensionalen Textur. (X kann 1, 2 oder 3 sein.) Die Texel auf welche pixels zeigt, ersetzen dabei den Teil der existierenden Textur. Der Bereich der ersetzt wird ist folgender:

  • x läuft von xoffset bis einschließlich xoffset + width - 1
  • y läuft von yoffset bis einschließlich yoffset + height - 1 (Nur glTexSubImage2D und glTexSubImage3D)
  • z läuft von zoffset bis einschließlich zoffset + depth -1 (Nur glTexSubImage3D)

Die Beschriebene Region darf keine Texel außerhalb des ursprünglich definierten Texturfeldes enthalten.

Es ist kein Fehler einen Subtexturbereich mit Kantenlänge 0 zu definieren. Eine solche Definition hat aber keinen Effekt.


Hinweise

glTexSubImage1D und glTexSubImage2D sind erst ab OpenGL Version 1.1 verfügbar.
glTexSubImage3D ist erst ab OpenGL Version 1.2 verfügbar.

Die Formate GL_BGR und GL_BGRA und die Typen 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 erst ab OpenGL Version 1.2 verfügbar.

Texturierung wirkt sich im Farbindexmodus nicht aus.

Die Zustände von glPixelStore und glPixelTransfer beeinflussen Texturbilder in exakt der gleichen Weise, wie sie glDrawPixels beeinflussen.

Wenn die Extension GL_ARB_multitexture unterstützt wird, spezifiziert glTexSubImage3D eine dreidimensionale Subtextur für die aktuelle Textureinheit, welche mittels glActiveTexture gesetzt wurde.

Wenn die Extension GL_ARB_imaging unterstützt wird, können die RGBA Komponenten die in pixels spezifiziert wurden, durch die Imaging Pipeline verarbeitet werden. Für mehr Informationen siehe glTexImage3D.


Fehlermeldungen

GL_INVALID_ENUM wird generiert wenn target nicht GL_TEXTURE_1D (für glTexSubImage1D), GL_TEXTURE_2D (für glTexSubImage2D) bzw. GL_TEXTURE_3D (für glTexSubImage3D) ist.

GL_INVALID_ENUM wird generiert wenn format eine nicht akzeptierte Konstante übergeben wurde.
GL_INVALID_ENUM wird generiert wenn type keine Typkonstante zugewiesen wurde.
GL_INVALID_ENUM wird generiert wenn type gleich GL_BITMAP, aber format nicht GL_COLOR_INDEX ist.
GL_INVALID_VALUE wird generiert wenn level kleiner 0 ist.
GL_INVALID_VALUE könnte generiert werden wenn level größer als Log 2 max.png ist, wobei max der Wert von GL_MAX_TEXTURE_SIZE ist.
GL_INVALID_VALUE wird generiert wenn einer der folgenden Fälle eintritt:

wobei gilt:

  • w ist GL_TEXTURE_WIDTH,
  • h ist GL_TEXTURE_HEIGHT,
  • d ist GL_TEXTURE_DEPTH,
  • b ist die Randbreite (border width) des Texturbildes was modifiziert wird,
  • l ist 2 wenn GL_INTERLACE_EXT aktiviert wurde.
  • w, h und d enthalten die doppelte Randbreite.


GL_INVALID_VALUE wird generiert wenn width, height oder depth kleiner 0 sind.
GL_INVALID_OPERATION wird generiert wenn das Texturfeld nicht durch einen vorhergehenden aufruf von glTexImage1D, glTexImage2D bzw. glTexImage3D initialisiert wurde.
GL_INVALID_OPERATION wird generiert wenn type entweder GL_UNSIGNED_BYTE_3_3_2, GL_UNSIGNED_BYTE_2_3_3_REV, GL_UNSIGNED_SHORT_5_6_5 oder GL_UNSIGNED_SHORT_5_6_5_REV ist und format nicht GL_RGB ist.
GL_INVALID_OPERATION wird generiert wenn type entweder 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 oder GL_UNSIGNED_INT_2_10_10_10_REV ist und format weder GL_RGBA noch GL_BGRA ist.
GL_INVALID_OPERATION wird generiert wenn glTexSubImage1D,glTexSubImage2D oder glTexSubImage3D innerhalb eines glBegin-glEnd Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGetTexImage
glIsEnabled mit Token GL_TEXTURE_1D oder GL_TEXTURE_2D oder GL_TEXTURE_3D


Siehe auch

glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glDrawPixels, glPixelStore, glPixelTransfer, glTexEnv, glTexGen, glTexImage1D, glTexImage2D, glTexImage3D, glTexParameter