diff --git a/examples/bind-input.js b/examples/bind-input.js index 52deeb0c07..051045c1cd 100644 --- a/examples/bind-input.js +++ b/examples/bind-input.js @@ -1,13 +1,13 @@ +goog.require('ol.BrowserFeature'); goog.require('ol.Map'); goog.require('ol.RendererHints'); goog.require('ol.View2D'); goog.require('ol.dom.Input'); goog.require('ol.layer.Tile'); goog.require('ol.source.OSM'); -goog.require('ol.webgl'); -if (!ol.webgl.SUPPORTED) { +if (!ol.BrowserFeature.HAS_WEBGL) { var inputs = document.getElementsByClassName('webgl'); for (var i = 0, len = inputs.length; i < len; i++) { inputs[i].disabled = true; diff --git a/examples/brightness-contrast.js b/examples/brightness-contrast.js index d07824fcf6..47b9c66e8d 100644 --- a/examples/brightness-contrast.js +++ b/examples/brightness-contrast.js @@ -1,9 +1,9 @@ +goog.require('ol.BrowserFeature'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuestOpenAerial'); -goog.require('ol.webgl'); function setResetBrightnessButtonHTML() { @@ -15,7 +15,7 @@ function setResetContrastButtonHTML() { resetContrast.innerHTML = 'Contrast (' + layer.getContrast().toFixed(3) + ')'; } -if (!ol.webgl.SUPPORTED) { +if (!ol.BrowserFeature.HAS_WEBGL) { var info = document.getElementById('no-webgl'); /** * display error message diff --git a/examples/hue-saturation.js b/examples/hue-saturation.js index 8770a4ccb6..d80390bf70 100644 --- a/examples/hue-saturation.js +++ b/examples/hue-saturation.js @@ -1,10 +1,10 @@ +goog.require('ol.BrowserFeature'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); goog.require('ol.layer.Tile'); goog.require('ol.proj'); goog.require('ol.source.BingMaps'); -goog.require('ol.webgl'); function setResetHueButtonHTML() { @@ -16,7 +16,7 @@ function setResetSaturationButtonHTML() { layer.getSaturation().toFixed(2) + ')'; } -if (!ol.webgl.SUPPORTED) { +if (!ol.BrowserFeature.HAS_WEBGL) { var info = document.getElementById('no-webgl'); /** * display error message diff --git a/examples/side-by-side.js b/examples/side-by-side.js index afa8425cc7..304117071d 100644 --- a/examples/side-by-side.js +++ b/examples/side-by-side.js @@ -1,9 +1,9 @@ +goog.require('ol.BrowserFeature'); goog.require('ol.Map'); goog.require('ol.RendererHint'); goog.require('ol.View2D'); goog.require('ol.layer.Tile'); goog.require('ol.source.MapQuestOpenAerial'); -goog.require('ol.webgl'); var domMap = new ol.Map({ @@ -20,7 +20,7 @@ var domMap = new ol.Map({ }) }); -if (ol.webgl.SUPPORTED) { +if (!ol.BrowserFeature.HAS_WEBGL) { var webglMap = new ol.Map({ renderer: ol.RendererHint.WEBGL, target: 'webglMap' diff --git a/src/ol/browserfeature.exports b/src/ol/browserfeature.exports index 45cb41ac8a..46f7db1350 100644 --- a/src/ol/browserfeature.exports +++ b/src/ol/browserfeature.exports @@ -1,3 +1,4 @@ @exportSymbol ol.BrowserFeature @exportProperty ol.BrowserFeature.DEVICE_PIXEL_RATIO @exportProperty ol.BrowserFeature.HAS_TOUCH +@exportProperty ol.BrowserFeature.HAS_WEBGL diff --git a/src/ol/browserfeature.js b/src/ol/browserfeature.js index 585713bd52..7b5d3c2fe7 100644 --- a/src/ol/browserfeature.js +++ b/src/ol/browserfeature.js @@ -1,5 +1,9 @@ goog.provide('ol.BrowserFeature'); +goog.require('goog.dom'); +goog.require('goog.dom.TagName'); +goog.require('ol.webgl'); + /** * @define {boolean} Assume touch. @@ -27,3 +31,29 @@ ol.BrowserFeature.HAS_TOUCH = ol.ASSUME_TOUCH || (goog.global.document && 'ontouchstart' in goog.global.document.documentElement) || !!(goog.global.navigator.msPointerEnabled); + + +/** + * True if browser supports WebGL. + * @const + * @type {boolean} + * @todo stability experimental + */ +ol.BrowserFeature.HAS_WEBGL = ( + /** + * @return {boolean} WebGL supported. + */ + function() { + if (!('WebGLRenderingContext' in goog.global)) { + return false; + } + try { + var canvas = /** @type {HTMLCanvasElement} */ + (goog.dom.createElement(goog.dom.TagName.CANVAS)); + return !goog.isNull(ol.webgl.getContext(canvas, { + failIfMajorPerformanceCaveat: true + })); + } catch (e) { + return false; + } + })(); diff --git a/src/ol/renderer/webgl/webglrenderer.js b/src/ol/renderer/webgl/webglrenderer.js index eb1871d9a6..ea6e24ade6 100644 --- a/src/ol/renderer/webgl/webglrenderer.js +++ b/src/ol/renderer/webgl/webglrenderer.js @@ -1,6 +1,6 @@ goog.provide('ol.renderer.webgl'); -goog.require('ol.webgl'); +goog.require('ol.BrowserFeature'); /** @@ -8,4 +8,4 @@ goog.require('ol.webgl'); * @const * @type {boolean} */ -ol.renderer.webgl.SUPPORTED = ol.webgl.SUPPORTED; +ol.renderer.webgl.SUPPORTED = ol.BrowserFeature.HAS_WEBGL; diff --git a/src/ol/webgl/webgl.exports b/src/ol/webgl/webgl.exports deleted file mode 100644 index 582ed7670e..0000000000 --- a/src/ol/webgl/webgl.exports +++ /dev/null @@ -1 +0,0 @@ -@exportSymbol ol.webgl.SUPPORTED ol.webgl.SUPPORTED diff --git a/src/ol/webgl/webgl.js b/src/ol/webgl/webgl.js index 8720d354d6..6b39a1edc7 100644 --- a/src/ol/webgl/webgl.js +++ b/src/ol/webgl/webgl.js @@ -1,9 +1,6 @@ goog.provide('ol.webgl'); goog.provide('ol.webgl.WebGLContextEventType'); -goog.require('goog.dom'); -goog.require('goog.dom.TagName'); - /** * @const @@ -45,28 +42,3 @@ ol.webgl.getContext = function(canvas, opt_attributes) { } return null; }; - - -/** - * Is supported. - * @const - * @type {boolean} - */ -ol.webgl.SUPPORTED = ( - /** - * @return {boolean} WebGL supported. - */ - function() { - if (!('WebGLRenderingContext' in goog.global)) { - return false; - } - try { - var canvas = /** @type {HTMLCanvasElement} */ - (goog.dom.createElement(goog.dom.TagName.CANVAS)); - return !goog.isNull(ol.webgl.getContext(canvas, { - failIfMajorPerformanceCaveat: true - })); - } catch (e) { - return false; - } - })();