glCompressedTexSubImage

Aus DGL Wiki
(Weitergeleitet von glCompressedTexSubImage2D)
Wechseln zu: Navigation, Suche

glCompressedTexSubImage

Name

glCompressedTexSubImage - modifiziert den Teilbereich einer komprimierten Textur.


Spezifikation

procedure glCompressedTexSubImage1D(target: TGLenum; level: TGLint;
                                    xoffset: TGLint; width: TGLsizei;
                                    format: TGLenum; imageSize: TGLsizei;
                                    const data: PGLvoid); 
procedure glCompressedTexSubImage2D(target: TGLenum; level: TGLint; xoffset: TGLint; yoffset: TGLint; width: TGLsizei; height: TGLsizei; format: TGLenum; imageSize: TGLsizei; const data: PGLvoid);
procedure glCompressedTexSubImage3D(target: TGLenum; level: TGLint; xoffset: TGLint; yoffset: TGLint; zoffset: TGLint; width: TGLsizei; height: TGLsizei; depth: TGLsizei; format: TGLenum; imageSize: TGLsizei; const data: PGLvoid);

Parameter

target Gibt die Zieltextur an. Muss für glCompressedTexSubImage1D GL_TEXTURE_1D, für glCompressedTexSubImage2D GL_TEXTURE_2D und für glCompressedTexSubImage3D GL_TEXTURE_3D sein. Für Cubemaps sind außerdem die symbolischen Konstanten GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z und GL_TEXTURE_CUBE_MAP_NEGATIVE_Z erlaubt.
level Gibt den Detailgrad der zu modifizierenden Textur an.

level 0 ist das Basisbild. Level n ist die n-te Mipmap-Reduzierung der Textur.

xoffset Offset der bestehenden Textur in x-Richtung, von der aus die Modifizierung beginnen soll.
yoffset Offset der bestehenden Textur in y-Richtung, von der aus die Modifizierung beginnen soll.
zoffset Offset der bestehenden Textur in z-Richtung (Tiefe), von der aus die Modifzierung beginnen soll.
width, Breite der Subtextur.
height, Höhe der Subtextur.
depth, Tiefe der Subtextur.
format Internes Format der komprimierten Texturdaten. Z.B. eine der symbolischen Konstanten GL_COMPRESSED_RGB_S3TC_DXT1, GL_COMPRESSED_RGBA_S3TC_DXT1, GL_COMPRESSED_RGBA_S3TC_DXT3 oder GL_COMPRESSED_RGBA_S3TC_DXT5 falls die Extension GL_EXT_texture_compression_s3tc unterstützt wird.
imageSize Anzahl der Bytes der komprimierten Daten.
_data Die komprimierten Texturdaten.



Beschreibung

Die Befehle glCompressedSubTexImage*D werden benutzt, um Teilbereiche bestehender Texturen zu überschreiben, die mit glCompressedTexImage geladen wurden.

Die Syntax der einzelnen Funktionen ist ähnlich wie bei den korrespondierenden Funktionen zu glTexSubImage.

Mit den Parametern xoffset, yoffset, zoffset werden die Koordinaten angegeben, ab der die zu modifizierende Textur überschrieben wird.

Die Breite, Höhe und Tiefe der Subtextur werden mit den Parametern width, height und depth übergeben.

format definiert das Format, mit dem die Texturdaten intern abgespeichert werden sollen, und sollten mit dem Format der zu überschreibenden Textur übereinstimmen.

Zur Zeit werden von OpenGL noch keine komprimierten Formate unterstützt. Bisher ist es nur möglich über Extensions, wie z.B. GL_EXT_texture_compression_s3tc, komprimierte Texturformate anzugeben :

GL_COMPRESSED_RGB_S3TC_DXT1

RGB-Daten werden komprimiert, Alpha-Komponente ist immer 1.0.

GL_COMPRESSED_RGBA_S3TC_DXT1

RGB-Daten werden komprimiert, Alpha-Komponente ist entweder 1.0 oder 0.0.

GL_COMPRESSED_RGBA_S3TC_DXT3

RGB-Daten werden komprimiert, Alpha-Komponente wird mit 4 Bits gespeichert.

GL_COMPRESSED_RGBA_S3TC_DXT5

RGB-Daten werden komprimiert, Alpha-Komponente ist gewichtetes Mittel von 8-Bit Werten.

Über den Parameter imageSize gibt man die genaue Anzahl der Bytes an, die mit _data an die Funktion übergeben werden.

Um eine geladene Textur in OpenGL zu nutzen ist auf jeden Fall noch die entsprechende Aktivierung mit glEnable(GL_TEXTURE_1D, GL_TEXTURE_2D oder GL_TEXTURE_3D) nötig.



Hinweise

