glCompressedTexSubImage: Unterschied zwischen den Versionen
K (Kategorie GL3 hinzugefügt) |
K (Kategorisierung) |
||
Zeile 146: | Zeile 146: | ||
== Zugehörige Wertrückgaben == | == Zugehörige Wertrückgaben == | ||
− | [[glGetCompressedTexImage]] | + | [[glGetCompressedTexImage]] |
− | [[glGetTexLevelParameter]] | + | |
− | [[glIsEnabled]] mit dem Token | + | [[glGetTexLevelParameter]] |
+ | |||
+ | [[glIsEnabled]] mit dem Token [[glIsEnabled#GL_TEXTURE_1D|GL_TEXTURE_1D]], [[glIsEnabled#GL_TEXTURE_2D|GL_TEXTURE_2D]] bzw. [[glIsEnabled#GL_TEXTURE_3D|GL_TEXTURE_3D]]. | ||
Zeile 157: | Zeile 159: | ||
[[Kategorie:GL|CompressedTexSubImage]] | [[Kategorie:GL|CompressedTexSubImage]] | ||
− | [[Kategorie:GL1.3]] | + | [[Kategorie:GL1.3|CompressedTexSubImage]] |
− | [[Kategorie:GL3]] | + | [[Kategorie:GL3|CompressedTexSubImage]] |
Version vom 18. Juni 2011, 18:40 Uhr
Inhaltsverzeichnis
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 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 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
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