tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

webgl-util.js (1599B)


      1 WebGLUtil = (function() {
      2  // ---------------------------------------------------------------------------
      3  // WebGL helpers
      4 
      5  // Returns a valid shader, or null on errors.
      6  function createShaderById(gl, id) {
      7    var elem = document.getElementById(id);
      8    if (!elem) {
      9      throw new Error(
     10        "Failed to create shader from non-existent id '" + id + "'."
     11      );
     12    }
     13 
     14    var src = elem.innerHTML.trim();
     15 
     16    var shader;
     17    if (elem.type == "x-shader/x-fragment") {
     18      shader = gl.createShader(gl.FRAGMENT_SHADER);
     19    } else if (elem.type == "x-shader/x-vertex") {
     20      shader = gl.createShader(gl.VERTEX_SHADER);
     21    } else {
     22      throw new Error(
     23        "Bad MIME type for shader '" + id + "': " + elem.type + "."
     24      );
     25    }
     26 
     27    gl.shaderSource(shader, src);
     28    gl.compileShader(shader);
     29 
     30    return shader;
     31  }
     32 
     33  function createProgramByIds(gl, vsId, fsId) {
     34    var vs = createShaderById(gl, vsId);
     35    var fs = createShaderById(gl, fsId);
     36    if (!vs || !fs) {
     37      return null;
     38    }
     39 
     40    var prog = gl.createProgram();
     41    gl.attachShader(prog, vs);
     42    gl.attachShader(prog, fs);
     43    gl.linkProgram(prog);
     44 
     45    if (!gl.getProgramParameter(prog, gl.LINK_STATUS)) {
     46      var str = "Shader program linking failed:";
     47      str += "\nShader program info log:\n" + gl.getProgramInfoLog(prog);
     48      str += "\n\nVert shader log:\n" + gl.getShaderInfoLog(vs);
     49      str += "\n\nFrag shader log:\n" + gl.getShaderInfoLog(fs);
     50      console.error(str);
     51      return null;
     52    }
     53 
     54    return prog;
     55  }
     56 
     57  return {
     58    createShaderById,
     59    createProgramByIds,
     60  };
     61 })();