Source: Core/supportsWebGL.js

'use strict';

/*global require*/
var defined = require('terriajs-cesium/Source/Core/defined');

var result;

/**
 * Determines if the current browser supports WebGL.
 * @return {Boolean|String} False if WebGL is not supported at all, 'slow' if WebGL is supported
 *                          but it has a major performance caveat (e.g. software rendering), and True
 *                          if WebGL is available without a major performance caveat.
 */
function supportsWebGL() {
    if (defined(result)) {
        return result;
    }

    //Check for webgl support and if not, then fall back to leaflet
    if (!window.WebGLRenderingContext) {
        // Browser has no idea what WebGL is. Suggest they
        // get a new browser by presenting the user with link to
        // http://get.webgl.org
        result = false;
        return result;
    }
    var canvas = document.createElement( 'canvas' );

    var webglOptions = {
        alpha : false,
        stencil : false,
        failIfMajorPerformanceCaveat : true
    };

    var gl = canvas.getContext("webgl", webglOptions) || canvas.getContext("experimental-webgl", webglOptions);
    if (!gl) {
        // We couldn't get a WebGL context without a major performance caveat.  Let's see if we can get one at all.
        webglOptions.failIfMajorPerformanceCaveat = false;
        gl = canvas.getContext("webgl", webglOptions) || canvas.getContext("experimental-webgl", webglOptions);
        if (!gl) {
            // No WebGL at all.
            result = false;
        } else {
            // We can do WebGL, but only with software rendering (or similar).
            result = 'slow';
        }
    } else {
        // WebGL is good to go!
        result = true;
    }

    return result;
}

module.exports = supportsWebGL;