Port DOM renderer to request render frame architecture

This commit is contained in:
Tom Payne
2013-01-03 14:51:15 +01:00
parent b386c38111
commit 7a36793776
2 changed files with 18 additions and 40 deletions

View File

@@ -135,11 +135,7 @@ ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) {
*/
ol.renderer.dom.Map.prototype.handleCenterChanged = function() {
goog.base(this, 'handleCenterChanged');
var map = this.getMap();
if (!map.isDef()) {
return;
}
map.render();
this.getMap().render();
};
@@ -148,11 +144,7 @@ ol.renderer.dom.Map.prototype.handleCenterChanged = function() {
*/
ol.renderer.dom.Map.prototype.handleResolutionChanged = function() {
goog.base(this, 'handleResolutionChanged');
var map = this.getMap();
if (!map.isDef()) {
return;
}
map.render();
this.getMap().render();
};
@@ -160,11 +152,8 @@ ol.renderer.dom.Map.prototype.handleResolutionChanged = function() {
* @inheritDoc
*/
ol.renderer.dom.Map.prototype.handleRotationChanged = function() {
var map = this.getMap();
if (!map.isDef()) {
return;
}
map.render();
goog.base(this, 'handleRotationChanged');
this.getMap().render();
};
@@ -173,11 +162,7 @@ ol.renderer.dom.Map.prototype.handleRotationChanged = function() {
*/
ol.renderer.dom.Map.prototype.handleSizeChanged = function() {
goog.base(this, 'handleSizeChanged');
var map = this.getMap();
if (!map.isDef()) {
return;
}
map.render();
this.getMap().render();
};
@@ -227,14 +212,16 @@ ol.renderer.dom.Map.prototype.renderFrame = function(time) {
this.renderedRotation_ = mapRotation;
this.renderedSize_ = mapSize;
var animate = false;
var requestRenderFrame = false;
this.forEachReadyVisibleLayer(function(layer, layerRenderer) {
if (layerRenderer.renderFrame(time)) {
animate = true;
requestRenderFrame = true;
}
});
return animate;
if (requestRenderFrame) {
map.requestRenderFrame();
}
};

View File

@@ -86,16 +86,6 @@ ol.renderer.dom.TileLayer.prototype.removeExtraTiles_ =
};
/**
* @param {goog.events.Event} event Tile change event.
* @private
*/
ol.renderer.dom.TileLayer.prototype.handleTileChange_ = function(event) {
goog.asserts.assert(event.target.getState() == ol.TileState.LOADED);
this.getMap().render();
};
/**
* @inheritDoc
*/
@@ -125,6 +115,7 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = function(time) {
var tileRange =
tileGrid.getTileRangeForExtentAndResolution(mapExtent, mapResolution);
var allTilesLoaded = true;
// first pass through the tile range to determine all the tiles needed
tileRange.forEachTileCoord(z, function(tileCoord) {
@@ -136,17 +127,15 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = function(time) {
var key = tile.tileCoord.toString();
var state = tile.getState();
if (state == ol.TileState.LOADED) {
if (state == ol.TileState.IDLE) {
tile.load();
} else if (state == ol.TileState.LOADED) {
tilesToDrawByZ[z][key] = tile;
return;
} else {
if (state != ol.TileState.LOADING) {
goog.events.listen(tile, goog.events.EventType.CHANGE,
this.handleTileChange_, false, this);
tile.load();
}
}
allTilesLoaded = false;
/**
* Look for already loaded tiles at alternate z that can serve as
* placeholders until tiles at the current z have loaded.
@@ -233,4 +222,6 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = function(time) {
this.renderedMapResolution_ = mapResolution;
this.removeExtraTiles_(tilesToDrawByZ);
return !allTilesLoaded;
};