// This code is based on webgl-utils.js authored by Gregg Tavares, license below:
/*
 * Copyright (c) 2011, Gregg Tavares
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 * * Redistributions of source code must retain the above copyright notice,
 *   this list of conditions and the following disclaimer.
 *
 * * Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 *
 *  * Neither the name of greggman.com nor the names of its contributors
 *   may be used to endorse or promote products derived from this software
 *   without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
(function(){
var LOGGING_ENABLED = true;
/**
 * Wrapped logging function.
 * @param {string} msg The message to log.
 */
const log = function (msg) {
  if (!LOGGING_ENABLED) { return; }
  if (window.console && window.console.log) {
    window.console.log(msg);
  }
};
/**
 * Wrapped logging function.
 * @param {string} msg The message to log.
 */
const error = function (msg) {
  if (!LOGGING_ENABLED) { return; }
  if (window.console) {
    if (window.console.error) {
      window.console.error(msg);
    } else if (window.console.log) {
      window.console.log(msg);
    }
  }
  throw msg;
};
/**
 * Turn off all logging.
 */
const loggingOff = function () {
  LOGGING_ENABLED = false;
};
/**
 * Check if the page is embedded.
 * @return {boolean} True of we are in an iframe
 */
const isInIFrame = function () {
  return window !== window.top;
};
/**
 * Converts a WebGL enum to a string
 * @param {!WebGLContext} gl The WebGLContext to use.
 * @param {number} value The enum value.
 * @return {string} The enum as a string.
 */
const glEnumToString = function (gl, value) {
  for (var p in gl) {
    if (gl[p] === value) {
      return p;
    }
  }
  return '0x' + value.toString(16);
};
/**
 * Creates the HTLM for a failure message
 * @param {string} canvasContainerId id of container of th
 *        canvas.
 * @return {string} The html.
 */
const makeFailHTML = function (msg) {
  return '' +
    '
';
};
/**
 * Mesasge for getting a webgl browser
 * @type {string}
 */
// const GET_A_WEBGL_BROWSER = '' +
//   'This page requires a browser that supports WebGL.
' +
//   'Click here to upgrade your browser.';
/**
 * Mesasge for need better hardware
 * @type {string}
 */
// const OTHER_PROBLEM = '' +
//   "It doesn't appear your computer can support WebGL.
" +
//   'Click here for more information.';
/**
 * Creates a webgl context. If creation fails it will
 * change the contents of the container of the