Reuse container for raster and vector image layers

This commit is contained in:
ahocevar
2019-05-21 23:11:06 +02:00
parent a45e704be2
commit 7895b16043
6 changed files with 10 additions and 26 deletions

View File

@@ -114,14 +114,6 @@ class CanvasLayerRenderer extends LayerRenderer {
}
}
/**
* @inheritDoc
*/
disposeInternal() {
this.context.canvas.width = this.context.canvas.height = 0;
super.disposeInternal();
}
/**
* @param {CanvasRenderingContext2D} context Context.
* @param {import("../../PluggableMap.js").FrameState} frameState Frame state.

View File

@@ -78,6 +78,7 @@ class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer {
if (!hints[ViewHint.ANIMATING] && !hints[ViewHint.INTERACTING] && !isEmpty(renderedExtent)) {
let skippedFeatures = this.skippedFeatures_;
vectorRenderer.useContainer(null, null);
const context = vectorRenderer.context;
const imageFrameState = /** @type {import("../../PluggableMap.js").FrameState} */ (assign({}, frameState, {
declutterItems: [],
@@ -94,7 +95,7 @@ class CanvasVectorImageLayerRenderer extends CanvasImageLayerRenderer {
if (vectorRenderer.prepareFrame(imageFrameState, layerState) &&
(vectorRenderer.replayGroupChanged ||
!equals(skippedFeatures, newSkippedFeatures))) {
vectorRenderer.renderFrame(imageFrameState, layerState);
vectorRenderer.renderFrame(imageFrameState, layerState, null);
renderDeclutterItems(imageFrameState, null);
skippedFeatures = newSkippedFeatures;
callback();

View File

@@ -111,14 +111,6 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
this.zDirection = 1;
}
/**
* @inheritDoc
*/
disposeInternal() {
this.overlayContext_.canvas.width = this.overlayContext_.canvas.height = 0;
super.disposeInternal();
}
/**
* @inheritDoc
*/
@@ -399,14 +391,9 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
const renderMode = layer.getRenderMode();
if (renderMode === VectorTileRenderType.IMAGE) {
this.renderTileImages_(hifi, frameState);
return this.container;
}
if (!isEmpty(this.renderTileImageQueue_) && !this.extentChanged) {
this.renderTileImages_(hifi, frameState);
}
const context = this.overlayContext_;
const declutterReplays = layer.getDeclutter() ? {} : null;
const source = layer.getSource();

View File

@@ -444,7 +444,11 @@ function getImageData(layer, frameState, layerState) {
}
const width = frameState.size[0];
const height = frameState.size[1];
const element = renderer.renderFrame(frameState, layerState);
const container = renderer.renderFrame(frameState, layerState, null);
let element;
if (container) {
element = container.firstElementChild;
}
if (!(element instanceof HTMLCanvasElement)) {
throw new Error('Unsupported rendered element: ' + element);
}

View File

@@ -307,7 +307,7 @@ describe('ol.renderer.canvas.VectorLayer', function() {
let rendered = false;
if (renderer.prepareFrame(frameState, {})) {
rendered = true;
renderer.renderFrame(frameState, layer.getLayerState());
renderer.renderFrame(frameState, layer.getLayerState(), null);
}
expect(rendered).to.be(true);
});

View File

@@ -250,10 +250,10 @@ describe('ol.renderer.canvas.VectorTileLayer', function() {
renderer.renderFrame(frameState, {});
const replayState = renderer.renderedTiles[0].getReplayState(layer);
const revision = replayState.renderedTileRevision;
renderer.renderFrame(frameState, {});
renderer.renderFrame(frameState, {}, null);
expect(replayState.renderedTileRevision).to.be(revision);
layer.changed();
renderer.renderFrame(frameState, {});
renderer.renderFrame(frameState, {}, null);
expect(replayState.renderedTileRevision).to.be(revision + 1);
expect(Object.keys(renderer.tileListenerKeys_).length).to.be(0);
});