Start · Sprachen · JavaScript · Referenz · WEBGL_compressed_texture_astc.getSupportedProfiles()

WEBGL_compressed_texture_astc.getSupportedProfiles()

Methode

Gibt ein Array mit den Namen der ASTC-Profile zurück (z. B. <code>"ldr"</code>, <code>"hdr"</code>), die die WebGL-Implementierung unterstützt.

seit JavaScript WebGL 1/2-Erweiterung; Unterstützung abhängig von Kategorie: webapi

Signatur

WEBGL_compressed_texture_astc.getSupportedProfiles()

Beschreibung

Die Methode getSupportedProfiles() gehört zur WebGL-Erweiterung WEBGL_compressed_texture_astc, die das Texturkompressionsformat ASTC (Adaptive Scalable Texture Compression) verfügbar macht. Sie liefert ein Array von Zeichenfolgen, das angibt, welche ASTC-Profile die Grafikhardware bzw. der Treiber tatsächlich unterstützt.

Mögliche Werte sind:

  • "ldr" – Low Dynamic Range: Standardprofil für normale 8-Bit-Farbtexturen (RGBA und sRGB). Ist die Erweiterung vorhanden, ist dieses Profil immer enthalten.
  • "hdr" – High Dynamic Range: erlaubt Texturen mit Farbwerten außerhalb des Bereichs 0–1, etwa für HDR-Umgebungskarten. Wird nur von einem Teil der Hardware unterstützt.

Man ruft die Methode typischerweise einmal beim Initialisieren des Renderers auf, um zu entscheiden, welche Textur-Varianten (z. B. HDR-ASTC oder ein Fallback wie RGBA16F/RGBE) vom Server geladen werden sollen. So vermeidet man, Daten herunterzuladen, die die GPU gar nicht dekodieren kann.

Rückgabewert

Typ
string[]
Beschreibung
Ein Array von Zeichenfolgen mit den unterstützten Profilen, z. B. ["ldr"] oder ["ldr", "hdr"].

Beispiele

Unterstützte ASTC-Profile abfragen

const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl2') ?? canvas.getContext('webgl');

const astc = gl?.getExtension('WEBGL_compressed_texture_astc');

if (astc) {
  const profiles = astc.getSupportedProfiles();
  console.log('ASTC-Profile:', profiles);
} else {
  console.log('ASTC wird nicht unterstützt');
}
ASTC-Profile: ["ldr"]

HDR-Unterstützung prüfen und passende Textur laden

const pickEnvironmentMap = (gl) => {
  const astc = gl.getExtension('WEBGL_compressed_texture_astc');
  if (!astc) return 'textures/env_rgbe.png';

  const supportsHdr = astc.getSupportedProfiles().includes('hdr');
  return supportsHdr
    ? 'textures/env_astc_hdr.ktx2'
    : 'textures/env_astc_ldr.ktx2';
};

const gl = document.querySelector('canvas').getContext('webgl2');
console.log('Lade:', pickEnvironmentMap(gl));
Lade: textures/env_astc_ldr.ktx2

Komprimierte ASTC-Textur hochladen (LDR)

const uploadAstcTexture = async (gl, url, width, height) => {
  const astc = gl.getExtension('WEBGL_compressed_texture_astc');
  if (!astc || !astc.getSupportedProfiles().includes('ldr')) {
    throw new Error('ASTC LDR nicht verfügbar');
  }

  const buffer = await (await fetch(url)).arrayBuffer();
  const texture = gl.createTexture();
  gl.bindTexture(gl.TEXTURE_2D, texture);
  gl.compressedTexImage2D(
    gl.TEXTURE_2D, 0,
    astc.COMPRESSED_RGBA_ASTC_4x4_KHR,
    width, height, 0,
    new Uint8Array(buffer) // reine ASTC-Blockdaten ohne Header
  );
  gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
  return texture;
};

// Wichtig · Fallstricke

  • Erweiterung zuerst holen: Die Methode existiert nur am Objekt, das gl.getExtension('WEBGL_compressed_texture_astc') zurückgibt. Liefert dieser Aufruf null, unterstützt das Gerät ASTC überhaupt nicht.
  • Hardware-Abhängigkeit: ASTC ist vor allem auf Mobil-GPUs (ARM Mali, Qualcomm Adreno, Apple) und Apple-Silicon-Macs verfügbar; auf vielen Desktop-GPUs (Windows/Linux) fehlt die Erweiterung. Immer einen Fallback (z. B. S3TC/BPTC, ETC2 oder unkomprimiert) vorsehen.
  • Kein eigener HDR-Konstantensatz: Die Format-Konstanten (z. B. COMPRESSED_RGBA_ASTC_4x4_KHR) sind für LDR und HDR identisch; ob HDR-Daten korrekt dekodiert werden, verrät nur getSupportedProfiles().
  • Kontextverlust: Nach einem webglcontextlost/webglcontextrestored muss die Erweiterung neu abgefragt werden.
  • Fingerprinting: Die Rückgabewerte geben Hinweise auf die Hardware; manche Browser mit Datenschutz-Modus können Erweiterungen einschränken.