diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 83a75771d3..569a9179c0 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -1,7 +1,5 @@ // FIXME clear textureCache -// FIXME defer texture loads until after render when animating // FIXME generational tile texture garbage collector newFrame/get -// FIXME defer cleanup until post-render // FIXME check against gl.getParameter(webgl.MAX_TEXTURE_SIZE) goog.provide('ol.renderer.webgl.Map'); @@ -119,6 +117,12 @@ ol.renderer.webgl.Map = function(container, map) { this.canvas_.className = 'ol-unselectable'; goog.dom.insertChildAt(container, this.canvas_, 0); + /** + * @private + * @type {boolean} + */ + this.renderedVisible_ = true; + /** * @private * @type {ol.Size} @@ -267,7 +271,6 @@ ol.renderer.webgl.Map.prototype.canRotate = goog.functions.TRUE; * @inheritDoc */ ol.renderer.webgl.Map.prototype.createLayerRenderer = function(layer) { - var gl = this.getGL(); if (layer instanceof ol.layer.TileLayer) { return new ol.renderer.webgl.TileLayer(this, layer); } else { @@ -495,9 +498,10 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { var gl = this.getGL(); if (goog.isNull(frameState)) { - gl.bindFramebuffer(goog.webgl.FRAMEBUFFER, null); - gl.clearColor(0, 0, 0, 0); - gl.clear(goog.webgl.COLOR_BUFFER_BIT); + if (this.renderedVisible_) { + goog.style.showElement(this.canvas_, false); + this.renderedVisible_ = false; + } return false; } @@ -575,6 +579,11 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4); }, this); + if (!this.renderedVisible_) { + goog.style.showElement(this.canvas_, true); + this.renderedVisible_ = true; + } + }; diff --git a/src/ol/renderer/webgl/webglrenderer.js b/src/ol/renderer/webgl/webglrenderer.js index c8eae9c377..d7ba243f8f 100644 --- a/src/ol/renderer/webgl/webglrenderer.js +++ b/src/ol/renderer/webgl/webglrenderer.js @@ -3,12 +3,6 @@ goog.provide('ol.renderer.webgl'); goog.require('ol.webgl'); -/** - * @define {boolean} Free resources immediately. - */ -ol.renderer.webgl.FREE_RESOURCES_IMMEDIATELY = false; - - /** * @return {boolean} Is supported. */ diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index cd1d95cbb5..8f27749f9c 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -8,7 +8,6 @@ goog.provide('ol.renderer.webgl.tilelayerrenderer.shader.Vertex'); goog.require('goog.array'); goog.require('goog.asserts'); -goog.require('goog.debug.Logger'); goog.require('goog.events.EventType'); goog.require('goog.object'); goog.require('goog.structs.PriorityQueue'); @@ -88,14 +87,6 @@ ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) { goog.base(this, mapRenderer, tileLayer); - if (goog.DEBUG) { - /** - * @inheritDoc - */ - this.logger = goog.debug.Logger.getLogger( - 'ol.renderer.webgl.tilelayerrenderer.' + goog.getUid(this)); - } - /** * @private * @type {ol.renderer.webgl.FragmentShader} @@ -179,28 +170,14 @@ ol.renderer.webgl.TileLayer.prototype.bindFramebuffer_ = if (!goog.isDef(this.framebufferDimension_) || this.framebufferDimension_ != framebufferDimension) { - if (goog.DEBUG) { - this.logger.info('re-sizing framebuffer'); - } - - if (ol.renderer.webgl.FREE_RESOURCES_IMMEDIATELY) { - if (goog.DEBUG) { - this.logger.info('freeing WebGL resources'); - } - if (!gl.isContextLost()) { - gl.deleteFramebuffer(this.framebuffer_); - gl.deleteTexture(this.texture_); - } - } else { - var map = this.getMap(); - frameState.postRenderFunctions.push( - goog.partial(function(gl, framebuffer, texture) { - if (!gl.isContextLost()) { - gl.deleteFramebuffer(framebuffer); - gl.deleteTexture(texture); - } - }, gl, this.framebuffer_, this.texture_)); - } + var map = this.getMap(); + frameState.postRenderFunctions.push( + goog.partial(function(gl, framebuffer, texture) { + if (!gl.isContextLost()) { + gl.deleteFramebuffer(framebuffer); + gl.deleteTexture(texture); + } + }, gl, this.framebuffer_, this.texture_)); var texture = gl.createTexture(); gl.bindTexture(goog.webgl.TEXTURE_2D, texture); @@ -243,15 +220,6 @@ ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() { }; -/** - * @return {ol.layer.TileLayer} Layer. - * @inheritDoc - */ -ol.renderer.webgl.TileLayer.prototype.getLayer = function() { - return /** @type {ol.layer.TileLayer} */ (goog.base(this, 'getLayer')); -}; - - /** * @inheritDoc */ @@ -268,6 +236,14 @@ ol.renderer.webgl.TileLayer.prototype.getTexture = function() { }; +/** + * @return {ol.layer.TileLayer} Tile layer. + */ +ol.renderer.webgl.TileLayer.prototype.getTileLayer = function() { + return /** @type {ol.layer.TileLayer} */ (this.getLayer()); +}; + + /** * @inheritDoc */ @@ -292,7 +268,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = var view2DState = frameState.view2DState; var center = view2DState.center; - var tileLayer = this.getLayer(); + var tileLayer = this.getTileLayer(); var tileSource = tileLayer.getTileSource(); var tileGrid = tileSource.getTileGrid(); var z = tileGrid.getZForResolution(view2DState.resolution);