From f76b9bdd0720c5e523cb2ffbb66627fd365deca1 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Tue, 14 May 2019 15:33:44 +0200 Subject: [PATCH 1/2] Only apply canvas transform if the tiles are scales --- src/ol/renderer/canvas/VectorTileLayer.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index 3b6eca9bff..7dd1fabf21 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -619,10 +619,12 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { const size = source.getTilePixelSize(z, pixelRatio, projection); context.canvas.width = size[0]; context.canvas.height = size[1]; - const canvasTransform = resetTransform(this.tmpTransform_); const renderScale = pixelRatio / renderPixelRatio; - scaleTransform(canvasTransform, renderScale, renderScale); - context.setTransform.apply(context, canvasTransform); + if (renderScale !== 1) { + const canvasTransform = resetTransform(this.tmpTransform_); + scaleTransform(canvasTransform, renderScale, renderScale); + context.setTransform.apply(context, canvasTransform); + } const tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent); for (let i = 0, ii = executorGroups.length; i < ii; ++i) { const executorGroup = executorGroups[i]; From 98ee52c61c40b89472ca9e048e6712e456cf8142 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Tue, 14 May 2019 15:39:06 +0200 Subject: [PATCH 2/2] Move the transform matrix computation out of the for loop --- src/ol/renderer/canvas/VectorTileLayer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index 7dd1fabf21..7119994bef 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -626,12 +626,12 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { context.setTransform.apply(context, canvasTransform); } const tileExtent = tileGrid.getTileCoordExtent(tileCoord, this.tmpExtent); + const pixelScale = renderPixelRatio / resolution; + const transform = resetTransform(this.tmpTransform_); + scaleTransform(transform, pixelScale, -pixelScale); + translateTransform(transform, -tileExtent[0], -tileExtent[3]); for (let i = 0, ii = executorGroups.length; i < ii; ++i) { const executorGroup = executorGroups[i]; - const pixelScale = renderPixelRatio / resolution; - const transform = resetTransform(this.tmpTransform_); - scaleTransform(transform, pixelScale, -pixelScale); - translateTransform(transform, -tileExtent[0], -tileExtent[3]); executorGroup.execute(context, transform, 0, {}, true, IMAGE_REPLAYS[layer.getRenderMode()]); } replayState.renderedTileResolution = tile.wantedResolution;