WebGL, like its sister APIs (OpenGL and OpenGL ES), supports extensions. A complete list of extensions is available in the khronos webgl extension registry.
Extensions may be supported by browser vendors before being officially ratified (but only when they are in draft stage). In that case, their name can be prefixed by the vendor prefix (MOZ_
, WEBKIT_
, etc.) or the extension is only available once a browser preference has been toggled.
If you wish to work with the bleeding edge of extensions, and want to keep working on upon ratification (assuming, of course, that the extension doesn't change in incompatible ways), that you query the canonical extension name as well as the vendor extension name. For instance:
var ext = ( gl.getExtension('OES_vertex_array_object') || gl.getExtension('MOZ_OES_vertex_array_object') || gl.getExtension('WEBKIT_OES_vertex_array_object') );
Note that, vendor prefix have been discouraged more and more and thus most browser implement experimental extensions behind a feature flag rather than vendor prefix.
The feature flags are:
webgl.enable-draft-extensions
in Firefoxchrome://flags/#enable-webgl-draft-extensions
in Chromium based browsers (Chrome, Opera).WebGL extensions are prefixed with "ANGLE", "OES", "EXT" or "WEBGL". These prefixes reflect origin and intent:
The WebGL context supports querying what extensions are available.
var available_extensions = gl.getSupportedExtensions();
The WebGLRenderingContext.getSupportedExtensions()
method returns an array of strings, one for each supported extension.
The current extensions are:
ANGLE_instanced_arrays
EXT_blend_minmax
EXT_color_buffer_float
EXT_color_buffer_half_float
EXT_disjoint_timer_query
EXT_frag_depth
EXT_sRGB
EXT_shader_texture_lod
EXT_texture_filter_anisotropic
OES_element_index_uint
OES_standard_derivatives
OES_texture_float
OES_texture_float_linear
OES_texture_half_float
OES_texture_half_float_linear
OES_vertex_array_object
WEBGL_color_buffer_float
WEBGL_compressed_texture_atc
WEBGL_compressed_texture_etc
WEBGL_compressed_texture_etc1
WEBGL_compressed_texture_pvrtc
WEBGL_compressed_texture_s3tc
WEBGL_debug_renderer_info
WEBGL_debug_shaders
WEBGL_depth_texture
WEBGL_draw_buffers
WEBGL_lose_context
Before an extension can be used it has to be enabled using WebGLRenderingContext.getExtension()
. For example:
var float_texture_ext = gl.getExtension('OES_texture_float');
The return value is null
if the extension is not supported, or an extension object otherwise.
If an extension defines specific symbols or functions that are not available in the core specification of WebGL, they will be available on the extension object returned by the call to gl.getExtension()
.
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | 9 | 4.0 (2.0) | 11 | 12 | 5.1 |
ANGLE_instanced_arrays | ? | 33.0 (33.0) | ? | ? | ? |
EXT_blend_minmax | ? | 33.0 (33.0) | ? | ? | ? |
EXT_color_buffer_float | ? | 49.0 (49.0) | ? | ? | ? |
EXT_color_buffer_half_float | ? | 30.0 (30.0) | ? | ? | ? |
EXT_disjoint_timer_query | ? | 41.0 (41.0) [1] | ? | ? | ? |
EXT_frag_depth | ? | 30.0 (30.0) | ? | ? | ? |
EXT_sRGB | ? | 28.0 (28.0) | ? | ? | ? |
EXT_shader_texture_lod | ? | 50.0 (50.0) | ? | ? | ? |
EXT_texture_filter_anisotropic | ? | 17.0 (17.0) [2] | ? | ? | ? |
OES_element_index_uint | ? | 24.0 (24.0) | ? | ? | ? |
OES_standard_derivatives | ? | 10.0 (10.0) | ? | ? | ? |
OES_texture_float | ? | 6.0 (6.0) | ? | ? | ? |
OES_texture_float_linear | ? | 24.0 (24.0) | ? | ? | ? |
OES_texture_half_float | ? | 29.0 (29.0) | ? | ? | ? |
OES_texture_half_float_linear | ? | 30.0 (30.0) | ? | ? | ? |
OES_vertex_array_object | ? | 25.0 (25.0) | ? | ? | ? |
WEBGL_color_buffer_float | ? | 30.0 (30.0) | ? | ? | ? |
WEBGL_compressed_texture_atc | ? | 18.0 (18.0) | ? | ? | ? |
WEBGL_compressed_texture_etc | ? | 51.0 (51.0) | ? | ? | ? |
WEBGL_compressed_texture_etc1 | ? | 30.0 (30.0) | ? | ? | ? |
WEBGL_compressed_texture_pvrtc | ? | 18.0 (18.0) | ? | ? | ? |
WEBGL_compressed_texture_s3tc | ? | 22.0 (22.0) [2] | ? | ? | ? |
WEBGL_debug_renderer_info | ? | 19.0 (19.0) | ? | ? | ? |
WEBGL_debug_shaders | ? | 30.0 (30.0) | ? | ? | ? |
WEBGL_depth_texture | ? | 22.0 (22.0) [2] | ? | ? | ? |
WEBGL_draw_buffers | ? | 28.0 (28.0) | ? | ? | ? |
WEBGL_lose_context | ? | 22.0 (22.0) [2] | ? | ? | ? |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Yes) | 25 | 4.0 (2.0) | (Yes) | 12 | 8.0 |
ANGLE_instanced_arrays | ? | ? | ? | ? | ? | ? |
EXT_blend_minmax | ? | ? | ? | ? | ? | ? |
EXT_color_buffer_float | ? | ? | ? | ? | ? | ? |
EXT_color_buffer_half_float | ? | ? | ? | ? | ? | ? |
EXT_disjoint_timer_query | ? | ? | ? | ? | ? | ? |
EXT_frag_depth | ? | ? | ? | ? | ? | ? |
EXT_sRGB | ? | ? | ? | ? | ? | ? |
EXT_shader_texture_lod | ? | ? | ? | ? | ? | ? |
EXT_texture_filter_anisotropic | ? | ? | ? | ? | ? | ? |
OES_element_index_uint | ? | ? | ? | ? | ? | ? |
OES_standard_derivatives | ? | ? | ? | ? | ? | ? |
OES_texture_float | ? | ? | ? | ? | ? | ? |
OES_texture_float_linear | ? | ? | ? | ? | ? | ? |
OES_texture_half_float | ? | ? | ? | ? | ? | ? |
OES_texture_half_float_linear | ? | ? | ? | ? | ? | ? |
OES_vertex_array_object | ? | ? | ? | ? | ? | ? |
WEBGL_color_buffer_float | ? | ? | ? | ? | ? | ? |
WEBGL_compressed_texture_atc | ? | ? | ? | ? | ? | ? |
WEBGL_compressed_texture_etc | ? | ? | ? | ? | ? | ? |
WEBGL_compressed_texture_etc1 | ? | ? | ? | ? | ? | ? |
WEBGL_compressed_texture_s3tc | ? | ? | ? | ? | ? | ? |
WEBGL_compressed_texture_pvrtc | ? | ? | ? | ? | ? | ? |
WEBGL_compressed_texture_s3tc | ? | ? | ? | ? | ? | ? |
WEBGL_debug_renderer_info | ? | ? | ? | ? | ? | ? |
WEBGL_debug_shaders | ? | ? | ? | ? | ? | ? |
WEBGL_depth_texture | ? | ? | ? | ? | ? | ? |
WEBGL_draw_buffers | ? | ? | ? | ? | ? | ? |
WEBGL_lose_context | ? | ? | ? | ? | ? | ? |
[1] Toggling the webgl.enable-draft-extensions
preference in about:config is required.
[2] This extension was prefixed with MOZ_
in prior versions.
WebGLRenderingContext.getSupportedExtensions()
WebGLRenderingContext.getExtension()
© 2005–2017 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Using_Extensions