WebGLShader
The WebGLShader is part of the WebGL API and can either be a vertex or a fragment shader. A WebGLProgram
requires both types of shaders.
Description
To create a WebGLShader use WebGLRenderingContext.createShader
, then hook up the GLSL source code using WebGLRenderingContext.shaderSource()
, and finally invoke WebGLRenderingContext.compileShader()
to finish and compile the shader. At this point the WebGLShader is still not in a usable form and must still be attached to a WebGLProgram
.
function createShader (gl, sourceCode, type) { // Compiles either a shader of type gl.VERTEX_SHADER or gl.FRAGMENT_SHADER var shader = gl.createShader( type ); gl.shaderSource( shader, sourceCode ); gl.compileShader( shader ); if ( !gl.getShaderParameter(shader, gl.COMPILE_STATUS) ) { var info = gl.getShaderInfoLog( shader ); throw 'Could not compile WebGL program. \n\n' + info; } return shader; }
See WebGLProgram
for information on attaching the shaders.
Examples
Creating a vertex shader
Note that there are many other strategies for writing and accessing shader source code strings. These example are for illustration purposes only.
var vertexShaderSource = 'attribute vec4 position;\n' + 'void main() {\n' + ' gl_Position = position;\n' + '}\n'; //Use the createShader function from the example above var vertexShader = createShader(gl, vertexShaderSource, gl.VERTEX_SHADER)
Creating a fragment shader
var fragmentShaderSource = 'void main() {\n' + ' gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n' + '}\n'; //Use the createShader function from the example above var fragmentShader = createShader(gl, fragmentShaderSource, gl.FRAGMENT_SHADER)
Specifications
Specification |
---|
WebGL Specification (WebGL) # 5.8 |
Browser compatibility
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
WebGLShader |
9 |
12 |
4 |
11 |
12 |
5.1 |
Yes |
25 |
Yes |
12 |
8 |
1.5 |
worker_support |
No |
No |
44 |
No |
No |
No |
No |
No |
No |
No |
No |
No |
See also
WebGLProgram
WebGLRenderingContext.attachShader()
WebGLRenderingContext.bindAttribLocation()
WebGLRenderingContext.compileShader()
WebGLRenderingContext.createProgram()
WebGLRenderingContext.createShader()
WebGLRenderingContext.deleteProgram()
WebGLRenderingContext.deleteShader()
WebGLRenderingContext.detachShader()
WebGLRenderingContext.getAttachedShaders()
WebGLRenderingContext.getProgramParameter()
WebGLRenderingContext.getProgramInfoLog()
WebGLRenderingContext.getShaderParameter()
WebGLRenderingContext.getShaderPrecisionFormat()
WebGLRenderingContext.getShaderInfoLog()
WebGLRenderingContext.getShaderSource()
WebGLRenderingContext.isProgram()
WebGLRenderingContext.isShader()
WebGLRenderingContext.linkProgram()
WebGLRenderingContext.shaderSource()
WebGLRenderingContext.useProgram()
WebGLRenderingContext.validateProgram()
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebGLShader