Fix hitdetection image invalidation

This commit is contained in:
Maximilian Krög
2021-06-19 03:13:25 +02:00
parent 3e2c045617
commit e8b336d11e

View File

@@ -30,6 +30,7 @@ import {
getSquaredTolerance as getSquaredRenderTolerance, getSquaredTolerance as getSquaredRenderTolerance,
renderFeature, renderFeature,
} from '../vector.js'; } from '../vector.js';
import {equals} from '../../array.js';
import { import {
fromUserExtent, fromUserExtent,
getTransformFromProjections, getTransformFromProjections,
@@ -93,6 +94,12 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
*/ */
this.renderedExtent_ = createEmpty(); this.renderedExtent_ = createEmpty();
/**
* @private
* @type {import("../../extent.js").Extent}
*/
this.wrappedRenderedExtent_ = createEmpty();
/** /**
* @private * @private
* @type {number} * @type {number}
@@ -323,7 +330,7 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
const resolution = this.renderedResolution_; const resolution = this.renderedResolution_;
const rotation = this.renderedRotation_; const rotation = this.renderedRotation_;
const projection = this.renderedProjection_; const projection = this.renderedProjection_;
const extent = this.renderedExtent_; const extent = this.wrappedRenderedExtent_;
const layer = this.getLayer(); const layer = this.getLayer();
const transforms = []; const transforms = [];
const width = size[0] * HIT_DETECT_RESOLUTION; const width = size[0] * HIT_DETECT_RESOLUTION;
@@ -548,6 +555,7 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
frameStateExtent, frameStateExtent,
vectorLayerRenderBuffer * resolution vectorLayerRenderBuffer * resolution
); );
const renderedExtent = extent.slice();
const loadExtents = [extent.slice()]; const loadExtents = [extent.slice()];
const projectionExtent = projection.getExtent(); const projectionExtent = projection.getExtent();
@@ -596,8 +604,13 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
this.renderedResolution_ == resolution && this.renderedResolution_ == resolution &&
this.renderedRevision_ == vectorLayerRevision && this.renderedRevision_ == vectorLayerRevision &&
this.renderedRenderOrder_ == vectorLayerRenderOrder && 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; this.replayGroupChanged = false;
return true; return true;
} }
@@ -702,7 +715,8 @@ class CanvasVectorLayerRenderer extends CanvasLayerRenderer {
this.renderedResolution_ = resolution; this.renderedResolution_ = resolution;
this.renderedRevision_ = vectorLayerRevision; this.renderedRevision_ = vectorLayerRevision;
this.renderedRenderOrder_ = vectorLayerRenderOrder; this.renderedRenderOrder_ = vectorLayerRenderOrder;
this.renderedExtent_ = extent; this.renderedExtent_ = renderedExtent;
this.wrappedRenderedExtent_ = extent;
this.renderedCenter_ = center; this.renderedCenter_ = center;
this.renderedProjection_ = projection; this.renderedProjection_ = projection;
this.replayGroup_ = executorGroup; this.replayGroup_ = executorGroup;