WebGL Browser Report

WebGL is a JavaScript API for rendering interactive 3D graphics within any compatible web browser without the use of plug-ins. WebGL apps consist of control code written in JavaScript and special effects code that is executed on a computer's GPU. WebGL elements can be mixed with other HTML elements and composited with other parts of the page or page background.

The following table shows how your browser supports WebGL, as well as the dump of a static WebGL parameters more or less related to graphics card capabilities and web browser identity.

For information on how to enable or disable WebGL (and WebGL 2.0) in a major web browsers, see below on this page.

WebGL Support Detection

Does Your Browser Supports WebGL?
Is WebGL Enabled in Your Browser?
What about WebGL 2.0 Support?
Browser User-Agent:

WebGL Context Info

Supported Context Name(s)[webgl2, experimental-webgl2, webgl, experimental-webgl, moz-webgl]
GL VersionVERSION
Shading Language VersionSHADING_LANGUAGE_VERSION
VendorVENDOR
RendererRENDERER

Debug Renderer Info

Unmasked VendorUNMASKED_VENDOR_WEBGL
Unmasked RendererUNMASKED_RENDERER_WEBGL

Vertex Shader

Max Vertex AttributesMAX_VERTEX_ATTRIBS
Max Vertex Uniform VectorsMAX_VERTEX_UNIFORM_VECTORS
Max Vertex Texture Image UnitsMAX_VERTEX_TEXTURE_IMAGE_UNITS
Max Varying VectorsMAX_VARYING_VECTORS
Best Float PrecisiongetShaderPrecisionFormat(VERTEX_SHADER)
Max Vertex Uniform Components:MAX_VERTEX_UNIFORM_COMPONENTS
Max Vertex Uniform Blocks:MAX_VERTEX_UNIFORM_BLOCKS
Max Vertex Output Components:MAX_VERTEX_OUTPUT_COMPONENTS
Max Varying Components:MAX_VARYING_COMPONENTS

Transform Feedback

Max Interleaved Components:MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS
Max Separate Attribs:MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS
Max Separate Components:MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS

Rasterizer

Aliased Line Width RangeALIASED_LINE_WIDTH_RANGE
Aliased Point Size RangeALIASED_POINT_SIZE_RANGE

Fragment Shader

Max Fragment Uniform VectorsMAX_FRAGMENT_UNIFORM_VECTORS
Max Texture Image UnitsMAX_TEXTURE_IMAGE_UNITS
Float/Int Precision:getShaderPrecisionFormat(FRAGMENT_SHADER, HIGH_FLOAT/HIGH_INT)
Best Float PrecisiongetShaderPrecisionFormat(FRAGMENT_SHADER)
Max Fragment Uniform Components:MAX_FRAGMENT_UNIFORM_COMPONENTS
Max Fragment Uniform Blocks:MAX_FRAGMENT_UNIFORM_BLOCKS
Max Fragment Input Components:MAX_FRAGMENT_INPUT_COMPONENTS
Min Program Texel Offset:MIN_PROGRAM_TEXEL_OFFSET
Max Program Texel Offset:MAX_PROGRAM_TEXEL_OFFSET

Framebuffer

Max Draw Buffers:MAX_DRAW_BUFFERS
Max Color Attachments:MAX_COLOR_ATTACHMENTS
Max Samples:MAX_SAMPLES
Max Color Buffers:MAX_DRAW_BUFFERS_WEBGL
RGBA Bits[RED_BITS, GREEN_BITS, BLUE_BITS, ALPHA_BITS]
Depth / Stencil Bits:[DEPTH_BITS, STENCIL_BITS]
Max Render Buffer SizeMAX_RENDERBUFFER_SIZE
Max Viewport DimensionsMAX_VIEWPORT_DIMS

Textures

Max Texture SizeMAX_TEXTURE_SIZE
Max Cube Map Texture SizeMAX_CUBE_MAP_TEXTURE_SIZE
Max Combined Texture Image UnitsMAX_COMBINED_TEXTURE_IMAGE_UNITS
Max AnisotropyMAX_TEXTURE_MAX_ANISOTROPY_EXT
Max 3D Texture Size:MAX_3D_TEXTURE_SIZE
Max Array Texture Layers:MAX_ARRAY_TEXTURE_LAYERS
Max Texture LOD Bias:MAX_TEXTURE_LOD_BIAS

Uniform Buffers

Max Uniform Buffer Bindings:MAX_UNIFORM_BUFFER_BINDINGS
Max Uniform Block Size:MAX_UNIFORM_BLOCK_SIZE
Uniform Buffer Offset Alignment:UNIFORM_BUFFER_OFFSET_ALIGNMENT
Max Combined Uniform Blocks:MAX_COMBINED_UNIFORM_BLOCKS
Max Combined Vertex Uniform
Components:
MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS
Max Combined Fragment Uniform
Components:
MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS
Miscellaneous :
AntialiasinggetContextAttributes().antialias
ANGLEAlmost Native Graphics Layer Engine
Major Performance CaveatfailIfMajorPerformanceCaveat
Supported WebGL Extensions[OES_texture_float; OES_texture_half_float; WEBGL_lose_context; OES_standard_derivatives; OES_vertex_array_object; WEBGL_debug_renderer_info; WEBGL_debug_shaders; WEBGL_compressed_texture_s3tc; WEBGL_depth_texture; OES_element_index_uint; EXT_texture_filter_anisotropic; EXT_frag_depth; WEBGL_draw_buffers; ANGLE_instanced_arrays; OES_texture_float_linear; OES_texture_half_float_linear; EXT_blend_minmax; EXT_shader_texture_lod; WEBGL_compressed_texture_atc; WEBGL_compressed_texture_pvrtc; EXT_color_buffer_half_float; WEBGL_color_buffer_float; EXT_sRGB; WEBGL_compressed_texture_etc1; EXT_color_buffer_float; WEBGL_shared_resources; WEBGL_security_sensitive_resources; EXT_disjoint_timer_query; OES_fbo_render_mipmap; WEBGL_compressed_texture_es3; EXT_float_blend; WEBGL_compressed_texture_astc_ldr; WEBGL_dynamic_texture; WEBGL_subscribe_uniform; OES_depth24; WEBGL_debug_shader_precision; WEBGL_draw_elements_no_range_check; WEBGL_texture_from_depth_video; EXT_draw_buffers]

