Create context in vector tile layer constructor

This commit is contained in:
Tim Schaub
2018-11-04 11:44:22 -07:00
parent e55cca1e7d
commit 5dfa82c27e
2 changed files with 29 additions and 12 deletions

View File

@@ -86,8 +86,15 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
*/ */
this.tmpTransform_ = createTransform(); this.tmpTransform_ = createTransform();
const renderMode = layer.getRenderMode();
// Use lower resolution for pure vector rendering. Closest resolution otherwise. // Use lower resolution for pure vector rendering. Closest resolution otherwise.
this.zDirection = layer.getRenderMode() == VectorTileRenderType.VECTOR ? 1 : 0; this.zDirection = renderMode === VectorTileRenderType.VECTOR ? 1 : 0;
if (renderMode !== VectorTileRenderType.VECTOR) {
this.context = createCanvasContext2D();
}
listen(labelCache, EventType.CLEAR, this.handleFontsChanged_, this); listen(labelCache, EventType.CLEAR, this.handleFontsChanged_, this);
@@ -131,13 +138,6 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
const layerRevision = layer.getRevision(); const layerRevision = layer.getRevision();
if (this.renderedLayerRevision_ != layerRevision) { if (this.renderedLayerRevision_ != layerRevision) {
this.renderedTiles.length = 0; this.renderedTiles.length = 0;
const renderMode = layer.getRenderMode();
if (!this.context && renderMode != VectorTileRenderType.VECTOR) {
this.context = createCanvasContext2D();
}
if (this.context && renderMode == VectorTileRenderType.VECTOR) {
this.context = null;
}
} }
this.renderedLayerRevision_ = layerRevision; this.renderedLayerRevision_ = layerRevision;
return super.prepareFrame(frameState, layerState); return super.prepareFrame(frameState, layerState);

View File

@@ -19,6 +19,7 @@ import VectorTileSource from '../../../../../src/ol/source/VectorTile.js';
import Style from '../../../../../src/ol/style/Style.js'; import Style from '../../../../../src/ol/style/Style.js';
import Text from '../../../../../src/ol/style/Text.js'; import Text from '../../../../../src/ol/style/Text.js';
import {createXYZ} from '../../../../../src/ol/tilegrid.js'; import {createXYZ} from '../../../../../src/ol/tilegrid.js';
import VectorTileRenderType from '../../../../../src/ol/layer/VectorTileRenderType.js';
describe('ol.renderer.canvas.VectorTileLayer', function() { describe('ol.renderer.canvas.VectorTileLayer', function() {
@@ -97,13 +98,23 @@ describe('ol.renderer.canvas.VectorTileLayer', function() {
}); });
it('uses lower resolution for pure vector rendering', function() { it('uses lower resolution for pure vector rendering', function() {
layer.renderMode_ = 'vector'; const testLayer = new VectorTileLayer({
const renderer = new CanvasVectorTileLayerRenderer(layer); renderMode: VectorTileRenderType.VECTOR,
source: source,
style: layerStyle
});
const renderer = new CanvasVectorTileLayerRenderer(testLayer);
expect(renderer.zDirection).to.be(1); expect(renderer.zDirection).to.be(1);
}); });
it('does not render images for pure vector rendering', function() { it('does not render images for pure vector rendering', function() {
layer.renderMode_ = 'vector'; const testLayer = new VectorTileLayer({
renderMode: VectorTileRenderType.VECTOR,
source: source,
style: layerStyle
});
map.removeLayer(layer);
map.addLayer(testLayer);
const spy = sinon.spy(CanvasVectorTileLayerRenderer.prototype, const spy = sinon.spy(CanvasVectorTileLayerRenderer.prototype,
'renderTileImage_'); 'renderTileImage_');
map.renderSync(); map.renderSync();
@@ -112,7 +123,13 @@ describe('ol.renderer.canvas.VectorTileLayer', function() {
}); });
it('does not render replays for pure image rendering', function() { it('does not render replays for pure image rendering', function() {
layer.renderMode_ = 'image'; const testLayer = new VectorTileLayer({
renderMode: VectorTileRenderType.IMAGE,
source: source,
style: layerStyle
});
map.removeLayer(layer);
map.addLayer(testLayer);
const spy = sinon.spy(CanvasVectorTileLayerRenderer.prototype, const spy = sinon.spy(CanvasVectorTileLayerRenderer.prototype,
'getTransform'); 'getTransform');
map.renderSync(); map.renderSync();