glCompressedTexSubImage ist erst ab OpenGL Version 1.3 oder höher nutzbar.

Mit glGetIntegerv und dem Parameter GL_COMPRESSED_TEXTURE_FORMATS kann ermittelt werden, welche komprimierten Texturformate von der OpenGL-Implementation unterstützt werden.

glPixelStore und glPixelTransfer beeinflussen nicht das Dekodieren einer komprimierten Textur.

Entsprechen die an die Funktion übergebenen Daten nicht dem Komprimierungformat, so verhält sich der Aufruf von glCompressedTexSubImage undefiniert.

Der Zustand von Texel ausserhalb des zu modifizierenden Bereiches ist undefiniert.

Es ist darauf zu achten, dass die Komprimierungsformate nicht für alle Zieltexturen unterstützt werden müssen (die meisten Komprimierungsformate unterstützen nur zweidimensionale Texturen). Nähere Informationen findet man in der Spezifikation der jeweiligen Extension.

Texturierung hat im Farbindexmodus keinen Effekt.

Keine Fehlermeldungen werden generiert, wenn man beim Aufruf von glCompressedTexSubImage folgende Punkte beachtet :

  • _data zeigt auf Daten, die man über die Funktion glGetCompressedTexImage bekommen hat.
  • target, level und format stimmen mit den Parametern target, level und format von glGetCompressedImage überein.
  • width, height, depth, format und imageSize stimmen mit den Werten überein, die man über die Funktion glGetTexLevelParameter mit den Parametern GL_TEXTURE_WIDTH, GL_TEXTURE_HEIGHT, GL_TEXTURE_DEPTH, GL_TEXTURE_INTERNAL_FORMAT und GL_TEXTURE_COMPRESSED_IMAGE_SIZE bekommt, nachdem glGetCompressedTexImage aufgerufen wurde.
  • width, height, depth und format stimmen mit den Werten überein, die man über die Funktion glGetTexLevelParameter mit den Parametern GL_TEXTURE_WIDTH, GL_TEXTURE_HEIGHT, GL_TEXTURE_DEPTH und GL_TEXTURE_INTERNAL_FORMAT und der zu überschreibenden Textur-Detailstufe bekommt.
  • xoffset, yoffset und zoffset haben alle den Wert -b, wobei b der Rückgabewert der Funktion glGetTexLevelParameter mit dem Parameter GL_TEXTURE_BORDER und der zu überschreibenden Textur-Detailstufe ist.


Fehlermeldungen

GL_INVALID_ENUM wird generiert, wenn target nicht GL_TEXTURE_1D, GL_TEXTURE_2D oder GL_TEXTURE_3D ist. (entsprechend der benutzten Funktion)

GL_INVALID_ENUM wird generiert, wenn format kein von der OpenGL-Implementierung unterstütztes komprimiertes Format ist.

GL_INVALID_VALUE wird generiert, wenn level kleiner 0 oder größer ld(max) ist, wobei max der Rückgabewert von GL_MAX_TEXTURE_SIZE ist. (ld = Logarithmus Dualis = Basis 2).

GL_INVALID_VALUE wird generiert, wenn width, height bzw. depth (je nach Funktion) kleiner als 0 oder größer als 2 + GL_MAX_TEXTURE_SIZE ist, oder die Bedingung 2^k + 2 * (border) (k=Integerwerte) nicht erfüllt.

GL_INVALID_VALUE wird generiert, wenn imageSize nicht der Anzahl der Bytes entspricht, die mit _data übergeben wurden.

GL_INVALID_VALUE wird generiert, wenn die übergebenen Daten nicht dem mit format angegebenem Komprimierungsformat übereinstimmen.

GL_INVALID_VALUE wird generiert, wenn width und height nicht mit dem Format der Daten von _data übereinstimmen (zu viel oder zu wenig Daten).

GL_INVALID_OPERATION wird generiert, wenn eine glCompressedTexSubImage-Funktion in einem glBegin- und glEnd-Block aufgerufen wird.

GL_INVALID_OPERATION wird generiert, wenn das Komprimierungsformat nicht für die mit target angegebene Zieltextur unterstützt wird.

GL_INVALID_OPERATION wird generiert, wenn format nicht mit internalformat der zu überschreibenden Textur übereinstimmt.

Zugehörige Wertrückgaben

glGetCompressedTexImage

glGetTexLevelParameter

glIsEnabled mit dem Token GL_TEXTURE_1D, GL_TEXTURE_2D bzw. GL_TEXTURE_3D.



Siehe auch

glCompressedTexImage1D, glCompressedTexImage2D, glCompressedTexImage3D, glGetCompressedTexImage, glTexCoord, glTexEnv, glTexGen, glTexImage1D, glTexImage2D, glTexImage3D, glTexParameter