How to Enable or Disable WebGL in Your Web Browser

WebGL in Firefox

WebGL in Mozilla Firefox is supported and enabled by default since the Firefox 4 and the Firefox for Android 19.

To enable or disable WebGL in Firefox, follow the simple steps:

  1. In the address bar, type about:config, without any http:// or www
  2. Click the button labeled «I'll be careful, I promise!»
  3. In Search field, enter webgl.disabled string
  4. Toggle webgl.disabled to true to disable WebGL, or to false to enable WebGL, please do not confuse

WebGL 2.0 :

To enable WebGL2 in Firefox, go to about:config and toggle this two preferences:

webgl.enable-prototype-webgl2 and webgl.disable-angle

The second preferences is temporarily required to run webgl2/experimental-webgl2 contexts on Firefox, and may produce a bad effect for WebGL 1.0 apps.

As well as first one, maybe, since this is experemental and not enabled by default.

WebGL in Chrome

WebGL in Google Chorme and Chromium is supported and enabled by default since the Chorme version 8.

To disable or enable WebGL in Google Chrome for Windows, Linux, Mac OS X, Chrome OS, follow the simple steps:

  1. In the address bar, type chrome://flags
  2. Use the CTRL + F shortcut to find the flags with the name WebGL, there will be two almost identical flag
  3. The flag named Disable WebGL applies to Mac, Windows, Linux, Chrome OS
  4. Switch it to Enable to disable WebGL, or to Disable to enable WebGL, please do not confuse
  5. Changes will take effect only the next time you launch Google Chrome. Click to appeared button Relaunch Now

You may also try to enable Override software rendering list flag to enable WebGL in some cases.

In addition, there are command-line switchers:

  1. --disable-webgl turn off the WebGL
  2. --disable-3d-apis turn off all client-visible 3D APIs, in particular the WebGL and the Pepper 3D

These instructions are valid for all Chromium-based web browsers, in the same way you can setup WebGL in Opera and Vivaldi.

WebGL 2.0 :

Experiemental WebGL2 support is available in recent Chrome Canary builds.

In order to enable it you must pass the --enable-unsafe-es3-apis flag on the command line.

WebGL in Safari

WebGL is available and enabled by default in the latest Apple Safari releases.

Safari — the only web browser that has the ability to Ask before executing WebGL scripts on a random websites. You can easily enable or disable WebGL globally or for a specific site, by going the menu PreferencesSecurityAllow WebGLWebsite Settings.

WebGL 2.0: so far no info about supporting WebGL2 in Safari.

! WebGL in Internet Explorer

WebGL enabled by default since IE 11, and there is no way to turn it off.

If you have solution please tell us!

WebGL 2.0: so far no info about supporting WebGL2 in Internet Explorer.

How to Detect WebGL using JavaScript and Get the Browser's Identifiers

This is a proper JavaScript function to detect WebGL support, with all kind of experimental WebGL context names and with checking of special cases, such as blocking WebGL functions by NoScript or TorBrowser.

  1. function webgl_detect()
  2. {
  3.     if (!!window.WebGLRenderingContext) {
  4.         var canvas = document.createElement("canvas"),
  5.              names = ["webgl", "experimental-webgl", "moz-webgl"],
  6.                 gl = false;
  7.         for(var i in names) {
  8.             try {
  9.                 gl = canvas.getContext(names[i]);
  10.                 if (gl && typeof gl.getParameter == "function") {
  11.                     /* WebGL is enabled */
  12.                     /* return true; */
  13.                     return names[i];
  14.                 }
  15.             } catch(e) {}
  16.         }
  17.         /* WebGL is supported, but disabled */
  18.         return false;
  19.     }
  20.     /* WebGL not supported*/
  21.     return false;
  22. }

The following WebGL demo script shows the gathering of a web browser identifiers through the WebGL, as in the tables above.

  1. (function()
  2. {
  3.     var context_name = webgl_detect();
  4.     if (context_name) {
  5.         var gl = document.createElement("canvas").getContext(context_name);
  6.         console.log("WebGL Version: " + gl.getParameter(gl.VERSION));
  7.         console.log("Shading Language Version: " + gl.getParameter(gl.SHADING_LANGUAGE_VERSION));
  8.         console.log("WebGL Vendor: " + gl.getParameter(gl.VENDOR));
  9.         console.log("WebGL Renderer: " + gl.getParameter(gl.RENDERER));
  10.         /* full list of exportable WebGL variables can be found here: */
  11.         /* https://www.khronos.org/registry/webgl/specs/1.0/#WEBGLRENDERINGCONTEXT */
  12.     } else {
  13.         console.log("WebGL is Not Available");
  14.     }
  15. })();

Further Reading

  1. WebGL Specification — Khronos Group
  2. WebGL Public Wiki — Khronos Group
  3. WebGL Security white paper — Khronos Group
  4. WebGLReport, that reports a browser's WebGL capabilities — Github