UNPKG

terriajs

Version:

Geospatial data visualization platform.

59 lines (50 loc) 1.68 kB
"use strict"; var defined = require("terriajs-cesium/Source/Core/defined").default; 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;