From 8ced15ce2eaa9c36bbddb8ab414baf599865f8a7 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Mon, 14 Jan 2013 16:21:19 +0100 Subject: [PATCH] Move closure out of loop, and use loop rather than forEachTileCoord --- src/ol/renderer/dom/domtilelayerrenderer.js | 56 ++++++++++--------- .../renderer/webgl/webgltilelayerrenderer.js | 56 ++++++++++--------- 2 files changed, 58 insertions(+), 54 deletions(-) diff --git a/src/ol/renderer/dom/domtilelayerrenderer.js b/src/ol/renderer/dom/domtilelayerrenderer.js index 721685f71a..45a7f246c5 100644 --- a/src/ol/renderer/dom/domtilelayerrenderer.js +++ b/src/ol/renderer/dom/domtilelayerrenderer.js @@ -85,17 +85,41 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = var view2DState = frameState.view2DState; var z = tileGrid.getZForResolution(view2DState.resolution); + var tileRange = tileGrid.getTileRangeForExtentAndResolution( + frameState.extent, view2DState.resolution); var tileResolution = tileGrid.getResolution(z); /** @type {Object.>} */ var tilesToDrawByZ = {}; + tilesToDrawByZ[z] = {}; - var tileRange = tileGrid.getTileRangeForExtentAndResolution( - frameState.extent, view2DState.resolution); + var findInterimTiles = function(z, tileRange) { + // FIXME this could be more efficient about filling partial holes + var fullyCovered = true; + var tile, tileCoord, tileCoordKey, x, y; + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + tileCoord = new ol.TileCoord(z, x, y); + tileCoordKey = tileCoord.toString(); + if (tilesToDrawByZ[z] && tilesToDrawByZ[z][tileCoordKey]) { + return; + } + tile = tileSource.getTile(tileCoord); + if (!goog.isNull(tile) && + tile.getState() == ol.TileState.LOADED) { + if (!tilesToDrawByZ[z]) { + tilesToDrawByZ[z] = {}; + } + tilesToDrawByZ[z][tileCoordKey] = tile; + } else { + fullyCovered = false; + } + } + } + return fullyCovered; + }; var allTilesLoaded = true; - - tilesToDrawByZ[z] = {}; var tile, tileCenter, tileCoord, tileState, x, y; for (x = tileRange.minX; x <= tileRange.maxX; ++x) { for (y = tileRange.minY; y <= tileRange.maxY; ++y) { @@ -118,30 +142,8 @@ ol.renderer.dom.TileLayer.prototype.renderFrame = } allTilesLoaded = false; + tileGrid.forEachTileCoordParentTileRange(tileCoord, findInterimTiles); - // FIXME this could be more efficient about filling partial holes - tileGrid.forEachTileCoordParentTileRange( - tileCoord, - function(z, tileRange) { - var fullyCovered = true; - tileRange.forEachTileCoord(z, function(tileCoord) { - var tileCoordKey = tileCoord.toString(); - if (tilesToDrawByZ[z] && tilesToDrawByZ[z][tileCoordKey]) { - return; - } - var tile = tileSource.getTile(tileCoord); - if (!goog.isNull(tile) && - tile.getState() == ol.TileState.LOADED) { - if (!tilesToDrawByZ[z]) { - tilesToDrawByZ[z] = {}; - } - tilesToDrawByZ[z][tileCoordKey] = tile; - } else { - fullyCovered = false; - } - }); - return fullyCovered; - }); } } diff --git a/src/ol/renderer/webgl/webgltilelayerrenderer.js b/src/ol/renderer/webgl/webgltilelayerrenderer.js index 6b5169baf3..43f83838fd 100644 --- a/src/ol/renderer/webgl/webgltilelayerrenderer.js +++ b/src/ol/renderer/webgl/webgltilelayerrenderer.js @@ -348,12 +348,38 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = * @type {Object.>} */ var tilesToDrawByZ = {}; + tilesToDrawByZ[z] = {}; + + var findInterimTiles = function(z, tileRange) { + // FIXME this could be more efficient about filling partial holes + var fullyCovered = true; + var tile, tileCoord, tileCoordKey, x, y; + for (x = tileRange.minX; x <= tileRange.maxX; ++x) { + for (y = tileRange.minY; y <= tileRange.maxY; ++y) { + tileCoord = new ol.TileCoord(z, x, y); + tileCoordKey = tileCoord.toString(); + if (tilesToDrawByZ[z] && tilesToDrawByZ[z][tileCoordKey]) { + return; + } + tile = tileSource.getTile(tileCoord); + if (!goog.isNull(tile) && + tile.getState() == ol.TileState.LOADED && + mapRenderer.isTileTextureLoaded(tile)) { + if (!tilesToDrawByZ[z]) { + tilesToDrawByZ[z] = {}; + } + tilesToDrawByZ[z][tileCoordKey] = tile; + } else { + fullyCovered = false; + } + } + } + return fullyCovered; + }; var tilesToLoad = new goog.structs.PriorityQueue(); var allTilesLoaded = true; - - tilesToDrawByZ[z] = {}; var deltaX, deltaY, priority, tile, tileCenter, tileCoord, tileState, x, y; for (x = tileRange.minX; x <= tileRange.maxX; ++x) { for (y = tileRange.minY; y <= tileRange.maxY; ++y) { @@ -384,31 +410,7 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame = } allTilesLoaded = false; - - // FIXME this could be more efficient about filling partial holes - tileGrid.forEachTileCoordParentTileRange( - tileCoord, - function(z, tileRange) { - var fullyCovered = true; - tileRange.forEachTileCoord(z, function(tileCoord) { - var tileCoordKey = tileCoord.toString(); - if (tilesToDrawByZ[z] && tilesToDrawByZ[z][tileCoordKey]) { - return; - } - var tile = tileSource.getTile(tileCoord); - if (!goog.isNull(tile) && - tile.getState() == ol.TileState.LOADED && - mapRenderer.isTileTextureLoaded(tile)) { - if (!tilesToDrawByZ[z]) { - tilesToDrawByZ[z] = {}; - } - tilesToDrawByZ[z][tileCoordKey] = tile; - } else { - fullyCovered = false; - } - }); - return fullyCovered; - }); + tileGrid.forEachTileCoordParentTileRange(tileCoord, findInterimTiles); }