Merge pull request #3215 from tschaub/rendering
Allow reuse of layer rendering code without creating a map.
This commit is contained in:
@@ -9,7 +9,6 @@ goog.require('ol.dom');
|
|||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.Image');
|
goog.require('ol.layer.Image');
|
||||||
goog.require('ol.proj');
|
goog.require('ol.proj');
|
||||||
goog.require('ol.renderer.Map');
|
|
||||||
goog.require('ol.renderer.canvas.Layer');
|
goog.require('ol.renderer.canvas.Layer');
|
||||||
goog.require('ol.source.ImageVector');
|
goog.require('ol.source.ImageVector');
|
||||||
goog.require('ol.vec.Mat4');
|
goog.require('ol.vec.Mat4');
|
||||||
@@ -19,12 +18,11 @@ goog.require('ol.vec.Mat4');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.canvas.Layer}
|
* @extends {ol.renderer.canvas.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Image} imageLayer Single image layer.
|
* @param {ol.layer.Image} imageLayer Single image layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.ImageLayer = function(mapRenderer, imageLayer) {
|
ol.renderer.canvas.ImageLayer = function(imageLayer) {
|
||||||
|
|
||||||
goog.base(this, mapRenderer, imageLayer);
|
goog.base(this, imageLayer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -88,7 +86,9 @@ ol.renderer.canvas.ImageLayer.prototype.forEachLayerAtPixel =
|
|||||||
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
||||||
// for ImageVector sources use the original hit-detection logic,
|
// for ImageVector sources use the original hit-detection logic,
|
||||||
// so that for example also transparent polygons are detected
|
// so that for example also transparent polygons are detected
|
||||||
var coordinate = this.getMap().getCoordinateFromPixel(pixel);
|
var coordinate = pixel.slice();
|
||||||
|
ol.vec.Mat4.multVec2(
|
||||||
|
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
|
||||||
var hasFeature = this.forEachFeatureAtCoordinate(
|
var hasFeature = this.forEachFeatureAtCoordinate(
|
||||||
coordinate, frameState, goog.functions.TRUE, this);
|
coordinate, frameState, goog.functions.TRUE, this);
|
||||||
|
|
||||||
|
|||||||
@@ -17,12 +17,11 @@ goog.require('ol.vec.Mat4');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.Layer}
|
* @extends {ol.renderer.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Layer} layer Layer.
|
* @param {ol.layer.Layer} layer Layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Layer = function(mapRenderer, layer) {
|
ol.renderer.canvas.Layer = function(layer) {
|
||||||
|
|
||||||
goog.base(this, mapRenderer, layer);
|
goog.base(this, layer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -77,11 +77,11 @@ goog.inherits(ol.renderer.canvas.Map, ol.renderer.Map);
|
|||||||
*/
|
*/
|
||||||
ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) {
|
ol.renderer.canvas.Map.prototype.createLayerRenderer = function(layer) {
|
||||||
if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
|
if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
|
||||||
return new ol.renderer.canvas.ImageLayer(this, layer);
|
return new ol.renderer.canvas.ImageLayer(layer);
|
||||||
} else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
|
} else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
|
||||||
return new ol.renderer.canvas.TileLayer(this, layer);
|
return new ol.renderer.canvas.TileLayer(layer);
|
||||||
} else if (ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) {
|
} else if (ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) {
|
||||||
return new ol.renderer.canvas.VectorLayer(this, layer);
|
return new ol.renderer.canvas.VectorLayer(layer);
|
||||||
} else {
|
} else {
|
||||||
goog.asserts.fail();
|
goog.asserts.fail();
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -13,7 +13,6 @@ goog.require('ol.TileState');
|
|||||||
goog.require('ol.dom');
|
goog.require('ol.dom');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
goog.require('ol.layer.Tile');
|
goog.require('ol.layer.Tile');
|
||||||
goog.require('ol.renderer.Map');
|
|
||||||
goog.require('ol.renderer.canvas.Layer');
|
goog.require('ol.renderer.canvas.Layer');
|
||||||
goog.require('ol.tilecoord');
|
goog.require('ol.tilecoord');
|
||||||
goog.require('ol.vec.Mat4');
|
goog.require('ol.vec.Mat4');
|
||||||
@@ -23,12 +22,11 @@ goog.require('ol.vec.Mat4');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.canvas.Layer}
|
* @extends {ol.renderer.canvas.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Tile} tileLayer Tile layer.
|
* @param {ol.layer.Tile} tileLayer Tile layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.TileLayer = function(mapRenderer, tileLayer) {
|
ol.renderer.canvas.TileLayer = function(tileLayer) {
|
||||||
|
|
||||||
goog.base(this, mapRenderer, tileLayer);
|
goog.base(this, tileLayer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -17,12 +17,11 @@ goog.require('ol.renderer.vector');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.canvas.Layer}
|
* @extends {ol.renderer.canvas.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Vector} vectorLayer Vector layer.
|
* @param {ol.layer.Vector} vectorLayer Vector layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.canvas.VectorLayer = function(mapRenderer, vectorLayer) {
|
ol.renderer.canvas.VectorLayer = function(vectorLayer) {
|
||||||
|
|
||||||
goog.base(this, mapRenderer, vectorLayer);
|
goog.base(this, vectorLayer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -18,14 +18,13 @@ goog.require('ol.vec.Mat4');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.dom.Layer}
|
* @extends {ol.renderer.dom.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Image} imageLayer Image layer.
|
* @param {ol.layer.Image} imageLayer Image layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.dom.ImageLayer = function(mapRenderer, imageLayer) {
|
ol.renderer.dom.ImageLayer = function(imageLayer) {
|
||||||
var target = goog.dom.createElement(goog.dom.TagName.DIV);
|
var target = goog.dom.createElement(goog.dom.TagName.DIV);
|
||||||
target.style.position = 'absolute';
|
target.style.position = 'absolute';
|
||||||
|
|
||||||
goog.base(this, mapRenderer, imageLayer, target);
|
goog.base(this, imageLayer, target);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The last rendered image.
|
* The last rendered image.
|
||||||
|
|||||||
@@ -8,13 +8,12 @@ goog.require('ol.renderer.Layer');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.Layer}
|
* @extends {ol.renderer.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Layer} layer Layer.
|
* @param {ol.layer.Layer} layer Layer.
|
||||||
* @param {!Element} target Target.
|
* @param {!Element} target Target.
|
||||||
*/
|
*/
|
||||||
ol.renderer.dom.Layer = function(mapRenderer, layer, target) {
|
ol.renderer.dom.Layer = function(layer, target) {
|
||||||
|
|
||||||
goog.base(this, mapRenderer, layer);
|
goog.base(this, layer);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @type {!Element}
|
* @type {!Element}
|
||||||
|
|||||||
@@ -112,12 +112,12 @@ ol.renderer.dom.Map.prototype.disposeInternal = function() {
|
|||||||
ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) {
|
ol.renderer.dom.Map.prototype.createLayerRenderer = function(layer) {
|
||||||
var layerRenderer;
|
var layerRenderer;
|
||||||
if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
|
if (ol.ENABLE_IMAGE && layer instanceof ol.layer.Image) {
|
||||||
layerRenderer = new ol.renderer.dom.ImageLayer(this, layer);
|
layerRenderer = new ol.renderer.dom.ImageLayer(layer);
|
||||||
} else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
|
} else if (ol.ENABLE_TILE && layer instanceof ol.layer.Tile) {
|
||||||
layerRenderer = new ol.renderer.dom.TileLayer(this, layer);
|
layerRenderer = new ol.renderer.dom.TileLayer(layer);
|
||||||
} else if (!(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) &&
|
} else if (!(ol.LEGACY_IE_SUPPORT && ol.IS_LEGACY_IE) &&
|
||||||
ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) {
|
ol.ENABLE_VECTOR && layer instanceof ol.layer.Vector) {
|
||||||
layerRenderer = new ol.renderer.dom.VectorLayer(this, layer);
|
layerRenderer = new ol.renderer.dom.VectorLayer(layer);
|
||||||
} else {
|
} else {
|
||||||
goog.asserts.fail();
|
goog.asserts.fail();
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -30,10 +30,9 @@ goog.require('ol.vec.Mat4');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.dom.Layer}
|
* @extends {ol.renderer.dom.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Tile} tileLayer Tile layer.
|
* @param {ol.layer.Tile} tileLayer Tile layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) {
|
ol.renderer.dom.TileLayer = function(tileLayer) {
|
||||||
|
|
||||||
var target = goog.dom.createElement(goog.dom.TagName.DIV);
|
var target = goog.dom.createElement(goog.dom.TagName.DIV);
|
||||||
target.style.position = 'absolute';
|
target.style.position = 'absolute';
|
||||||
@@ -44,7 +43,7 @@ ol.renderer.dom.TileLayer = function(mapRenderer, tileLayer) {
|
|||||||
target.style.height = '100%';
|
target.style.height = '100%';
|
||||||
}
|
}
|
||||||
|
|
||||||
goog.base(this, mapRenderer, tileLayer, target);
|
goog.base(this, tileLayer, target);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -21,10 +21,9 @@ goog.require('ol.vec.Mat4');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.dom.Layer}
|
* @extends {ol.renderer.dom.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Vector} vectorLayer Vector layer.
|
* @param {ol.layer.Vector} vectorLayer Vector layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.dom.VectorLayer = function(mapRenderer, vectorLayer) {
|
ol.renderer.dom.VectorLayer = function(vectorLayer) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -39,7 +38,7 @@ ol.renderer.dom.VectorLayer = function(mapRenderer, vectorLayer) {
|
|||||||
target.style.maxWidth = 'none';
|
target.style.maxWidth = 'none';
|
||||||
target.style.position = 'absolute';
|
target.style.position = 'absolute';
|
||||||
|
|
||||||
goog.base(this, mapRenderer, vectorLayer, target);
|
goog.base(this, vectorLayer, target);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ goog.require('goog.events');
|
|||||||
goog.require('goog.events.EventType');
|
goog.require('goog.events.EventType');
|
||||||
goog.require('goog.functions');
|
goog.require('goog.functions');
|
||||||
goog.require('ol.ImageState');
|
goog.require('ol.ImageState');
|
||||||
|
goog.require('ol.Observable');
|
||||||
goog.require('ol.TileRange');
|
goog.require('ol.TileRange');
|
||||||
goog.require('ol.TileState');
|
goog.require('ol.TileState');
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
@@ -13,27 +14,21 @@ goog.require('ol.source.Source');
|
|||||||
goog.require('ol.source.State');
|
goog.require('ol.source.State');
|
||||||
goog.require('ol.source.Tile');
|
goog.require('ol.source.Tile');
|
||||||
goog.require('ol.tilecoord');
|
goog.require('ol.tilecoord');
|
||||||
|
goog.require('ol.vec.Mat4');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {goog.Disposable}
|
* @extends {ol.Observable}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
|
||||||
* @param {ol.layer.Layer} layer Layer.
|
* @param {ol.layer.Layer} layer Layer.
|
||||||
* @suppress {checkStructDictInheritance}
|
* @suppress {checkStructDictInheritance}
|
||||||
* @struct
|
* @struct
|
||||||
*/
|
*/
|
||||||
ol.renderer.Layer = function(mapRenderer, layer) {
|
ol.renderer.Layer = function(layer) {
|
||||||
|
|
||||||
goog.base(this);
|
goog.base(this);
|
||||||
|
|
||||||
/**
|
|
||||||
* @private
|
|
||||||
* @type {ol.renderer.Map}
|
|
||||||
*/
|
|
||||||
this.mapRenderer_ = mapRenderer;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
* @type {ol.layer.Layer}
|
* @type {ol.layer.Layer}
|
||||||
@@ -42,7 +37,7 @@ ol.renderer.Layer = function(mapRenderer, layer) {
|
|||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
goog.inherits(ol.renderer.Layer, goog.Disposable);
|
goog.inherits(ol.renderer.Layer, ol.Observable);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -67,7 +62,10 @@ ol.renderer.Layer.prototype.forEachFeatureAtCoordinate = goog.nullFunction;
|
|||||||
*/
|
*/
|
||||||
ol.renderer.Layer.prototype.forEachLayerAtPixel =
|
ol.renderer.Layer.prototype.forEachLayerAtPixel =
|
||||||
function(pixel, frameState, callback, thisArg) {
|
function(pixel, frameState, callback, thisArg) {
|
||||||
var coordinate = this.getMap().getCoordinateFromPixel(pixel);
|
var coordinate = pixel.slice();
|
||||||
|
ol.vec.Mat4.multVec2(
|
||||||
|
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
|
||||||
|
|
||||||
var hasFeature = this.forEachFeatureAtCoordinate(
|
var hasFeature = this.forEachFeatureAtCoordinate(
|
||||||
coordinate, frameState, goog.functions.TRUE, this);
|
coordinate, frameState, goog.functions.TRUE, this);
|
||||||
|
|
||||||
@@ -96,24 +94,6 @@ ol.renderer.Layer.prototype.getLayer = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @protected
|
|
||||||
* @return {ol.Map} Map.
|
|
||||||
*/
|
|
||||||
ol.renderer.Layer.prototype.getMap = function() {
|
|
||||||
return this.mapRenderer_.getMap();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @protected
|
|
||||||
* @return {ol.renderer.Map} Map renderer.
|
|
||||||
*/
|
|
||||||
ol.renderer.Layer.prototype.getMapRenderer = function() {
|
|
||||||
return this.mapRenderer_;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle changes in image state.
|
* Handle changes in image state.
|
||||||
* @param {goog.events.Event} event Image change event.
|
* @param {goog.events.Event} event Image change event.
|
||||||
@@ -161,7 +141,7 @@ ol.renderer.Layer.prototype.loadImage = function(image) {
|
|||||||
ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() {
|
ol.renderer.Layer.prototype.renderIfReadyAndVisible = function() {
|
||||||
var layer = this.getLayer();
|
var layer = this.getLayer();
|
||||||
if (layer.getVisible() && layer.getSourceState() == ol.source.State.READY) {
|
if (layer.getVisible() && layer.getSourceState() == ol.source.State.READY) {
|
||||||
this.getMap().render();
|
this.changed();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ goog.provide('ol.renderer.Map');
|
|||||||
goog.require('goog.Disposable');
|
goog.require('goog.Disposable');
|
||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.dispose');
|
goog.require('goog.dispose');
|
||||||
|
goog.require('goog.events');
|
||||||
|
goog.require('goog.events.EventType');
|
||||||
goog.require('goog.functions');
|
goog.require('goog.functions');
|
||||||
goog.require('goog.object');
|
goog.require('goog.object');
|
||||||
goog.require('goog.vec.Mat4');
|
goog.require('goog.vec.Mat4');
|
||||||
@@ -56,6 +58,12 @@ ol.renderer.Map = function(container, map) {
|
|||||||
*/
|
*/
|
||||||
this.layerRenderers_ = {};
|
this.layerRenderers_ = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @private
|
||||||
|
* @type {Object.<string, goog.events.Key>}
|
||||||
|
*/
|
||||||
|
this.layerRendererListeners_ = {};
|
||||||
|
|
||||||
};
|
};
|
||||||
goog.inherits(ol.renderer.Map, goog.Disposable);
|
goog.inherits(ol.renderer.Map, goog.Disposable);
|
||||||
|
|
||||||
@@ -84,9 +92,7 @@ ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) {
|
|||||||
* @protected
|
* @protected
|
||||||
* @return {ol.renderer.Layer} layerRenderer Layer renderer.
|
* @return {ol.renderer.Layer} layerRenderer Layer renderer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.Map.prototype.createLayerRenderer = function(layer) {
|
ol.renderer.Map.prototype.createLayerRenderer = goog.abstractMethod;
|
||||||
return new ol.renderer.Layer(this, layer);
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -256,6 +262,10 @@ ol.renderer.Map.prototype.getLayerRenderer = function(layer) {
|
|||||||
} else {
|
} else {
|
||||||
var layerRenderer = this.createLayerRenderer(layer);
|
var layerRenderer = this.createLayerRenderer(layer);
|
||||||
this.layerRenderers_[layerKey] = layerRenderer;
|
this.layerRenderers_[layerKey] = layerRenderer;
|
||||||
|
this.layerRendererListeners_[layerKey] = goog.events.listen(layerRenderer,
|
||||||
|
goog.events.EventType.CHANGE, this.handleLayerRendererChange_,
|
||||||
|
false, this);
|
||||||
|
|
||||||
return layerRenderer;
|
return layerRenderer;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -295,6 +305,15 @@ ol.renderer.Map.prototype.getMap = function() {
|
|||||||
ol.renderer.Map.prototype.getType = goog.abstractMethod;
|
ol.renderer.Map.prototype.getType = goog.abstractMethod;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handle changes in a layer renderer.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
ol.renderer.Map.prototype.handleLayerRendererChange_ = function() {
|
||||||
|
this.map_.render();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} layerKey Layer key.
|
* @param {string} layerKey Layer key.
|
||||||
* @return {ol.renderer.Layer} Layer renderer.
|
* @return {ol.renderer.Layer} Layer renderer.
|
||||||
@@ -304,6 +323,11 @@ ol.renderer.Map.prototype.removeLayerRendererByKey_ = function(layerKey) {
|
|||||||
goog.asserts.assert(layerKey in this.layerRenderers_);
|
goog.asserts.assert(layerKey in this.layerRenderers_);
|
||||||
var layerRenderer = this.layerRenderers_[layerKey];
|
var layerRenderer = this.layerRenderers_[layerKey];
|
||||||
delete this.layerRenderers_[layerKey];
|
delete this.layerRenderers_[layerKey];
|
||||||
|
|
||||||
|
goog.asserts.assert(layerKey in this.layerRendererListeners_);
|
||||||
|
goog.events.unlistenByKey(this.layerRendererListeners_[layerKey]);
|
||||||
|
delete this.layerRendererListeners_[layerKey];
|
||||||
|
|
||||||
return layerRenderer;
|
return layerRenderer;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ goog.require('ol.webgl.Context');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.webgl.Layer}
|
* @extends {ol.renderer.webgl.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
* @param {ol.renderer.webgl.Map} mapRenderer Map renderer.
|
||||||
* @param {ol.layer.Image} imageLayer Tile layer.
|
* @param {ol.layer.Image} imageLayer Tile layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) {
|
ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) {
|
||||||
@@ -64,7 +64,7 @@ ol.renderer.webgl.ImageLayer.prototype.createTexture_ = function(image) {
|
|||||||
// http://learningwebgl.com/blog/?p=2101
|
// http://learningwebgl.com/blog/?p=2101
|
||||||
|
|
||||||
var imageElement = image.getImage();
|
var imageElement = image.getImage();
|
||||||
var gl = this.getWebGLMapRenderer().getGL();
|
var gl = this.mapRenderer.getGL();
|
||||||
|
|
||||||
return ol.webgl.Context.createTexture(
|
return ol.webgl.Context.createTexture(
|
||||||
gl, imageElement, goog.webgl.CLAMP_TO_EDGE, goog.webgl.CLAMP_TO_EDGE);
|
gl, imageElement, goog.webgl.CLAMP_TO_EDGE, goog.webgl.CLAMP_TO_EDGE);
|
||||||
@@ -100,7 +100,7 @@ ol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtCoordinate =
|
|||||||
ol.renderer.webgl.ImageLayer.prototype.prepareFrame =
|
ol.renderer.webgl.ImageLayer.prototype.prepareFrame =
|
||||||
function(frameState, layerState, context) {
|
function(frameState, layerState, context) {
|
||||||
|
|
||||||
var gl = this.getWebGLMapRenderer().getGL();
|
var gl = this.mapRenderer.getGL();
|
||||||
|
|
||||||
var viewState = frameState.viewState;
|
var viewState = frameState.viewState;
|
||||||
var viewCenter = viewState.center;
|
var viewCenter = viewState.center;
|
||||||
@@ -155,7 +155,7 @@ ol.renderer.webgl.ImageLayer.prototype.prepareFrame =
|
|||||||
if (!goog.isNull(image)) {
|
if (!goog.isNull(image)) {
|
||||||
goog.asserts.assert(!goog.isNull(texture));
|
goog.asserts.assert(!goog.isNull(texture));
|
||||||
|
|
||||||
var canvas = this.getWebGLMapRenderer().getContext().getCanvas();
|
var canvas = this.mapRenderer.getContext().getCanvas();
|
||||||
|
|
||||||
this.updateProjectionMatrix_(canvas.width, canvas.height,
|
this.updateProjectionMatrix_(canvas.width, canvas.height,
|
||||||
viewCenter, viewResolution, viewRotation, image.getExtent());
|
viewCenter, viewResolution, viewRotation, image.getExtent());
|
||||||
@@ -235,7 +235,9 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel =
|
|||||||
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
||||||
// for ImageVector sources use the original hit-detection logic,
|
// for ImageVector sources use the original hit-detection logic,
|
||||||
// so that for example also transparent polygons are detected
|
// so that for example also transparent polygons are detected
|
||||||
var coordinate = this.getMap().getCoordinateFromPixel(pixel);
|
var coordinate = pixel.slice();
|
||||||
|
ol.vec.Mat4.multVec2(
|
||||||
|
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
|
||||||
var hasFeature = this.forEachFeatureAtCoordinate(
|
var hasFeature = this.forEachFeatureAtCoordinate(
|
||||||
coordinate, frameState, goog.functions.TRUE, this);
|
coordinate, frameState, goog.functions.TRUE, this);
|
||||||
|
|
||||||
|
|||||||
@@ -18,12 +18,18 @@ goog.require('ol.webgl.Context');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.Layer}
|
* @extends {ol.renderer.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
* @param {ol.renderer.webgl.Map} mapRenderer Map renderer.
|
||||||
* @param {ol.layer.Layer} layer Layer.
|
* @param {ol.layer.Layer} layer Layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.Layer = function(mapRenderer, layer) {
|
ol.renderer.webgl.Layer = function(mapRenderer, layer) {
|
||||||
|
|
||||||
goog.base(this, mapRenderer, layer);
|
goog.base(this, layer);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @protected
|
||||||
|
* @type {ol.renderer.webgl.Map}
|
||||||
|
*/
|
||||||
|
this.mapRenderer = mapRenderer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @private
|
* @private
|
||||||
@@ -96,8 +102,7 @@ goog.inherits(ol.renderer.webgl.Layer, ol.renderer.Layer);
|
|||||||
ol.renderer.webgl.Layer.prototype.bindFramebuffer =
|
ol.renderer.webgl.Layer.prototype.bindFramebuffer =
|
||||||
function(frameState, framebufferDimension) {
|
function(frameState, framebufferDimension) {
|
||||||
|
|
||||||
var mapRenderer = this.getWebGLMapRenderer();
|
var gl = this.mapRenderer.getGL();
|
||||||
var gl = mapRenderer.getGL();
|
|
||||||
|
|
||||||
if (!goog.isDef(this.framebufferDimension) ||
|
if (!goog.isDef(this.framebufferDimension) ||
|
||||||
this.framebufferDimension != framebufferDimension) {
|
this.framebufferDimension != framebufferDimension) {
|
||||||
@@ -248,15 +253,6 @@ ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @protected
|
|
||||||
* @return {ol.renderer.webgl.Map} MapRenderer.
|
|
||||||
*/
|
|
||||||
ol.renderer.webgl.Layer.prototype.getWebGLMapRenderer = function() {
|
|
||||||
return /** @type {ol.renderer.webgl.Map} */ (this.getMapRenderer());
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return {!goog.vec.Mat4.Number} Matrix.
|
* @return {!goog.vec.Mat4.Number} Matrix.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ goog.require('ol.webgl.Buffer');
|
|||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.webgl.Layer}
|
* @extends {ol.renderer.webgl.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
* @param {ol.renderer.webgl.Map} mapRenderer Map renderer.
|
||||||
* @param {ol.layer.Tile} tileLayer Tile layer.
|
* @param {ol.layer.Tile} tileLayer Tile layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {
|
ol.renderer.webgl.TileLayer = function(mapRenderer, tileLayer) {
|
||||||
@@ -88,8 +88,7 @@ goog.inherits(ol.renderer.webgl.TileLayer, ol.renderer.webgl.Layer);
|
|||||||
* @inheritDoc
|
* @inheritDoc
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {
|
ol.renderer.webgl.TileLayer.prototype.disposeInternal = function() {
|
||||||
var mapRenderer = this.getWebGLMapRenderer();
|
var context = this.mapRenderer.getContext();
|
||||||
var context = mapRenderer.getContext();
|
|
||||||
context.deleteBuffer(this.renderArrayBuffer_);
|
context.deleteBuffer(this.renderArrayBuffer_);
|
||||||
goog.base(this, 'disposeInternal');
|
goog.base(this, 'disposeInternal');
|
||||||
};
|
};
|
||||||
@@ -110,7 +109,7 @@ ol.renderer.webgl.TileLayer.prototype.handleWebGLContextLost = function() {
|
|||||||
ol.renderer.webgl.TileLayer.prototype.prepareFrame =
|
ol.renderer.webgl.TileLayer.prototype.prepareFrame =
|
||||||
function(frameState, layerState, context) {
|
function(frameState, layerState, context) {
|
||||||
|
|
||||||
var mapRenderer = this.getWebGLMapRenderer();
|
var mapRenderer = this.mapRenderer;
|
||||||
var gl = context.getGL();
|
var gl = context.getGL();
|
||||||
|
|
||||||
var viewState = frameState.viewState;
|
var viewState = frameState.viewState;
|
||||||
@@ -337,11 +336,10 @@ ol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel =
|
|||||||
if (goog.isNull(this.framebuffer)) {
|
if (goog.isNull(this.framebuffer)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
var mapSize = this.getMap().getSize();
|
|
||||||
|
|
||||||
var pixelOnMapScaled = [
|
var pixelOnMapScaled = [
|
||||||
pixel[0] / mapSize[0],
|
pixel[0] / frameState.size[0],
|
||||||
(mapSize[1] - pixel[1]) / mapSize[1]];
|
(frameState.size[1] - pixel[1]) / frameState.size[1]];
|
||||||
|
|
||||||
var pixelOnFrameBufferScaled = [0, 0];
|
var pixelOnFrameBufferScaled = [0, 0];
|
||||||
ol.vec.Mat4.multVec2(
|
ol.vec.Mat4.multVec2(
|
||||||
@@ -350,7 +348,7 @@ ol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel =
|
|||||||
pixelOnFrameBufferScaled[0] * this.framebufferDimension,
|
pixelOnFrameBufferScaled[0] * this.framebufferDimension,
|
||||||
pixelOnFrameBufferScaled[1] * this.framebufferDimension];
|
pixelOnFrameBufferScaled[1] * this.framebufferDimension];
|
||||||
|
|
||||||
var gl = this.getWebGLMapRenderer().getContext().getGL();
|
var gl = this.mapRenderer.getContext().getGL();
|
||||||
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
|
gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebuffer);
|
||||||
var imageData = new Uint8Array(4);
|
var imageData = new Uint8Array(4);
|
||||||
gl.readPixels(pixelOnFrameBuffer[0], pixelOnFrameBuffer[1], 1, 1,
|
gl.readPixels(pixelOnFrameBuffer[0], pixelOnFrameBuffer[1], 1, 1,
|
||||||
|
|||||||
@@ -9,13 +9,14 @@ goog.require('ol.layer.Vector');
|
|||||||
goog.require('ol.render.webgl.ReplayGroup');
|
goog.require('ol.render.webgl.ReplayGroup');
|
||||||
goog.require('ol.renderer.vector');
|
goog.require('ol.renderer.vector');
|
||||||
goog.require('ol.renderer.webgl.Layer');
|
goog.require('ol.renderer.webgl.Layer');
|
||||||
|
goog.require('ol.vec.Mat4');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @constructor
|
* @constructor
|
||||||
* @extends {ol.renderer.webgl.Layer}
|
* @extends {ol.renderer.webgl.Layer}
|
||||||
* @param {ol.renderer.Map} mapRenderer Map renderer.
|
* @param {ol.renderer.webgl.Map} mapRenderer Map renderer.
|
||||||
* @param {ol.layer.Vector} vectorLayer Vector layer.
|
* @param {ol.layer.Vector} vectorLayer Vector layer.
|
||||||
*/
|
*/
|
||||||
ol.renderer.webgl.VectorLayer = function(mapRenderer, vectorLayer) {
|
ol.renderer.webgl.VectorLayer = function(mapRenderer, vectorLayer) {
|
||||||
@@ -94,8 +95,7 @@ ol.renderer.webgl.VectorLayer.prototype.composeFrame =
|
|||||||
ol.renderer.webgl.VectorLayer.prototype.disposeInternal = function() {
|
ol.renderer.webgl.VectorLayer.prototype.disposeInternal = function() {
|
||||||
var replayGroup = this.replayGroup_;
|
var replayGroup = this.replayGroup_;
|
||||||
if (!goog.isNull(replayGroup)) {
|
if (!goog.isNull(replayGroup)) {
|
||||||
var mapRenderer = this.getWebGLMapRenderer();
|
var context = this.mapRenderer.getContext();
|
||||||
var context = mapRenderer.getContext();
|
|
||||||
replayGroup.getDeleteResourcesFunction(context)();
|
replayGroup.getDeleteResourcesFunction(context)();
|
||||||
this.replayGroup_ = null;
|
this.replayGroup_ = null;
|
||||||
}
|
}
|
||||||
@@ -111,8 +111,7 @@ ol.renderer.webgl.VectorLayer.prototype.forEachFeatureAtCoordinate =
|
|||||||
if (goog.isNull(this.replayGroup_) || goog.isNull(this.layerState_)) {
|
if (goog.isNull(this.replayGroup_) || goog.isNull(this.layerState_)) {
|
||||||
return undefined;
|
return undefined;
|
||||||
} else {
|
} else {
|
||||||
var mapRenderer = this.getWebGLMapRenderer();
|
var context = this.mapRenderer.getContext();
|
||||||
var context = mapRenderer.getContext();
|
|
||||||
var viewState = frameState.viewState;
|
var viewState = frameState.viewState;
|
||||||
var layer = this.getLayer();
|
var layer = this.getLayer();
|
||||||
var layerState = this.layerState_;
|
var layerState = this.layerState_;
|
||||||
@@ -147,8 +146,7 @@ ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtCoordinate =
|
|||||||
if (goog.isNull(this.replayGroup_) || goog.isNull(this.layerState_)) {
|
if (goog.isNull(this.replayGroup_) || goog.isNull(this.layerState_)) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
var mapRenderer = this.getWebGLMapRenderer();
|
var context = this.mapRenderer.getContext();
|
||||||
var context = mapRenderer.getContext();
|
|
||||||
var viewState = frameState.viewState;
|
var viewState = frameState.viewState;
|
||||||
var layerState = this.layerState_;
|
var layerState = this.layerState_;
|
||||||
return this.replayGroup_.hasFeatureAtCoordinate(coordinate,
|
return this.replayGroup_.hasFeatureAtCoordinate(coordinate,
|
||||||
@@ -165,7 +163,9 @@ ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtCoordinate =
|
|||||||
*/
|
*/
|
||||||
ol.renderer.webgl.VectorLayer.prototype.forEachLayerAtPixel =
|
ol.renderer.webgl.VectorLayer.prototype.forEachLayerAtPixel =
|
||||||
function(pixel, frameState, callback, thisArg) {
|
function(pixel, frameState, callback, thisArg) {
|
||||||
var coordinate = this.getMap().getCoordinateFromPixel(pixel);
|
var coordinate = pixel.slice();
|
||||||
|
ol.vec.Mat4.multVec2(
|
||||||
|
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
|
||||||
var hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState);
|
var hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState);
|
||||||
|
|
||||||
if (hasFeature) {
|
if (hasFeature) {
|
||||||
|
|||||||
@@ -5,10 +5,8 @@ describe('ol.renderer.Layer', function() {
|
|||||||
var eventType = goog.events.EventType.CHANGE;
|
var eventType = goog.events.EventType.CHANGE;
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
var map = new ol.Map({});
|
|
||||||
var mapRenderer = map.getRenderer();
|
|
||||||
var layer = new ol.layer.Layer({});
|
var layer = new ol.layer.Layer({});
|
||||||
renderer = new ol.renderer.Layer(mapRenderer, layer);
|
renderer = new ol.renderer.Layer(layer);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('#loadImage', function() {
|
describe('#loadImage', function() {
|
||||||
@@ -84,6 +82,5 @@ describe('ol.renderer.Layer', function() {
|
|||||||
goog.require('goog.events.EventType');
|
goog.require('goog.events.EventType');
|
||||||
goog.require('ol.Image');
|
goog.require('ol.Image');
|
||||||
goog.require('ol.ImageState');
|
goog.require('ol.ImageState');
|
||||||
goog.require('ol.Map');
|
|
||||||
goog.require('ol.layer.Layer');
|
goog.require('ol.layer.Layer');
|
||||||
goog.require('ol.renderer.Layer');
|
goog.require('ol.renderer.Layer');
|
||||||
|
|||||||
Reference in New Issue
Block a user