diff --git a/CHANGES.md b/CHANGES.md index c38c84ad7b88..073a600f972f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -21,6 +21,7 @@ Change Log * Fixed token issue in `ArcGisMapServerImageryProvider`. * `ImageryLayerFeatureInfo` now has an `imageryLayer` property, indicating the layer that contains the feature. * Added `BoxOutlineGeometry.fromAxisAlignedBoundingBox` and `BoxGeometry.fromAxisAlignedBoundingBox` functions. +* The WebGL setting of `failIfMajorPerformanceCaveat` now defaults to `false`, which is the official WebGL default. This improves compatibility with out-of-date drivers and remote desktop sessions. Cesium will run slower in these cases instead of simply failing to load. ### 1.14 - 2015-10-01 diff --git a/Source/Renderer/Context.js b/Source/Renderer/Context.js index ba352604e48f..b57191d0a02c 100644 --- a/Source/Renderer/Context.js +++ b/Source/Renderer/Context.js @@ -201,17 +201,6 @@ define([ // Override select WebGL defaults webglOptions.alpha = defaultValue(webglOptions.alpha, false); // WebGL default is true - webglOptions.failIfMajorPerformanceCaveat = defaultValue(webglOptions.failIfMajorPerformanceCaveat, true); // WebGL default is false - - // Firefox 35 with ANGLE has a regression that causes alpha : false to affect all framebuffers - // Since we can't detect for ANGLE without a context, we just detect for Windows. - // https://github.com/AnalyticalGraphicsInc/cesium/issues/2431 - if (FeatureDetection.isFirefox() && FeatureDetection.isWindows()) { - var firefoxVersion = FeatureDetection.firefoxVersion(); - if (firefoxVersion[0] === 35) { - webglOptions.alpha = true; - } - } var defaultToWebgl2 = false; var webgl2Supported = (typeof WebGL2RenderingContext !== 'undefined'); @@ -294,32 +283,32 @@ define([ var textureFilterAnisotropic = options.allowTextureFilterAnisotropic ? getExtension(gl, ['EXT_texture_filter_anisotropic', 'WEBKIT_EXT_texture_filter_anisotropic']) : undefined; this._textureFilterAnisotropic = !!textureFilterAnisotropic; ContextLimits._maximumTextureFilterAnisotropy = defined(textureFilterAnisotropic) ? gl.getParameter(textureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT) : 1.0; - + var glCreateVertexArray; var glBindVertexArray; var glDeleteVertexArray; - + var glDrawElementsInstanced; var glDrawArraysInstanced; var glVertexAttribDivisor; - + var glDrawBuffers; - + var vertexArrayObject; var instancedArrays; var drawBuffers; - + if (webgl2) { var that = this; - + glCreateVertexArray = function () { return that._gl.createVertexArray(); }; glBindVertexArray = function(vao) { that._gl.bindVertexArray(vao); }; glDeleteVertexArray = function(vao) { that._gl.deleteVertexArray(vao); }; - + glDrawElementsInstanced = function(mode, count, type, offset, instanceCount) { gl.drawElementsInstanced(mode, count, type, offset, instanceCount); }; glDrawArraysInstanced = function(mode, first, count, instanceCount) { gl.drawArraysInstanced(mode, first, count, instanceCount); }; glVertexAttribDivisor = function(index, divisor) { gl.vertexAttribDivisor(index, divisor); }; - + glDrawBuffers = function(buffers) { gl.drawBuffers(buffers); }; } else { vertexArrayObject = getExtension(gl, ['OES_vertex_array_object']); @@ -328,30 +317,30 @@ define([ glBindVertexArray = function(vertexArray) { vertexArrayObject.bindVertexArrayOES(vertexArray); }; glDeleteVertexArray = function(vertexArray) { vertexArrayObject.deleteVertexArrayOES(vertexArray); }; } - + instancedArrays = getExtension(gl, ['ANGLE_instanced_arrays']); if (defined(instancedArrays)) { glDrawElementsInstanced = function(mode, count, type, offset, instanceCount) { instancedArrays.drawElementsInstancedANGLE(mode, count, type, offset, instanceCount); }; glDrawArraysInstanced = function(mode, first, count, instanceCount) { instancedArrays.drawArraysInstancedANGLE(mode, first, count, instanceCount); }; glVertexAttribDivisor = function(index, divisor) { instancedArrays.vertexAttribDivisorANGLE(index, divisor); }; } - + drawBuffers = getExtension(gl, ['WEBGL_draw_buffers']); if (defined(drawBuffers)) { glDrawBuffers = function(buffers) { drawBuffers.drawBuffersWEBGL(buffers); }; } } - + this.glCreateVertexArray = glCreateVertexArray; this.glBindVertexArray = glBindVertexArray; this.glDeleteVertexArray = glDeleteVertexArray; - + this.glDrawElementsInstanced = glDrawElementsInstanced; this.glDrawArraysInstanced = glDrawArraysInstanced; this.glVertexAttribDivisor = glVertexAttribDivisor; - + this.glDrawBuffers = glDrawBuffers; - + this._vertexArrayObject = !!vertexArrayObject; this._instancedArrays = !!instancedArrays; this._drawBuffers = !!drawBuffers; diff --git a/Source/Scene/Scene.js b/Source/Scene/Scene.js index fa75312c038c..f5aeffa2d518 100644 --- a/Source/Scene/Scene.js +++ b/Source/Scene/Scene.js @@ -136,7 +136,7 @@ define([ * antialias : true, * premultipliedAlpha : true, * preserveDrawingBuffer : false, - * failIfMajorPerformanceCaveat : true + * failIfMajorPerformanceCaveat : false * }, * allowTextureFilterAnisotropic : true * } @@ -152,11 +152,6 @@ define([ * webgl.alpha to true. *

