diff --git a/src/ol/renderer/canvas/ImageLayer.js b/src/ol/renderer/canvas/ImageLayer.js index 9aeee71662..7c6d22fed1 100644 --- a/src/ol/renderer/canvas/ImageLayer.js +++ b/src/ol/renderer/canvas/ImageLayer.js @@ -143,6 +143,7 @@ CanvasImageLayerRenderer.prototype.prepareFrame = function(frameState, layerStat projection = sourceProjection; } } + let skippedFeatures = this.skippedFeatures_; const vectorRenderer = this.vectorRenderer_; if (vectorRenderer) { const context = vectorRenderer.context; @@ -155,25 +156,25 @@ CanvasImageLayerRenderer.prototype.prepareFrame = function(frameState, layerStat rotation: 0 })) })); - const skippedFeatures = Object.keys(imageFrameState.skippedFeatureUids).sort(); - if (vectorRenderer.prepareFrame(imageFrameState, layerState) && - (vectorRenderer.replayGroupChanged || - !equals(skippedFeatures, this.skippedFeatures_))) { - context.canvas.width = imageFrameState.size[0] * pixelRatio; - context.canvas.height = imageFrameState.size[1] * pixelRatio; - vectorRenderer.compose(imageFrameState, layerState, context); - this.image_ = new ImageCanvas(renderedExtent, viewResolution, pixelRatio, context.canvas); - this.skippedFeatures_ = skippedFeatures; - } + const newSkippedFeatures = Object.keys(imageFrameState.skippedFeatureUids).sort(); + image = new ImageCanvas(renderedExtent, viewResolution, pixelRatio, context.canvas, function(callback) { + if (vectorRenderer.prepareFrame(imageFrameState, layerState) && + (vectorRenderer.replayGroupChanged || + !equals(skippedFeatures, newSkippedFeatures))) { + context.canvas.width = imageFrameState.size[0] * pixelRatio; + context.canvas.height = imageFrameState.size[1] * pixelRatio; + vectorRenderer.compose(context, imageFrameState, layerState); + skippedFeatures = newSkippedFeatures; + callback(); + } + }); } else { image = imageSource.getImage( renderedExtent, viewResolution, pixelRatio, projection); - if (image) { - const loaded = this.loadImage(image); - if (loaded) { - this.image_ = image; - } - } + } + if (image && this.loadImage(image)) { + this.image_ = image; + this.skippedFeatures_ = skippedFeatures; } }