WebGL-Erweiterungen verwenden
WebGL unterstützt wie die verwandten APIs OpenGL und OpenGL ES Erweiterungen. Eine vollständige Liste finden Sie im Khronos-Register für WebGL-Erweiterungen.
Hinweis: Anders als bei anderen GL-APIs sind Erweiterungen in WebGL nur verfügbar, wenn sie ausdrücklich angefordert werden.
Kanonische Erweiterungsnamen, Anbieterpräfixe und Einstellungen
Browseranbieter können Erweiterungen unterstützen, bevor diese offiziell verabschiedet wurden (allerdings nur, solange sie sich im Entwurfsstadium befinden). In diesem Fall kann dem Namen ein Anbieterpräfix (MOZ_, WEBKIT_ usw.) vorangestellt sein, oder die Erweiterung ist erst verfügbar, nachdem eine Browsereinstellung aktiviert wurde.
Wenn Sie neue Erweiterungen frühzeitig verwenden und Ihren Code auch nach deren Verabschiedung weiter nutzen möchten (vorausgesetzt, die Erweiterung ändert sich nicht auf inkompatible Weise), sollten Sie sowohl den kanonischen Namen als auch den Namen mit Anbieterpräfix 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 von Anbieterpräfixen abgeraten wird. Die meisten Browser stellen experimentelle Erweiterungen daher hinter einem Feature-Flag bereit, statt ein Anbieterpräfix zu verwenden.
Die Feature-Flags sind:
webgl.enable-draft-extensionsin Firefoxchrome://flags/#enable-webgl-draft-extensionsin Chromium-basierten Browsern (Chrome, Opera).
Namenskonventionen
WebGL-Erweiterungen tragen die Präfixe „ANGLE“, „OES“, „EXT“ oder „WEBGL“. Diese Präfixe geben Herkunft und Zweck an:
ANGLE_: Erweiterungen, die von den Autoren der ANGLE-Bibliothek geschrieben wurden.OES_undKHR_: Erweiterungen, die Funktionen von OpenGL ES (OES) oder OpenGL API-Erweiterungen übernehmen, welche von den jeweiligen Architekturprüfungsgremien (Khronos) genehmigt wurden.OVR_: Erweiterungen, die für Virtual Reality optimiert sind.EXT_: Erweiterungen, die andere Erweiterungen von OpenGL ES oder der OpenGL API übernehmen.WEBGL_: WebGL-spezifische Erweiterungen, die mit mehreren Webbrowsern kompatibel sein sollen. Dieses Präfix sollte auch für Erweiterungen verwendet werden, die ursprünglich aus OpenGL ES oder den OpenGL APIs stammen, deren Verhalten aber erheblich verändert wurde.
Verfügbare Erweiterungen abfragen
Über den WebGL-Kontext können Sie abfragen, 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.
Liste der Erweiterungen
Die derzeitigen Erweiterungen sind:
ANGLE_instanced_arraysEXT_blend_minmaxEXT_color_buffer_floatEXT_color_buffer_half_floatEXT_disjoint_timer_queryEXT_float_blendEXT_frag_depthEXT_polygon_offset_clampEXT_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
Eine Erweiterung aktivieren
Bevor Sie eine Erweiterung verwenden können, müssen Sie sie mit WebGLRenderingContext.getExtension() aktivieren. Zum Beispiel:
const ext = gl.getExtension("OES_texture_float");
Der Rückgabewert ist null, wenn die Erweiterung nicht unterstützt wird. Andernfalls wird ein Erweiterungsobjekt zurückgegeben.
Erweiterungsobjekte
Wenn eine Erweiterung eigene Symbole oder Funktionen definiert, die nicht zur WebGL-Kernspezifikation gehören, sind diese auf dem Erweiterungsobjekt verfügbar, das der Aufruf von gl.getExtension() zurückgibt.