From e88ecae897dbe766a68d89fe8e98d30cba449daf Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Tue, 11 Dec 2018 13:48:46 -0500 Subject: [PATCH] fix #7671 by avoiding incomplete webp support in Edge 18 --- src/util/browser.js | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/util/browser.js b/src/util/browser.js index 2ea3570a851..4d7ae90b2c8 100755 --- a/src/util/browser.js +++ b/src/util/browser.js @@ -58,9 +58,31 @@ const exported = { export default exported; if (window.document) { + testWebp(); +} + +function testWebp() { const webpImgTest = window.document.createElement('img'); webpImgTest.onload = function() { - exported.supportsWebp = true; + + // Edge 18 supports WebP but not uploading a WebP image to a gl texture + // Test support for this before allowing WebP images. + // https://github.com/mapbox/mapbox-gl-js/issues/7671 + const canvas = window.document.createElement('canvas'); + const gl = canvas.getContext('webgl') || canvas.getContext('experimental-webgl'); + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + + try { + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, webpImgTest); + exported.supportsWebp = true; + } catch (e) { + // Catch "Unspecified Error." in Edge 18. + } + + gl.deleteTexture(texture); + const extension = gl.getExtension('WEBGL_lose_context'); + if (extension) extension.loseContext(); }; webpImgTest.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA='; }