function createShaderFromScript(
        gl, scriptId, opt_shaderType, opt_errorCallback) {
      let shaderSource = '';
      let shaderType;
      const shaderScript = document.getElementById(scriptId);
      if (!shaderScript) {
        throw ('*** Error: unknown script element' + scriptId);
      }
      shaderSource = shaderScript.text;
  
      if (!opt_shaderType) {
        if (shaderScript.type === 'x-shader/x-vertex') {
          shaderType = gl.VERTEX_SHADER;
        } else if (shaderScript.type === 'x-shader/x-fragment') {
          shaderType = gl.FRAGMENT_SHADER;
        } else if (shaderType !== gl.VERTEX_SHADER && shaderType !== gl.FRAGMENT_SHADER) {
          throw ('*** Error: unknown shader type');
        }
      }
  
      return loadShader(
          gl, shaderSource, opt_shaderType ? opt_shaderType : shaderType,
          opt_errorCallback);
    }
Creates a program from 2 script tags.

@param {WebGLRenderingContext} gl The WebGLRenderingContext
       to use.
@param {string[]} shaderScriptIds Array of ids of the script
       tags for the shaders. The first is assumed to be the
       vertex shader, the second the fragment shader.
@param {string[]} [opt_attribs] An array of attribs names. Locations will be assigned by index if not passed in
@param {number[]} [opt_locations] The locations for the. A parallel array to opt_attribs letting you assign locations.
@param {module:webgl-utils.ErrorCallback} opt_errorCallback callback for errors. By default it just prints an error to the console
       on error. If you want something else pass an callback. It's passed an error message.
@return {WebGLProgram} The created program.
@memberOf module:webgl-utils