Verwendung von WebGL-Erweiterungen

WebGL unterstützt, wie seine Schwester-APIs (OpenGL und OpenGL ES), Erweiterungen. Eine vollständige Liste von Erweiterungen ist im Khronos WebGL Extension Registry verfügbar.

Hinweis: In WebGL sind Erweiterungen, im Gegensatz zu anderen GL-APIs, nur dann verfügbar, wenn sie explizit angefordert werden.

Kanonische Erweiterungsnamen, Herstellerpräfixe und Präferenzen

Erweiterungen können von Browserherstellern unterstützt werden, bevor sie offiziell ratifiziert werden (aber nur, wenn sie sich im Entwurfsstadium befinden). In diesem Fall kann ihr Name durch das Herstellerpräfix (MOZ_, WEBKIT_, etc.) vorangestellt sein oder die Erweiterung ist erst verfügbar, wenn eine Browsereinstellung umgeschaltet wurde.

Wenn Sie mit den neuesten Erweiterungen arbeiten möchten und hoffen, nach der Ratifizierung weiterarbeiten zu können (vorausgesetzt natürlich, die Erweiterung ändert sich nicht auf inkompatible Weise), sollten Sie sowohl den kanonischen Erweiterungsnamen als auch den Herstellernamen abfragen. Zum Beispiel:

js
const ext =
  gl.getExtension("OES_vertex_array_object") ||
  gl.getExtension("MOZ_OES_vertex_array_object") ||
  gl.getExtension("WEBKIT_OES_vertex_array_object");

Beachten Sie, dass Herstellerpräfixe entmutigt wurden, sodass die meisten Browser experimentelle Erweiterungen hinter einer Funktionseinstellung anstatt eines Herstellerpräfixes implementieren.

Die Funktionseinstellungen sind:

  • webgl.enable-draft-extensions in Firefox
  • chrome://flags/#enable-webgl-draft-extensions in Chromium-basierten Browsern (Chrome, Opera).

Namenskonventionen

WebGL-Erweiterungen sind mit "ANGLE", "OES", "EXT" oder "WEBGL" vorangestellt. Diese Präfixe spiegeln Herkunft und Absicht wider:

  • ANGLE_: Erweiterungen, die von den Autoren der ANGLE-Bibliothek geschrieben wurden.
  • OES_ und KHR_: Erweiterungen, die Funktionen aus OpenGL ES (OES) oder OpenGL-API-Erweiterungen widerspiegeln, die von den jeweiligen Architekturbewertungsgremien (Khronos) genehmigt wurden.
  • OVR_: Erweiterungen, die für virtuelle Realität optimiert sind.
  • EXT_: Erweiterungen, die andere OpenGL ES- oder OpenGL-API-Erweiterungen widerspiegeln.
  • WEBGL_: Erweiterungen, die WebGL-spezifisch sind und mit mehreren Webbrowsern kompatibel sein sollen. Sie sollten auch für Erweiterungen verwendet werden, die aus den OpenGL ES- oder OpenGL-APIs stammen, aber deren Verhalten wesentlich verändert wurde.

Abfragen verfügbarer Erweiterungen

Der WebGL-Kontext unterstützt das Abfragen, welche Erweiterungen verfügbar sind.

js
const available_extensions = gl.getSupportedExtensions();

Die Methode WebGLRenderingContext.getSupportedExtensions() gibt ein Array von Zeichenfolgen zurück, eine für jede unterstützte Erweiterung.

Erweiterungsliste

Aktivierung einer Erweiterung

Bevor eine Erweiterung verwendet werden kann, muss sie mit WebGLRenderingContext.getExtension() aktiviert werden. Zum Beispiel:

js
const float_texture_ext = gl.getExtension("OES_texture_float");

Der Rückgabewert ist null, wenn die Erweiterung nicht unterstützt wird, oder ein Erweiterungsobjekt, wenn sie unterstützt wird.

Erweiterungsobjekte

Wenn eine Erweiterung spezifische Symbole oder Funktionen definiert, die in der Kernspezifikation von WebGL nicht verfügbar sind, werden sie im Erweiterungsobjekt verfügbar sein, das durch den Aufruf von gl.getExtension() zurückgegeben wird.

Siehe auch