Layer renderers should not require a map renderer

This commit is contained in:
Tim Schaub
2015-02-08 07:25:10 -07:00
parent e0f250483d
commit 33c197cf16
16 changed files with 45 additions and 82 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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.

View File

@@ -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}

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -21,21 +21,14 @@ goog.require('ol.vec.Mat4');
/** /**
* @constructor * @constructor
* @extends {ol.Observable} * @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}
@@ -101,15 +94,6 @@ ol.renderer.Layer.prototype.getLayer = function() {
}; };
/**
* @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.

View File

@@ -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());

View File

@@ -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.
*/ */

View File

@@ -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;
@@ -349,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,

View File

@@ -16,7 +16,7 @@ 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) {
@@ -95,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;
} }
@@ -112,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_;
@@ -148,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,

View File

@@ -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');