From e8b336d11ee39c1603836a835a0a9a03b6b4d9d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Kr=C3=B6g?= Date: Sat, 19 Jun 2021 03:13:25 +0200 Subject: [PATCH] Fix hitdetection image invalidation --- src/ol/renderer/canvas/VectorLayer.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/ol/renderer/canvas/VectorLayer.js b/src/ol/renderer/canvas/VectorLayer.js index 2f123e99df..c3aa878ac2 100644 --- a/src/ol/renderer/canvas/VectorLayer.js +++ b/src/ol/renderer/canvas/VectorLayer.js @@ -30,6 +30,7 @@ import { getSquaredTolerance as getSquaredRenderTolerance, renderFeature, } from '../vector.js'; +import {equals} from '../../array.js'; import { fromUserExtent, getTransformFromProjections, @@ -93,6 +94,12 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { */ this.renderedExtent_ = createEmpty(); + /** + * @private + * @type {import("../../extent.js").Extent} + */ + this.wrappedRenderedExtent_ = createEmpty(); + /** * @private * @type {number} @@ -323,7 +330,7 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { const resolution = this.renderedResolution_; const rotation = this.renderedRotation_; const projection = this.renderedProjection_; - const extent = this.renderedExtent_; + const extent = this.wrappedRenderedExtent_; const layer = this.getLayer(); const transforms = []; const width = size[0] * HIT_DETECT_RESOLUTION; @@ -548,6 +555,7 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { frameStateExtent, vectorLayerRenderBuffer * resolution ); + const renderedExtent = extent.slice(); const loadExtents = [extent.slice()]; const projectionExtent = projection.getExtent(); @@ -596,8 +604,13 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { this.renderedResolution_ == resolution && this.renderedRevision_ == vectorLayerRevision && this.renderedRenderOrder_ == vectorLayerRenderOrder && - containsExtent(this.renderedExtent_, extent) + containsExtent(this.wrappedRenderedExtent_, extent) ) { + if (!equals(this.renderedExtent_, renderedExtent)) { + this.hitDetectionImageData_ = null; + this.renderedExtent_ = renderedExtent; + } + this.renderedCenter_ = center; this.replayGroupChanged = false; return true; } @@ -702,7 +715,8 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer { this.renderedResolution_ = resolution; this.renderedRevision_ = vectorLayerRevision; this.renderedRenderOrder_ = vectorLayerRenderOrder; - this.renderedExtent_ = extent; + this.renderedExtent_ = renderedExtent; + this.wrappedRenderedExtent_ = extent; this.renderedCenter_ = center; this.renderedProjection_ = projection; this.replayGroup_ = executorGroup;