From 9950e97c546215e811ab80948056b081d2a34041 Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Fri, 16 Sep 2016 15:02:21 +0200 Subject: [PATCH 1/2] Always use the frameState's extent Since the tile renderer aligns tiles to pixels anyway, we do not need to modify the extent to make its center align with a pixel. --- src/ol/renderer/canvas/tilelayer.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/ol/renderer/canvas/tilelayer.js b/src/ol/renderer/canvas/tilelayer.js index 296a04d203..3bd916743f 100644 --- a/src/ol/renderer/canvas/tilelayer.js +++ b/src/ol/renderer/canvas/tilelayer.js @@ -90,15 +90,7 @@ ol.renderer.canvas.TileLayer.prototype.prepareFrame = function( var tileGrid = tileSource.getTileGridForProjection(projection); var z = tileGrid.getZForResolution(viewState.resolution, this.zDirection); var tileResolution = tileGrid.getResolution(z); - var center = viewState.center; - var extent; - if (tileResolution == viewState.resolution) { - center = this.snapCenterToPixel(center, tileResolution, frameState.size); - extent = ol.extent.getForViewAndSize( - center, tileResolution, viewState.rotation, frameState.size); - } else { - extent = frameState.extent; - } + var extent = frameState.extent; if (layerState.extent !== undefined) { extent = ol.extent.getIntersection(extent, layerState.extent); From 3026fda02b43072a7d22901609e56581e3b158fe Mon Sep 17 00:00:00 2001 From: Andreas Hocevar Date: Mon, 26 Sep 2016 13:28:09 +0200 Subject: [PATCH 2/2] Use pixel rounded center for the WebGL renderer transform --- src/ol/renderer/layer.js | 15 --------------- src/ol/renderer/webgl/tilelayer.js | 13 +++---------- 2 files changed, 3 insertions(+), 25 deletions(-) diff --git a/src/ol/renderer/layer.js b/src/ol/renderer/layer.js index 8a7483972a..f6c603b8a4 100644 --- a/src/ol/renderer/layer.js +++ b/src/ol/renderer/layer.js @@ -254,21 +254,6 @@ ol.renderer.Layer.prototype.updateUsedTiles = function(usedTiles, tileSource, z, }; -/** - * @param {ol.Coordinate} center Center. - * @param {number} resolution Resolution. - * @param {ol.Size} size Size. - * @protected - * @return {ol.Coordinate} Snapped center. - */ -ol.renderer.Layer.prototype.snapCenterToPixel = function(center, resolution, size) { - return [ - resolution * (Math.round(center[0] / resolution) + (size[0] % 2) / 2), - resolution * (Math.round(center[1] / resolution) + (size[1] % 2) / 2) - ]; -}; - - /** * Manage tile pyramid. * This function performs a number of functions related to the tiles at the diff --git a/src/ol/renderer/webgl/tilelayer.js b/src/ol/renderer/webgl/tilelayer.js index 248a3e27ca..80fb488e18 100644 --- a/src/ol/renderer/webgl/tilelayer.js +++ b/src/ol/renderer/webgl/tilelayer.js @@ -164,14 +164,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS var tileGutter = frameState.pixelRatio * tileSource.getGutter(projection); var center = viewState.center; - var extent; - if (tileResolution == viewState.resolution) { - center = this.snapCenterToPixel(center, tileResolution, frameState.size); - extent = ol.extent.getForViewAndSize( - center, tileResolution, viewState.rotation, frameState.size); - } else { - extent = frameState.extent; - } + var extent = frameState.extent; var tileRange = tileGrid.getTileRangeForExtentAndResolution( extent, tileResolution); @@ -346,9 +339,9 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS var texCoordMatrix = this.texCoordMatrix; ol.transform.reset(texCoordMatrix); ol.transform.translate(texCoordMatrix, - (center[0] - framebufferExtent[0]) / + (Math.round(center[0] / tileResolution) * tileResolution - framebufferExtent[0]) / (framebufferExtent[2] - framebufferExtent[0]), - (center[1] - framebufferExtent[1]) / + (Math.round(center[1] / tileResolution) * tileResolution - framebufferExtent[1]) / (framebufferExtent[3] - framebufferExtent[1])); if (viewState.rotation !== 0) { ol.transform.rotate(texCoordMatrix, viewState.rotation);