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

View File

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

View File

@@ -444,7 +444,11 @@ function getImageData(layer, frameState, layerState) {
} }
const width = frameState.size[0]; const width = frameState.size[0];
const height = frameState.size[1]; 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)) { if (!(element instanceof HTMLCanvasElement)) {
throw new Error('Unsupported rendered element: ' + element); throw new Error('Unsupported rendered element: ' + element);
} }

View File

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

View File

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