shaderSource method

Sets and replaces shader source code in a shader object.




WebGLRenderingContext.shaderSource(shader, source);


shader [in]

Type: WebGLShader

The shader object to set the source code on.

source [in]

Type: String

GLSL source code.

Return value

This method does not return a value.


WebGL errorDescription
gl.INVALID_VALUEIf shader isn't a WebGL object or value.
gl.INVALID_OPERATIONIf shader isn't a WebGLShader object.



The following example copies the shader source into a shader object using shaderSource. For more info on this example, see Get started with WebGL.

// Loads a shader from a script tag
// Parameters:
//   WebGL context
//   id of script element containing the shader to load
function getShader(gl, id) {
  var shaderScript = document.getElementById(id);

  // error - element with supplied id couldn't be retrieved
  if (!shaderScript) {
    return null;

  // If successful, build a string representing the shader source
  var str = "";
  var k = shaderScript.firstChild;
  while (k) {
    if (k.nodeType == 3) {
      str += k.textContent;
    k = k.nextSibling;

  var shader;

  // Create shaders based on the type we set
  //   note: these types are commonly used, but not required
  if (shaderScript.type == "x-shader/x-fragment") {
    shader = gl.createShader(gl.FRAGMENT_SHADER);
  } else if (shaderScript.type == "x-shader/x-vertex") {
    shader = gl.createShader(gl.VERTEX_SHADER);
  } else {
    return null;

  gl.shaderSource(shader, str);

  // Check the compile status, return an error if failed
  if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
    return null;

  return shader;

See also