coderef

WebGL2Baseline · Widely available

The WebGL2RenderingContext API is the "webgl2" rendering context for the <canvas> element. It represents a space for drawing two- and three-dimensional graphics and animations. It corresponds to OpenGL ES 3.0.

Supported in all major browsers for at least 30 months — safe to use without fallbacks. Baseline since Sep 20, 2021. Widely available since Mar 20, 2024.

Browser support

DesktopChrome
1–55Not supported
56+Supportedsince Jan 25, 2017
Current: 155
Edge
12–18Not supported
79+Supportedsince Jan 15, 2020
Current: 154
Firefox
1–50Not supported
51+Supportedsince Jan 24, 2017
Current: 157
Safari
1–14.1Not supported
15+Supportedsince Sep 20, 2021
Current: 27
MobileChrome Android
18–57Not supported
58+Supportedsince Apr 25, 2017
Current: 155
Firefox Android
4–50Not supported
51+Supportedsince Jan 24, 2017
Current: 157
Safari iOS
1–14.5Not supported
15+Supportedsince Sep 20, 2021
Current: 27

How to use

This feature is Baseline widely available — use it freely, no fallback needed.

Example

Full syntax and examples are on MDN: WebGL2RenderingContext.

Feature detection

JS · check before using
if ("WebGL2RenderingContext" in globalThis) {
  // WebGL2RenderingContext is available
} else {
  // load a polyfill or use a fallback
}

Sub-features

Support for each part of the feature (239). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
HTMLCanvasElement.getContext.webgl2_context56795115565115
HTMLCanvasElement.getContext.webgl2_context.options_alpha_parameter56795115565115
HTMLCanvasElement.getContext.webgl2_context.options_failIfMajorPerformanceCaveat_parameter56795115565115
HTMLCanvasElement.getContext.webgl2_context.options_powerPreference_parameter✕✕✕15✕✕15
WebGL2RenderingContext56795115585115
WebGL2RenderingContext.activeTexture56795115585115
WebGL2RenderingContext.attachShader56795115585115
WebGL2RenderingContext.beginQuery56795115585115
WebGL2RenderingContext.beginTransformFeedback56795115585115
WebGL2RenderingContext.bindAttribLocation56795115585115
WebGL2RenderingContext.bindBuffer56795115585115
WebGL2RenderingContext.bindBufferBase56795115585115
WebGL2RenderingContext.bindBufferRange56795115585115
WebGL2RenderingContext.bindFramebuffer56795115585115
WebGL2RenderingContext.bindRenderbuffer56795115585115
WebGL2RenderingContext.bindSampler56795115585115
WebGL2RenderingContext.bindTexture56795115585115
WebGL2RenderingContext.bindTransformFeedback56795115585115
WebGL2RenderingContext.bindVertexArray56795115585115
WebGL2RenderingContext.blendColor56795115585115
Show 219 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
WebGL2RenderingContext.blendEquation56795115585115
WebGL2RenderingContext.blendEquationSeparate56795115585115
WebGL2RenderingContext.blendFunc56795115585115
WebGL2RenderingContext.blendFuncSeparate56795115585115
WebGL2RenderingContext.blitFramebuffer56795115585115
WebGL2RenderingContext.bufferData56795115585115
WebGL2RenderingContext.bufferSubData56795115585115
WebGL2RenderingContext.canvas56795115585115
WebGL2RenderingContext.checkFramebufferStatus56795115585115
WebGL2RenderingContext.clear56795115585115
WebGL2RenderingContext.clearBufferfi56795115585115
WebGL2RenderingContext.clearBufferfv56795115585115
WebGL2RenderingContext.clearBufferiv56795115585115
WebGL2RenderingContext.clearBufferuiv56795115585115
WebGL2RenderingContext.clearColor56795115585115
WebGL2RenderingContext.clearDepth56795115585115
WebGL2RenderingContext.clearStencil56795115585115
WebGL2RenderingContext.clientWaitSync56795115585115
WebGL2RenderingContext.colorMask56795115585115
WebGL2RenderingContext.compileShader56795115585115
WebGL2RenderingContext.compressedTexImage2D56795115585115
WebGL2RenderingContext.compressedTexImage3D56795115585115
WebGL2RenderingContext.compressedTexSubImage2D56795115585115
WebGL2RenderingContext.compressedTexSubImage3D56795115585115
WebGL2RenderingContext.copyBufferSubData56795115585115
WebGL2RenderingContext.copyTexImage2D56795115585115
WebGL2RenderingContext.copyTexSubImage2D56795115585115
WebGL2RenderingContext.copyTexSubImage3D56795115585115
WebGL2RenderingContext.createBuffer56795115585115
WebGL2RenderingContext.createFramebuffer56795115585115
WebGL2RenderingContext.createProgram56795115585115
WebGL2RenderingContext.createQuery56795115585115
WebGL2RenderingContext.createRenderbuffer56795115585115
WebGL2RenderingContext.createSampler56795115585115
WebGL2RenderingContext.createShader56795115585115
WebGL2RenderingContext.createTexture56795115585115
WebGL2RenderingContext.createTransformFeedback56795115585115
WebGL2RenderingContext.createVertexArray56795115585115
WebGL2RenderingContext.cullFace56795115585115
WebGL2RenderingContext.deleteBuffer56795115585115
WebGL2RenderingContext.deleteFramebuffer56795115585115
WebGL2RenderingContext.deleteProgram56795115585115
WebGL2RenderingContext.deleteQuery56795115585115
WebGL2RenderingContext.deleteRenderbuffer56795115585115
WebGL2RenderingContext.deleteSampler56795115585115
WebGL2RenderingContext.deleteShader56795115585115
WebGL2RenderingContext.deleteSync56795115585115
WebGL2RenderingContext.deleteTexture56795115585115
WebGL2RenderingContext.deleteTransformFeedback56795115585115
WebGL2RenderingContext.deleteVertexArray56795115585115
WebGL2RenderingContext.depthFunc56795115585115
WebGL2RenderingContext.depthMask56795115585115
WebGL2RenderingContext.depthRange56795115585115
WebGL2RenderingContext.detachShader56795115585115
WebGL2RenderingContext.disable56795115585115
WebGL2RenderingContext.disableVertexAttribArray56795115585115
WebGL2RenderingContext.drawArrays56795115585115
WebGL2RenderingContext.drawArraysInstanced56795115585115
WebGL2RenderingContext.drawBuffers56795115585115
WebGL2RenderingContext.drawElements56795115585115
WebGL2RenderingContext.drawElementsInstanced56795115585115
WebGL2RenderingContext.drawRangeElements56795115585115
WebGL2RenderingContext.drawingBufferFormat122122✕✕122✕✕
WebGL2RenderingContext.drawingBufferHeight56795115585115
WebGL2RenderingContext.drawingBufferStorage122122✕✕122✕✕
WebGL2RenderingContext.drawingBufferWidth56795115585115
WebGL2RenderingContext.enable56795115585115
WebGL2RenderingContext.enableVertexAttribArray56795115585115
WebGL2RenderingContext.endQuery56795115585115
WebGL2RenderingContext.endTransformFeedback56795115585115
WebGL2RenderingContext.fenceSync56795115585115
WebGL2RenderingContext.finish56795115585115
WebGL2RenderingContext.flush56795115585115
WebGL2RenderingContext.framebufferRenderbuffer56795115585115
WebGL2RenderingContext.framebufferTexture2D56795115585115
WebGL2RenderingContext.framebufferTextureLayer56795115585115
WebGL2RenderingContext.frontFace56795115585115
WebGL2RenderingContext.generateMipmap56795115585115
WebGL2RenderingContext.getActiveAttrib56795115585115
WebGL2RenderingContext.getActiveUniform56795115585115
WebGL2RenderingContext.getActiveUniformBlockName56795115585115
WebGL2RenderingContext.getActiveUniformBlockParameter56795115585115
WebGL2RenderingContext.getActiveUniforms56795115585115
WebGL2RenderingContext.getAttachedShaders56795115585115
WebGL2RenderingContext.getAttribLocation56795115585115
WebGL2RenderingContext.getBufferParameter56795115585115
WebGL2RenderingContext.getBufferSubData56795115585115
WebGL2RenderingContext.getContextAttributes56795115585115
WebGL2RenderingContext.getError56795115585115
WebGL2RenderingContext.getExtension56795115585115
WebGL2RenderingContext.getFragDataLocation56795115585115
WebGL2RenderingContext.getFramebufferAttachmentParameter56795115585115
WebGL2RenderingContext.getIndexedParameter56795115585115
WebGL2RenderingContext.getInternalformatParameter56795115585115
WebGL2RenderingContext.getParameter56795115585115
WebGL2RenderingContext.getProgramInfoLog56795115585115
WebGL2RenderingContext.getProgramParameter56795115585115
WebGL2RenderingContext.getQuery56795115585115
WebGL2RenderingContext.getQueryParameter56795115585115
WebGL2RenderingContext.getRenderbufferParameter56795115585115
WebGL2RenderingContext.getSamplerParameter56795115585115
WebGL2RenderingContext.getShaderInfoLog56795115585115
WebGL2RenderingContext.getShaderParameter56795115585115
WebGL2RenderingContext.getShaderPrecisionFormat56795115585115
WebGL2RenderingContext.getShaderSource56795115585115
WebGL2RenderingContext.getSupportedExtensions56795115585115
WebGL2RenderingContext.getSyncParameter56795115585115
WebGL2RenderingContext.getTexParameter56795115585115
WebGL2RenderingContext.getTransformFeedbackVarying56795115585115
WebGL2RenderingContext.getUniform56795115585115
WebGL2RenderingContext.getUniformBlockIndex56795115585115
WebGL2RenderingContext.getUniformIndices56795115585115
WebGL2RenderingContext.getUniformLocation56795115585115
WebGL2RenderingContext.getVertexAttrib56795115585115
WebGL2RenderingContext.getVertexAttribOffset56795115585115
WebGL2RenderingContext.hint56795115585115
WebGL2RenderingContext.invalidateFramebuffer56795115585115
WebGL2RenderingContext.invalidateSubFramebuffer56795115585115
WebGL2RenderingContext.isBuffer56795115585115
WebGL2RenderingContext.isContextLost56795115585115
WebGL2RenderingContext.isEnabled56795115585115
WebGL2RenderingContext.isFramebuffer56795115585115
WebGL2RenderingContext.isProgram56795115585115
WebGL2RenderingContext.isQuery56795115585115
WebGL2RenderingContext.isRenderbuffer56795115585115
WebGL2RenderingContext.isSampler56795115585115
WebGL2RenderingContext.isShader56795115585115
WebGL2RenderingContext.isSync56795115585115
WebGL2RenderingContext.isTexture56795115585115
WebGL2RenderingContext.isTransformFeedback56795115585115
WebGL2RenderingContext.isVertexArray56795115585115
WebGL2RenderingContext.lineWidth56795115585115
WebGL2RenderingContext.linkProgram56795115585115
WebGL2RenderingContext.pauseTransformFeedback56795115585115
WebGL2RenderingContext.pixelStorei56795115585115
WebGL2RenderingContext.polygonOffset56795115585115
WebGL2RenderingContext.readBuffer56795115585115
WebGL2RenderingContext.readPixels56795115585115
WebGL2RenderingContext.renderbufferStorage56795115585115
WebGL2RenderingContext.renderbufferStorageMultisample56795115585115
WebGL2RenderingContext.resumeTransformFeedback56795115585115
WebGL2RenderingContext.sampleCoverage56795115585115
WebGL2RenderingContext.samplerParameterf56795115585115
WebGL2RenderingContext.samplerParameteri56795115585115
WebGL2RenderingContext.scissor56795115585115
WebGL2RenderingContext.shaderSource56795115585115
WebGL2RenderingContext.stencilFunc56795115585115
WebGL2RenderingContext.stencilFuncSeparate56795115585115
WebGL2RenderingContext.stencilMask56795115585115
WebGL2RenderingContext.stencilMaskSeparate56795115585115
WebGL2RenderingContext.stencilOp56795115585115
WebGL2RenderingContext.stencilOpSeparate56795115585115
WebGL2RenderingContext.texImage2D5679511558✕15
WebGL2RenderingContext.texImage3D56795115585115
WebGL2RenderingContext.texParameterf56795115585115
WebGL2RenderingContext.texParameteri56795115585115
WebGL2RenderingContext.texStorage2D56795115585115
WebGL2RenderingContext.texStorage3D56795115585115
WebGL2RenderingContext.texSubImage2D5679511558✕15
WebGL2RenderingContext.texSubImage3D56795115585115
WebGL2RenderingContext.transformFeedbackVaryings56795115585115
WebGL2RenderingContext.uniform1f56795115585115
WebGL2RenderingContext.uniform1fv56795115585115
WebGL2RenderingContext.uniform1i56795115585115
WebGL2RenderingContext.uniform1iv56795115585115
WebGL2RenderingContext.uniform1ui56795115585115
WebGL2RenderingContext.uniform1uiv56795115585115
WebGL2RenderingContext.uniform2f56795115585115
WebGL2RenderingContext.uniform2fv56795115585115
WebGL2RenderingContext.uniform2i56795115585115
WebGL2RenderingContext.uniform2iv56795115585115
WebGL2RenderingContext.uniform2ui56795115585115
WebGL2RenderingContext.uniform2uiv56795115585115
WebGL2RenderingContext.uniform3f56795115585115
WebGL2RenderingContext.uniform3fv56795115585115
WebGL2RenderingContext.uniform3i56795115585115
WebGL2RenderingContext.uniform3iv56795115585115
WebGL2RenderingContext.uniform3ui56795115585115
WebGL2RenderingContext.uniform3uiv56795115585115
WebGL2RenderingContext.uniform4f56795115585115
WebGL2RenderingContext.uniform4fv56795115585115
WebGL2RenderingContext.uniform4i56795115585115
WebGL2RenderingContext.uniform4iv56795115585115
WebGL2RenderingContext.uniform4ui56795115585115
WebGL2RenderingContext.uniform4uiv56795115585115
WebGL2RenderingContext.uniformBlockBinding56795115585115
WebGL2RenderingContext.uniformMatrix2fv56795115585115
WebGL2RenderingContext.uniformMatrix2x3fv56795115585115
WebGL2RenderingContext.uniformMatrix2x4fv56795115585115
WebGL2RenderingContext.uniformMatrix3fv56795115585115
WebGL2RenderingContext.uniformMatrix3x2fv56795115585115
WebGL2RenderingContext.uniformMatrix3x4fv56795115585115
WebGL2RenderingContext.uniformMatrix4fv56795115585115
WebGL2RenderingContext.uniformMatrix4x2fv56795115585115
WebGL2RenderingContext.uniformMatrix4x3fv56795115585115
WebGL2RenderingContext.useProgram56795115585115
WebGL2RenderingContext.validateProgram56795115585115
WebGL2RenderingContext.vertexAttrib1f56795115585115
WebGL2RenderingContext.vertexAttrib1fv56795115585115
WebGL2RenderingContext.vertexAttrib2f56795115585115
WebGL2RenderingContext.vertexAttrib2fv56795115585115
WebGL2RenderingContext.vertexAttrib3f56795115585115
WebGL2RenderingContext.vertexAttrib3fv56795115585115
WebGL2RenderingContext.vertexAttrib4f56795115585115
WebGL2RenderingContext.vertexAttrib4fv56795115585115
WebGL2RenderingContext.vertexAttribDivisor56795115585115
WebGL2RenderingContext.vertexAttribI4i56795115585115
WebGL2RenderingContext.vertexAttribI4iv56795115585115
WebGL2RenderingContext.vertexAttribI4ui56795115585115
WebGL2RenderingContext.vertexAttribI4uiv56795115585115
WebGL2RenderingContext.vertexAttribIPointer56795115585115
WebGL2RenderingContext.vertexAttribPointer56795115585115
WebGL2RenderingContext.viewport56795115585115
WebGL2RenderingContext.waitSync56795115585115
WebGLQuery56795115585115
WebGLSampler56795115585115
WebGLSync56795115585115
WebGLTransformFeedback56795115585115
WebGLVertexArrayObject56795115585115