glCompressedTexImage

Aus DGL Wiki
Version vom 29. April 2009, 11:12 Uhr von Dj3hut1 (Diskussion | Beiträge) (Links auf glTexImage ausgetauscht)

Wechseln zu: Navigation, Suche

glCompressedTexImage

Name

glCompressedTexImage - Lädt eine komprimierte Textur direkt.


Spezifikation

procedure glCompressedTexImage1D(target: TGLenum; level: TGLint;
                                 internalformat: TGLenum; width: TGLsizei;
                                 border: TGLint; imageSize: TGLsizei;
                                 const data: PGLvoid); 
procedure glCompressedTexImage2D(target: TGLenum; level: TGLint; internalformat: TGLenum; width: TGLsizei; height: TGLsizei; border: TGLint; imageSize: TGLsizei; const data: PGLvoid);
procedure glCompressedTexImage3D(target: TGLenum; level: TGLint; internalformat: TGLenum; width: TGLsizei; height: TGLsizei; depth: TGLsizei; border: TGLint; imageSize: TGLsizei; const data: PGLvoid);

Parameter

target Gibt die Zieltextur an. Muss für glCompressedTexImage1D GL_TEXTURE_1D, für glCompressedTexImage2D GL_TEXTURE_2D und für glCompressedTexImage3D GL_TEXTURE_3D sein. Für Cubemaps sind ausserdem 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 für die gewünschte Textur an.

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

internalformat 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.
width, Breite = Anzahl der Pixel pro Zeile
muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben.
height, Höhe = Anzahl der Zeilen
muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben
depth, Tiefe = Anzahl der "Scheiben"
muss als Wert 2^n (+ 2 * (border) ) für n Integerwerte haben
border, Pixelbreite des Texturrahmens. (0 für keinen Rahmen)
imageSize Anzahl der Bytes der komprimierten Daten.
_data Die komprimierten Texturdaten.



Beschreibung

Die Befehle glCompressedTexImage*D werden benutzt, um Texturdaten direkt in komprimierter Form zu laden. Diese Funktion wurde in OpenGL ab Version 1.3 eingeführt, um das Laden von Texturen zu verkürzen und um mehr Texturen auf der Grafikkarte abspeichern zu können.

Die Syntax der einzelnen Funktionen ist ähnlich wie bei den korrespondierenden Funktionen zu glTexImage1D, glTexImage2D bzw. glTexImage3D.

Mit den Parametern width, height und depth kann die Breite, Höhe und Tiefe der Textur angegeben werden.

internalFormat definiert das Format, mit dem die Texturdaten intern abgespeichert werden sollen, zur Zeit werden jedoch 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.

Mit border wird die Breite des Rahmens der Textur in Pixel festgelegt. Obwohl bei den Befehlen glTexImage1D, glTexImage2D bzw. glTexImage3D die Rahmenbreiten 0, 1 und 2 Pixel auf jeden Fall unterstützt werden, muss dies bei komprimierten Texturformaten nicht unbedingt der Fall sein.

Ü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

glCompressedTexImage 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 glCompressedTexImage undefiniert.

Es ist darauf zu achten, das die Komprimierungsformate nicht für alle Zieltexturen unterstützt werden müssen (die meisten Komprimierungsformat 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 glCompressedTexImage folgende Punkte beachtet :

  • _data zeigt auf Daten, die man über die Funktion glGetCompressedTexImage bekommen hat.
  • target, level und internalformat stimmen mit den Parametern target, level und format von glGetCompressedTexImage überein.
  • width, height, depth, border, internalformat 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_BORDER, GL_TEXTURE_INTERNAL_FORMAT und GL_TEXTURE_COMPRESSED_IMAGE_SIZE bekommt, nachdem glGetCompressedTexImage aufgerufen wurde.



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 internalformat 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 internalformat angegebenem Komprimierungsformat übereinstimmen.

GL_INVALID_VALUE wird generiert, wenn border keinen zulässigen Wert hat.

GL_INVALID_OPERATION wird generiert, wenn eine glCompressedTexImage-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 border > 0 und keine Texturränder vom Komprimierungsformat unterstützt werden.

Zugehörige Wertrückgaben

glGetCompressedTexImage
glGetTexLevelParameter
glIsEnabled mit dem Token GL_TEXTURE_1D, GL_TEXTURE_2D bzw. GL_TEXTURE_3D.



Siehe auch

glCompressedTexSubImage1D, glCompressedTexSubImage2D, glCompressedTexSubImage3D, glGetCompressedTexImage, glTexCoord, glTexEnv, glTexGen, glTexImage1D, glTexImage2D, glTexImage3D, glTexParameter