docs.rodeo

MDN Web Docs mirror

Using WebGL extensions

{{DefaultAPISidebar("WebGL")}} 

WebGL, like its sister APIs (OpenGL and OpenGL ES), supports extensions. A complete list of extensions is available in the 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 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:

const 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 thus most browser implement experimental extensions behind a feature flag rather than vendor prefix.

The feature flags are:

Naming conventions

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

Querying available extensions

The WebGL context supports querying what extensions are available.

const available_extensions = gl.getSupportedExtensions();

The {{domxref("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 {{domxref("WebGLRenderingContext.getExtension()")}} . For example:

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

See also

In this article

View on MDN