Handle dirty tiles properly

This commit is contained in:
Andreas Hocevar
2015-09-24 14:01:14 +02:00
parent 6e2f82c397
commit 9df280a884
2 changed files with 7 additions and 1 deletions

View File

@@ -168,7 +168,7 @@ ol.renderer.canvas.VectorTileLayer.prototype.createReplayGroup = function(tile,
} }
var replayState = tile.getReplayState(); var replayState = tile.getReplayState();
if (replayState.renderedRevision == revision && if (!replayState.dirty && replayState.renderedRevision == revision &&
replayState.renderedRenderOrder == renderOrder) { replayState.renderedRenderOrder == renderOrder) {
return; return;
} }
@@ -176,6 +176,7 @@ ol.renderer.canvas.VectorTileLayer.prototype.createReplayGroup = function(tile,
// FIXME dispose of old replayGroup in post render // FIXME dispose of old replayGroup in post render
goog.dispose(replayState.replayGroup); goog.dispose(replayState.replayGroup);
replayState.replayGroup = null; replayState.replayGroup = null;
replayState.dirty = false;
var source = layer.getSource(); var source = layer.getSource();
goog.asserts.assertInstanceof(source, ol.source.VectorTile, goog.asserts.assertInstanceof(source, ol.source.VectorTile,
@@ -211,6 +212,7 @@ ol.renderer.canvas.VectorTileLayer.prototype.createReplayGroup = function(tile,
var dirty = this.renderFeature(feature, squaredTolerance, styles, var dirty = this.renderFeature(feature, squaredTolerance, styles,
replayGroup); replayGroup);
this.dirty_ = this.dirty_ || dirty; this.dirty_ = this.dirty_ || dirty;
replayState.dirty = replayState.dirty || dirty;
} }
} }
@@ -391,6 +393,8 @@ ol.renderer.canvas.VectorTileLayer.prototype.prepareFrame =
} }
} }
this.dirty_ = false;
/** @type {Array.<number>} */ /** @type {Array.<number>} */
var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number); var zs = goog.array.map(goog.object.getKeys(tilesToDrawByZ), Number);
goog.array.sort(zs); goog.array.sort(zs);

View File

@@ -8,6 +8,7 @@ goog.require('ol.TileState');
/** /**
* @typedef {{ * @typedef {{
* dirty: boolean,
* renderedRenderOrder: (null|function(ol.Feature, ol.Feature):number), * renderedRenderOrder: (null|function(ol.Feature, ol.Feature):number),
* renderedRevision: number, * renderedRevision: number,
* replayGroup: ol.render.IReplayGroup}} * replayGroup: ol.render.IReplayGroup}}
@@ -58,6 +59,7 @@ ol.VectorTile = function(tileCoord, state, src, format, tileLoadFunction) {
* @type {ol.TileReplayState} * @type {ol.TileReplayState}
*/ */
this.replayState_ = { this.replayState_ = {
dirty: false,
renderedRenderOrder: null, renderedRenderOrder: null,
renderedRevision: -1, renderedRevision: -1,
replayGroup: null replayGroup: null