glCompressedTexImage
Inhaltsverzeichnis
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