Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Using WebGL extensions

这篇翻译不完整。请帮忙从英语翻译这篇文章

WebGL,与其姊妹API(OpenGL and OpenGL ES)类似,支持使用扩展(extensions)。一份完整的可用扩展列表见 khronos webgl extension registry

Note: In WebGL, unlike in other GL APIs, extensions are only available if explicitly requested.

Canonical extension names, vendor prefixes and preferences

扩展(extensions)在未被官方正式制定为标准前,某些浏览器厂商可能会支持WebGL扩展 (but only when they are in draft stage)。这样的话,扩展的名字应该加上相应的厂商前缀 (MOZ_, WEBKIT_, etc.),否则这个扩展只能在浏览器切换了偏好设置的前提下生效。

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 Firefox
  • chrome://flags/#enable-webgl-draft-extensions in Chromium based browsers (Chrome, Opera).

Naming conventions

WebGL extensions are prefixed with "ANGLE", "OES", "EXT" or "WEBGL". These prefixes reflect origin and intent:

  • ANGLE_: Extensions that are written by the ANGLE library authors.
  • OES_: Extensions that mirror functionality from OpenGL ES or OpenGL API extensions approved by the respective architecture review boards.
  • EXT_: Extensions that mirror other OpenGL ES or OpenGL API extensions.
  • WEBGL_: Extensions that are WebGL-specific and intended to be compatible with multiple web browsers. It should also be used for extensions which originated with the OpenGL ES or OpenGL APIs, but whose behavior has been significantly altered.

Querying available extensions

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.

Extension list

The current extensions are:

Enabling an extension

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.

Extension objects

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().

Browser compatibility

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_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 ? 34.0 (34.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_es3 ? 46.0 (46.0) [1] ? ? ?
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_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_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.

See also

文档标签和贡献者

 此页面的贡献者: charlie
 最后编辑者: charlie,