Verwenden von WebGL-Erweiterungen
WebGL unterstützt, ähnlich wie seine Schwester-APIs (OpenGL und OpenGL ES), Erweiterungen. Eine vollständige Liste von Erweiterungen ist im Khronos WebGL-Erweiterungsregister verfügbar.
Hinweis: In WebGL, im Gegensatz zu anderen GL-APIs, sind Erweiterungen nur verfügbar, wenn sie explizit angefordert werden.
Kanonische Erweiterungsnamen, Anbieterpräfixe und Präferenzen
Erweiterungen können von Browser-Entwicklern unterstützt werden, bevor sie offiziell ratifiziert sind (aber nur solange sie sich im Entwurfsstadium befinden). In diesem Fall kann ihr Name durch das Anbieterpräfix (MOZ_, WEBKIT_, etc.) erweitert werden oder die Erweiterung ist nur verfügbar, wenn eine Browser-Einstellung umgeschaltet wurde.
Wenn Sie mit den neuesten Erweiterungen arbeiten möchten und auch nach der Ratifizierung (vorausgesetzt, die Erweiterung ändert sich nicht auf inkompatible Weise) weiterarbeiten wollen, sollten Sie sowohl den kanonischen Erweiterungsnamen als auch den Anbieternamen abfragen. Zum Beispiel:
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 Anbieterpräfixe nicht mehr empfohlen werden, daher implementieren die meisten Browser experimentelle Erweiterungen hinter einem Feature-Flag anstelle des Anbieterpräfixes.
Die Feature-Flags sind:
webgl.enable-draft-extensionsin Firefoxchrome://flags/#enable-webgl-draft-extensionsin Chromium-basierten Browsern (Chrome, Opera).
Namenskonventionen
WebGL-Erweiterungen werden mit "ANGLE", "OES", "EXT" oder "WEBGL" vorangestellt. Diese Präfixe spiegeln Ursprung und Absicht wider:
ANGLE_: Erweiterungen, die von den Autoren der ANGLE-Bibliothek geschrieben wurden.OES_undKHR_: Erweiterungen, die Funktionalitäten von OpenGL ES (OES) oder OpenGL API-Erweiterungen widerspiegeln, die von den jeweiligen Architektur-Überprüfungsgremien (Khronos) genehmigt wurden.OVR_: Erweiterungen, die für Virtual Reality optimieren.EXT_: Erweiterungen, die andere OpenGL ES- oder OpenGL API-Erweiterungen widerspiegeln.WEBGL_: Erweiterungen, die WebGL-spezifisch sind und für die Kompatibilität mit mehreren Webbrowsern gedacht sind. Dies sollte auch für Erweiterungen gelten, die ursprünglich von den OpenGL ES- oder OpenGL APIs stammen, deren Verhalten jedoch erheblich verändert wurde.
Abfragen verfügbarer Erweiterungen
Der WebGL-Kontext unterstützt die Abfrage, welche Erweiterungen verfügbar sind.
const availableExtensions = gl.getSupportedExtensions();
Die Methode WebGLRenderingContext.getSupportedExtensions() gibt ein Array von Zeichenfolgen zurück, eine für jede unterstützte Erweiterung.
Erweiterungsliste
Die aktuellen Erweiterungen sind:
ANGLE_instanced_arraysEXT_blend_minmaxEXT_color_buffer_floatEXT_color_buffer_half_floatEXT_disjoint_timer_queryEXT_float_blendEXT_frag_depthEXT_shader_texture_lodEXT_sRGBEXT_texture_compression_bptcEXT_texture_compression_rgtcEXT_texture_filter_anisotropicEXT_texture_norm16KHR_parallel_shader_compileOES_draw_buffers_indexedOES_element_index_uintOES_fbo_render_mipmapOES_standard_derivativesOES_texture_floatOES_texture_float_linearOES_texture_half_floatOES_texture_half_float_linearOES_vertex_array_objectOVR_multiview2WEBGL_color_buffer_floatWEBGL_compressed_texture_astcWEBGL_compressed_texture_etcWEBGL_compressed_texture_etc1WEBGL_compressed_texture_pvrtcWEBGL_compressed_texture_s3tcWEBGL_compressed_texture_s3tc_srgbWEBGL_debug_renderer_infoWEBGL_debug_shadersWEBGL_depth_textureWEBGL_draw_buffersWEBGL_lose_contextWEBGL_multi_draw
Aktivieren einer Erweiterung
Bevor eine Erweiterung verwendet werden kann, muss sie mit WebGLRenderingContext.getExtension() aktiviert werden. Zum Beispiel:
const ext = gl.getExtension("OES_texture_float");
Der Rückgabewert ist null, wenn die Erweiterung nicht unterstützt wird, oder ein Erweiterungsobjekt, andernfalls.
Erweiterungsobjekte
Wenn eine Erweiterung bestimmte Symbole oder Funktionen definiert, die im Kern der WebGL-Spezifikation nicht enthalten sind, sind sie auf dem Erweiterungsobjekt verfügbar, das durch den Aufruf von gl.getExtension() zurückgegeben wird.