*

- * webgl.failIfMajorPerformanceCaveat defaults to true, which ensures a context is not successfully created - * if the system has a major performance issue such as only supporting software rendering. The standard WebGL default is false, - * which is not appropriate for almost any Cesium app. - *

- *

* The other webgl properties match the WebGL defaults for {@link http://www.khronos.org/registry/webgl/specs/latest/#5.2|WebGLContextAttributes}. *

*

diff --git a/Specs/Widgets/CesiumWidget/CesiumWidgetSpec.js b/Specs/Widgets/CesiumWidget/CesiumWidgetSpec.js index beda200c3d5c..79c09eb123b2 100644 --- a/Specs/Widgets/CesiumWidget/CesiumWidgetSpec.js +++ b/Specs/Widgets/CesiumWidget/CesiumWidgetSpec.js @@ -55,7 +55,6 @@ defineSuite([ options = defaultValue(options, {}); options.contextOptions = defaultValue(options.contextOptions, {}); options.contextOptions.webgl = defaultValue(options.contextOptions.webgl, {}); - options.contextOptions.webgl.failIfMajorPerformanceCaveat = false; return new CesiumWidget(container, options); } diff --git a/Specs/createContext.js b/Specs/createContext.js index 5ec1b55f2d93..ecb2ed00b348 100644 --- a/Specs/createContext.js +++ b/Specs/createContext.js @@ -40,7 +40,6 @@ define([ options.webgl = clone(defaultValue(options.webgl, {})); options.webgl.alpha = defaultValue(options.webgl.alpha, true); options.webgl.antialias = defaultValue(options.webgl.antialias, false); - options.webgl.failIfMajorPerformanceCaveat = false; var canvas = createCanvas(canvasWidth, canvasHeight); diff --git a/Specs/createScene.js b/Specs/createScene.js index 9605f7ec9e3f..92d9832797c9 100644 --- a/Specs/createScene.js +++ b/Specs/createScene.js @@ -34,7 +34,6 @@ define([ var contextOptions = options.contextOptions; contextOptions.webgl = defaultValue(contextOptions.webgl, {}); contextOptions.webgl.antialias = defaultValue(contextOptions.webgl.antialias, false); - contextOptions.webgl.failIfMajorPerformanceCaveat = false; var scene = new Scene(options); diff --git a/Specs/createViewer.js b/Specs/createViewer.js index 762f77101a42..ab8b546e07c3 100644 --- a/Specs/createViewer.js +++ b/Specs/createViewer.js @@ -11,7 +11,6 @@ define([ options = defaultValue(options, {}); options.contextOptions = defaultValue(options.contextOptions, {}); options.contextOptions.webgl = defaultValue(options.contextOptions.webgl, {}); - options.contextOptions.webgl.failIfMajorPerformanceCaveat = false; return new Viewer(container, options); }