Reuse target for image layers

This commit is contained in:
ahocevar
2019-05-19 22:31:49 +02:00
parent a55505b36a
commit d1f1b468b1
4 changed files with 9 additions and 6 deletions
+2 -1
View File
@@ -88,7 +88,7 @@ class CompositeMapRenderer extends MapRenderer {
const viewResolution = frameState.viewState.resolution; const viewResolution = frameState.viewState.resolution;
this.children_.length = 0; this.children_.length = 0;
const previousElement = null; let previousElement = null;
for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) { for (let i = 0, ii = layerStatesArray.length; i < ii; ++i) {
const layerState = layerStatesArray[i]; const layerState = layerStatesArray[i];
if (!visibleAtResolution(layerState, viewResolution) || if (!visibleAtResolution(layerState, viewResolution) ||
@@ -100,6 +100,7 @@ class CompositeMapRenderer extends MapRenderer {
const element = layer.render(frameState, previousElement); const element = layer.render(frameState, previousElement);
if (element !== previousElement) { if (element !== previousElement) {
this.children_.push(element); this.children_.push(element);
previousElement = element;
} }
} }
super.renderFrame(frameState); super.renderFrame(frameState);
+3 -3
View File
@@ -6,7 +6,7 @@ import ViewHint from '../../ViewHint.js';
import {containsExtent, intersects} from '../../extent.js'; import {containsExtent, intersects} from '../../extent.js';
import {getIntersection, isEmpty} from '../../extent.js'; import {getIntersection, isEmpty} from '../../extent.js';
import CanvasLayerRenderer from './Layer.js'; import CanvasLayerRenderer from './Layer.js';
import {compose as composeTransform, makeInverse, toString as transformToString} from '../../transform.js'; import {compose as composeTransform, makeInverse, toString as transformToString, apply as applyTransform} from '../../transform.js';
/** /**
* @classdesc * @classdesc
@@ -72,7 +72,7 @@ class CanvasImageLayerRenderer extends CanvasLayerRenderer {
/** /**
* @inheritDoc * @inheritDoc
*/ */
renderFrame(frameState, layerState) { renderFrame(frameState, layerState, target) {
const image = this.image_; const image = this.image_;
const imageExtent = image.getExtent(); const imageExtent = image.getExtent();
const imageResolution = image.getResolution(); const imageResolution = image.getResolution();
@@ -159,7 +159,7 @@ class CanvasImageLayerRenderer extends CanvasLayerRenderer {
canvas.style.transform = canvasTransform; canvas.style.transform = canvasTransform;
} }
return canvas; return this.container;
} }
+1
View File
@@ -85,6 +85,7 @@ class CanvasLayerRenderer extends LayerRenderer {
container = target; container = target;
reused = true; reused = true;
} else { } else {
context = null;
container = this.container; container = this.container;
if (!container) { if (!container) {
container = document.createElement('div'); container = document.createElement('div');
+3 -2
View File
@@ -309,8 +309,9 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
const y = Math.round(floatY); const y = Math.round(floatY);
const w = nextX - x; const w = nextX - x;
const h = nextY - y; const h = nextY - y;
const transition = z === currentZ;
if (clips) { if (clips && (!transition || tile.getAlpha(getUid(this), frameState.time) === 1)) {
// Clip mask for regions in this tile that already filled by a higher z tile // Clip mask for regions in this tile that already filled by a higher z tile
context.save(); context.save();
currentClip = [x, y, x + w, y, x + w, y + h, x, y + h]; currentClip = [x, y, x + w, y, x + w, y + h, x, y + h];
@@ -334,7 +335,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
clips.push(currentClip); clips.push(currentClip);
clipZs.push(currentZ); clipZs.push(currentZ);
} }
this.drawTileImage(tile, frameState, x, y, w, h, tileGutter, z === currentZ); this.drawTileImage(tile, frameState, x, y, w, h, tileGutter, transition);
if (clips) { if (clips) {
context.restore(); context.restore();
} }