From aa3a20e91174fd2eae28d9404eb723eb899bac1b Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Thu, 3 Apr 2014 11:46:17 -0600 Subject: [PATCH] Provide layer states array in frame state --- externs/oli.js | 4 +++ src/ol/map.js | 1 + src/ol/renderer/canvas/canvasmaprenderer.js | 9 +++---- src/ol/renderer/dom/dommaprenderer.js | 10 +++---- src/ol/renderer/webgl/webglmaprenderer.js | 30 ++++++++++----------- 5 files changed, 28 insertions(+), 26 deletions(-) diff --git a/externs/oli.js b/externs/oli.js index 51e181fc27..be5000cc35 100644 --- a/externs/oli.js +++ b/externs/oli.js @@ -72,6 +72,10 @@ oli.FrameState.prototype.layersArray; oli.FrameState.prototype.layerStates; +/** @type {Array.} */ +oli.FrameState.prototype.layerStatesArray; + + /** @type {Object.} */ oli.FrameState.prototype.logos; diff --git a/src/ol/map.js b/src/ol/map.js index 34f5d37071..b490cd89e6 100644 --- a/src/ol/map.js +++ b/src/ol/map.js @@ -1226,6 +1226,7 @@ ol.Map.prototype.renderFrame_ = function(time) { index: this.frameIndex_++, layersArray: layersArray, layerStates: layerStates, + layerStatesArray: layerStatesArray, logos: {}, pixelRatio: this.pixelRatio_, pixelToCoordinateMatrix: this.pixelToCoordinateMatrix_, diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index 7ff360992f..e0d499a520 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -151,15 +151,14 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); - var layerStates = frameState.layerStates; - var layersArray = frameState.layersArray; + var layerStatesArray = frameState.layerStatesArray; var viewResolution = frameState.view2DState.resolution; var i, ii, layer, layerRenderer, layerState; - for (i = 0, ii = layersArray.length; i < ii; ++i) { - layer = layersArray[i]; + for (i = 0, ii = layerStatesArray.length; i < ii; ++i) { + layerState = layerStatesArray[i]; + layer = layerState.layer; layerRenderer = this.getLayerRenderer(layer); goog.asserts.assertInstanceof(layerRenderer, ol.renderer.canvas.Layer); - layerState = layerStates[goog.getUid(layer)]; if (!layerState.visible || layerState.sourceState != ol.source.State.READY || viewResolution >= layerState.maxResolution || diff --git a/src/ol/renderer/dom/dommaprenderer.js b/src/ol/renderer/dom/dommaprenderer.js index 0eaa8410bb..8f5eec30ca 100644 --- a/src/ol/renderer/dom/dommaprenderer.js +++ b/src/ol/renderer/dom/dommaprenderer.js @@ -117,21 +117,21 @@ ol.renderer.dom.Map.prototype.renderFrame = function(frameState) { }); } - var layerStates = frameState.layerStates; - var layersArray = frameState.layersArray; + var layerStatesArray = frameState.layerStatesArray; var i, ii, layer, layerRenderer, layerState; - for (i = 0, ii = layersArray.length; i < ii; ++i) { - layer = layersArray[i]; + for (i = 0, ii = layerStatesArray.length; i < ii; ++i) { + layerState = layerStatesArray[i]; + layer = layerState.layer; layerRenderer = /** @type {ol.renderer.dom.Layer} */ ( this.getLayerRenderer(layer)); goog.asserts.assertInstanceof(layerRenderer, ol.renderer.dom.Layer); addChild.call(this, layerRenderer.getTarget(), i); - layerState = frameState.layerStates[goog.getUid(layer)]; if (layerState.sourceState == ol.source.State.READY) { layerRenderer.prepareFrame(frameState, layerState); } } + var layerStates = frameState.layerStates; var layerKey; for (layerKey in this.getLayerRenderers()) { if (!(layerKey in layerStates)) { diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index aea240c698..df1f4597d1 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -441,27 +441,26 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { this.textureCache_.set((-frameState.index).toString(), null); ++this.textureCacheFrameMarkerCount_; - /** @type {Array.} */ - var layersToDraw = []; - var layersArray = frameState.layersArray; + /** @type {Array.} */ + var layerStatesToDraw = []; + var layerStatesArray = frameState.layerStatesArray; var viewResolution = frameState.view2DState.resolution; - var i, ii, layer, layerRenderer, layerState; - for (i = 0, ii = layersArray.length; i < ii; ++i) { - layer = layersArray[i]; - layerState = frameState.layerStates[goog.getUid(layer)]; + var i, ii, layerState; + for (i = 0, ii = layerStatesArray.length; i < ii; ++i) { + layerState = layerStatesArray[i]; if (layerState.visible && layerState.sourceState == ol.source.State.READY && viewResolution < layerState.maxResolution && viewResolution >= layerState.minResolution) { - layersToDraw.push(layer); + layerStatesToDraw.push(layerState); } } - for (i = 0, ii = layersToDraw.length; i < ii; ++i) { - layer = layersToDraw[i]; - layerRenderer = this.getLayerRenderer(layer); + var layerRenderer; + for (i = 0, ii = layerStatesToDraw.length; i < ii; ++i) { + layerState = layerStatesToDraw[i]; + layerRenderer = this.getLayerRenderer(layerState.layer); goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); - layerState = frameState.layerStates[goog.getUid(layer)]; layerRenderer.prepareFrame(frameState, layerState); } @@ -481,10 +480,9 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); - for (i = 0, ii = layersToDraw.length; i < ii; ++i) { - layer = layersToDraw[i]; - layerState = frameState.layerStates[goog.getUid(layer)]; - layerRenderer = this.getLayerRenderer(layer); + for (i = 0, ii = layerStatesToDraw.length; i < ii; ++i) { + layerState = layerStatesToDraw[i]; + layerRenderer = this.getLayerRenderer(layerState.layer); goog.asserts.assertInstanceof(layerRenderer, ol.renderer.webgl.Layer); layerRenderer.composeFrame(frameState, layerState, context); }