Start · Sprachen · JavaScript · Referenz · WEBGL_compressed_texture_etc extension

WEBGL_compressed_texture_etc extension

Schnittstelle

WebGL-Erweiterung, die zehn komprimierte ETC2/EAC-Texturformate für <code>compressedTexImage2D()</code> und verwandte Methoden bereitstellt.

seit JavaScript WebGL 1 und WebGL 2 (Erweiterung); in der Praxis v Kategorie: webapi

Signatur

interface WEBGL_compressed_texture_etc

Beschreibung

WEBGL_compressed_texture_etc ist eine Erweiterung der WebGL-API. Mit ihr lädt man Texturen im Format ETC2 (Farbe, optional mit Alpha) und EAC (ein- oder zweikanalige Daten wie Höhenkarten, Masken oder Normalen) direkt auf die GPU. OpenGL ES 3.0 schreibt diese Formate vor. Deshalb dekodiert praktisch jede mobile GPU sie in Hardware. Die Daten bleiben auch im Grafikspeicher komprimiert. Das spart VRAM und Speicherbandbreite und verkürzt die Ladezeit, weil im Browser nichts dekodiert werden muss.

Man holt die Erweiterung mit gl.getExtension("WEBGL_compressed_texture_etc"). Das zurückgegebene Objekt hat keine Methoden, sondern nur zehn Konstanten (GLenum). Diese übergibt man als internalformat an compressedTexImage2D() oder compressedTexSubImage2D(). In WebGL 2 funktionieren sie zusätzlich mit texStorage2D(), texStorage3D(), compressedTexImage3D() und compressedTexSubImage3D(). Auch in WebGL 2 gehören die Formate nicht zum Kern. Die Erweiterung muss man also immer ausdrücklich aktivieren.

Alle Formate speichern Blöcke von 4×4 Pixeln. Die erwartete Datengröße einer Mip-Stufe ist Math.ceil(breite / 4) * Math.ceil(hoehe / 4) * blockBytes. 8 Byte pro Block brauchen R11_EAC, SIGNED_R11_EAC, RGB8_ETC2, SRGB8_ETC2 und die beiden PUNCHTHROUGH_ALPHA1-Varianten. 16 Byte pro Block brauchen RG11_EAC, SIGNED_RG11_EAC, RGBA8_ETC2_EAC und SRGB8_ALPHA8_ETC2_EAC.

Typischerweise nutzt man die Erweiterung als einen von mehreren Pfaden, je nach verfügbarem Format: ETC2 für Android und iOS, S3TC/BPTC für Desktop, ASTC als modernen Allrounder. Die Daten erzeugt man vorab mit Werkzeugen wie etcpak, PVRTexTool oder toktx (KTX2/Basis Universal).

Parameter

Name Typ Default Beschreibung
$COMPRESSED_R11_EAC GLenum (0x9270) Ein Kanal (Rot), 11 Bit ohne Vorzeichen. 8 Byte pro 4×4-Block. Gut für Höhenkarten und Masken.
$COMPRESSED_SIGNED_R11_EAC GLenum (0x9271) Ein Kanal, 11 Bit mit Vorzeichen (Wertebereich −1 bis 1). 8 Byte pro Block.
$COMPRESSED_RG11_EAC GLenum (0x9272) Zwei Kanäle (Rot, Grün), 11 Bit ohne Vorzeichen. 16 Byte pro Block.
$COMPRESSED_SIGNED_RG11_EAC GLenum (0x9273) Zwei Kanäle mit Vorzeichen. 16 Byte pro Block. Ideal für Normal-Maps im XY-Format; Z rekonstruiert man im Shader.
$COMPRESSED_RGB8_ETC2 GLenum (0x9274) RGB ohne Alpha. 8 Byte pro Block. Abwärtskompatibel zu ETC1-Daten.
$COMPRESSED_SRGB8_ETC2 GLenum (0x9275) Wie RGB8_ETC2, aber im sRGB-Farbraum. Die GPU linearisiert beim Sampeln. 8 Byte pro Block.
$COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 GLenum (0x9276) RGB mit 1-Bit-Alpha (Pixel voll sichtbar oder voll transparent). 8 Byte pro Block. Gut für Laub und Zäune.
$COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 GLenum (0x9277) sRGB-Variante mit 1-Bit-Alpha. 8 Byte pro Block.
$COMPRESSED_RGBA8_ETC2_EAC GLenum (0x9278) RGBA mit vollem 8-Bit-Alpha. 16 Byte pro Block.
$COMPRESSED_SRGB8_ALPHA8_ETC2_EAC GLenum (0x9279) sRGB-Farbe mit linearem 8-Bit-Alpha. 16 Byte pro Block.

Rückgabewert

Typ
WEBGL_compressed_texture_etc | null
Beschreibung
gl.getExtension("WEBGL_compressed_texture_etc") gibt das Erweiterungsobjekt mit den zehn Konstanten zurück. Unterstützt der Kontext die Formate nicht, ist der Rückgabewert null.