From fefcc9f0caea9f4fd72a717c853fdcc50e9c9a38 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Mon, 18 Mar 2019 21:32:55 +0100 Subject: [PATCH] Return directly when all we do is render queued images --- src/ol/renderer/canvas/TileLayer.js | 9 ++++++++- src/ol/renderer/canvas/VectorTileLayer.js | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/ol/renderer/canvas/TileLayer.js b/src/ol/renderer/canvas/TileLayer.js index 03b29a026f..a2d601b6e6 100644 --- a/src/ol/renderer/canvas/TileLayer.js +++ b/src/ol/renderer/canvas/TileLayer.js @@ -4,7 +4,7 @@ import {getUid} from '../../util.js'; import TileRange from '../../TileRange.js'; import TileState from '../../TileState.js'; -import {createEmpty, getIntersection, getTopLeft} from '../../extent.js'; +import {createEmpty, equals, getIntersection, getTopLeft} from '../../extent.js'; import CanvasLayerRenderer from './Layer.js'; import {apply as applyTransform, compose as composeTransform, makeInverse, toString as transformToString} from '../../transform.js'; @@ -21,6 +21,12 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer { constructor(tileLayer) { super(tileLayer); + /** + * Rendered extent has changed since the previous `renderFrame()` call + * @type {boolean} + */ + this.extentChanged = true; + /** * @private * @type {import("../../extent.js").Extent} @@ -301,6 +307,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer { this.renderedRevision = sourceRevision; this.renderedResolution = tileResolution; + this.extentChanged = !this.renderedExtent_ || !equals(this.renderedExtent_, canvasExtent); this.renderedExtent_ = canvasExtent; this.manageTilePyramid(frameState, tileSource, tileGrid, pixelRatio, diff --git a/src/ol/renderer/canvas/VectorTileLayer.js b/src/ol/renderer/canvas/VectorTileLayer.js index 60ed514aad..beaa29dcaf 100644 --- a/src/ol/renderer/canvas/VectorTileLayer.js +++ b/src/ol/renderer/canvas/VectorTileLayer.js @@ -27,7 +27,7 @@ import { makeInverse } from '../../transform.js'; import CanvasExecutorGroup, {replayDeclutter} from '../../render/canvas/ExecutorGroup.js'; -import {clear} from '../../obj.js'; +import {clear, isEmpty} from '../../obj.js'; /** @@ -432,6 +432,11 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer { return this.container_; } + if (!isEmpty(this.renderTileImageQueue_) && !this.extentChanged) { + this.renderTileImages_(hifi, frameState); + return this.container_; + } + const context = this.overlayContext_; const declutterReplays = layer.getDeclutter() ? {} : null; const source = layer.getSource();