Reuse target for image layers
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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');
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user