Refactor to a more convenient internal API

This commit is contained in:
Andreas Hocevar
2016-06-22 23:41:00 +02:00
parent cf7ff841a7
commit 6b4ee42c90
34 changed files with 497 additions and 554 deletions
@@ -1,7 +1,7 @@
goog.provide('ol.renderer.canvas.ImageLayer');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.functions');
goog.require('ol.ImageBase');
goog.require('ol.ViewHint');
@@ -30,13 +30,13 @@ ol.renderer.canvas.ImageLayer = function(imageLayer) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.imageTransform_ = ol.matrix.create();
this.imageTransform_ = ol.transform.create();
/**
* @private
* @type {?ol.Matrix}
* @type {?ol.Transform}
*/
this.imageTransformInv_ = null;
@@ -82,9 +82,8 @@ ol.renderer.canvas.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fr
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
// for ImageVector sources use the original hit-detection logic,
// so that for example also transparent polygons are detected
var coordinate = pixel.slice();
ol.matrix.multVec2(
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
var coordinate = ol.transform.apply(
frameState.pixelToCoordinateTransform, pixel.slice());
var hasFeature = this.forEachFeatureAtCoordinate(
coordinate, frameState, ol.functions.TRUE, this);
@@ -96,8 +95,7 @@ ol.renderer.canvas.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fr
} else {
// for all other image sources directly check the image
if (!this.imageTransformInv_) {
this.imageTransformInv_ = ol.matrix.create();
ol.matrix.invert(this.imageTransform_, this.imageTransformInv_);
this.imageTransformInv_ = ol.transform.invert(this.imageTransform_.slice());
}
var pixelOnCanvas =
@@ -189,11 +187,12 @@ ol.renderer.canvas.ImageLayer.prototype.prepareFrame = function(frameState, laye
var imagePixelRatio = image.getPixelRatio();
var scale = pixelRatio * imageResolution /
(viewResolution * imagePixelRatio);
ol.matrix.makeTransform(this.imageTransform_,
var transform = ol.transform.reset(this.imageTransform_);
ol.transform.translate(transform,
pixelRatio * frameState.size[0] / 2,
pixelRatio * frameState.size[1] / 2,
scale, scale,
0,
pixelRatio * frameState.size[1] / 2);
ol.transform.scale(transform, scale, scale);
ol.transform.translate(transform,
imagePixelRatio * (imageExtent[0] - viewCenter[0]) / imageResolution,
imagePixelRatio * (viewCenter[1] - imageExtent[3]) / imageResolution);
this.imageTransformInv_ = null;
+23 -29
View File
@@ -1,7 +1,7 @@
goog.provide('ol.renderer.canvas.Layer');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.extent');
goog.require('ol.layer.Layer');
goog.require('ol.render.Event');
@@ -22,9 +22,9 @@ ol.renderer.canvas.Layer = function(layer) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.transform_ = ol.matrix.create();
this.transform_ = ol.transform.create();
};
ol.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer);
@@ -57,14 +57,10 @@ ol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerStat
var bottomRight = ol.extent.getBottomRight(extent);
var bottomLeft = ol.extent.getBottomLeft(extent);
ol.matrix.multVec2(frameState.coordinateToPixelMatrix,
topLeft, topLeft);
ol.matrix.multVec2(frameState.coordinateToPixelMatrix,
topRight, topRight);
ol.matrix.multVec2(frameState.coordinateToPixelMatrix,
bottomRight, bottomRight);
ol.matrix.multVec2(frameState.coordinateToPixelMatrix,
bottomLeft, bottomLeft);
ol.transform.apply(frameState.coordinateToPixelTransform, topLeft);
ol.transform.apply(frameState.coordinateToPixelTransform, topRight);
ol.transform.apply(frameState.coordinateToPixelTransform, bottomRight);
ol.transform.apply(frameState.coordinateToPixelTransform, bottomLeft);
context.save();
ol.render.canvas.rotateAtOffset(context, -rotation, width / 2, height / 2);
@@ -108,7 +104,7 @@ ol.renderer.canvas.Layer.prototype.composeFrame = function(frameState, layerStat
* @param {ol.render.EventType} type Event type.
* @param {CanvasRenderingContext2D} context Context.
* @param {olx.FrameState} frameState Frame state.
* @param {ol.Matrix=} opt_transform Transform.
* @param {ol.Transform=} opt_transform Transform.
* @private
*/
ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, context, frameState, opt_transform) {
@@ -134,7 +130,7 @@ ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = function(type, contex
/**
* @param {CanvasRenderingContext2D} context Context.
* @param {olx.FrameState} frameState Frame state.
* @param {ol.Matrix=} opt_transform Transform.
* @param {ol.Transform=} opt_transform Transform.
* @protected
*/
ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = function(context, frameState, opt_transform) {
@@ -146,7 +142,7 @@ ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent = function(context,
/**
* @param {CanvasRenderingContext2D} context Context.
* @param {olx.FrameState} frameState Frame state.
* @param {ol.Matrix=} opt_transform Transform.
* @param {ol.Transform=} opt_transform Transform.
* @protected
*/
ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = function(context, frameState, opt_transform) {
@@ -158,7 +154,7 @@ ol.renderer.canvas.Layer.prototype.dispatchPreComposeEvent = function(context, f
/**
* @param {CanvasRenderingContext2D} context Context.
* @param {olx.FrameState} frameState Frame state.
* @param {ol.Matrix=} opt_transform Transform.
* @param {ol.Transform=} opt_transform Transform.
* @protected
*/
ol.renderer.canvas.Layer.prototype.dispatchRenderEvent = function(context, frameState, opt_transform) {
@@ -174,7 +170,7 @@ ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod;
/**
* @return {!ol.Matrix} Image transform.
* @return {!ol.Transform} Image transform.
*/
ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod;
@@ -183,19 +179,19 @@ ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod;
* @param {olx.FrameState} frameState Frame state.
* @param {number} offsetX Offset on the x-axis in view coordinates.
* @protected
* @return {!ol.Matrix} Transform.
* @return {!ol.Transform} Transform.
*/
ol.renderer.canvas.Layer.prototype.getTransform = function(frameState, offsetX) {
var viewState = frameState.viewState;
var pixelRatio = frameState.pixelRatio;
return ol.matrix.makeTransform(this.transform_,
pixelRatio * frameState.size[0] / 2,
pixelRatio * frameState.size[1] / 2,
pixelRatio / viewState.resolution,
-pixelRatio / viewState.resolution,
-viewState.rotation,
-viewState.center[0] + offsetX,
-viewState.center[1]);
var transform = ol.transform.reset(this.transform_);
ol.transform.translate(transform,
pixelRatio * frameState.size[0] / 2, pixelRatio * frameState.size[1] / 2);
ol.transform.scale(transform,
pixelRatio / viewState.resolution, -pixelRatio / viewState.resolution);
ol.transform.rotate(transform, -viewState.rotation);
return ol.transform.translate(transform,
-viewState.center[0] + offsetX, -viewState.center[1]);
};
@@ -209,13 +205,11 @@ ol.renderer.canvas.Layer.prototype.prepareFrame = goog.abstractMethod;
/**
* @param {ol.Pixel} pixelOnMap Pixel.
* @param {ol.Matrix} imageTransformInv The transformation matrix
* @param {ol.Transform} imageTransformInv The transformation matrix
* to convert from a map pixel to a canvas pixel.
* @return {ol.Pixel} The pixel.
* @protected
*/
ol.renderer.canvas.Layer.prototype.getPixelOnCanvas = function(pixelOnMap, imageTransformInv) {
var pixelOnCanvas = [0, 0];
ol.matrix.multVec2(imageTransformInv, pixelOnMap, pixelOnCanvas);
return pixelOnCanvas;
return ol.transform.apply(imageTransformInv, pixelOnMap.slice());
};
+11 -8
View File
@@ -3,7 +3,7 @@
goog.provide('ol.renderer.canvas.Map');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol');
goog.require('ol.RendererType');
goog.require('ol.array');
@@ -62,9 +62,9 @@ ol.renderer.canvas.Map = function(container, map) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.transform_ = ol.matrix.create();
this.transform_ = ol.transform.create();
};
ol.inherits(ol.renderer.canvas.Map, ol.renderer.Map);
@@ -117,16 +117,19 @@ ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = function(type, frameSta
/**
* @param {olx.FrameState} frameState Frame state.
* @protected
* @return {!ol.Matrix} Transform.
* @return {!ol.Transform} Transform.
*/
ol.renderer.canvas.Map.prototype.getTransform = function(frameState) {
var pixelRatio = frameState.pixelRatio;
var viewState = frameState.viewState;
var resolution = viewState.resolution;
return ol.matrix.makeTransform(this.transform_,
this.canvas_.width / 2, this.canvas_.height / 2,
pixelRatio / resolution, -pixelRatio / resolution,
-viewState.rotation,
var transform = ol.transform.reset(this.transform_);
ol.transform.translate(transform,
this.canvas_.width / 2, this.canvas_.height / 2);
ol.transform.scale(transform,
pixelRatio / resolution, -pixelRatio / resolution);
ol.transform.rotate(transform, -viewState.rotation);
return ol.transform.translate(transform,
-viewState.center[0], -viewState.center[1]);
};
@@ -3,7 +3,7 @@
goog.provide('ol.renderer.canvas.TileLayer');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.TileRange');
goog.require('ol.TileState');
goog.require('ol.array');
@@ -50,9 +50,9 @@ ol.renderer.canvas.TileLayer = function(tileLayer) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.imageTransform_ = ol.matrix.create();
this.imageTransform_ = ol.transform.create();
/**
* @protected
@@ -326,9 +326,11 @@ ol.renderer.canvas.TileLayer.prototype.renderTileImages = function(context, fram
if (hasRenderListeners) {
var dX = drawOffsetX - offsetX / drawScale + offsetX;
var dY = drawOffsetY - offsetY / drawScale + offsetY;
var imageTransform = ol.matrix.makeTransform(this.imageTransform_,
drawSize / 2 - dX, drawSize / 2 - dY, pixelScale, -pixelScale,
-rotation, -center[0] + dX / pixelScale, -center[1] - dY / pixelScale);
var imageTransform = ol.transform.reset(this.imageTransform_);
ol.transform.translate(imageTransform, drawSize / 2 - dX, drawSize / 2 - dY);
ol.transform.scale(imageTransform, pixelScale, -pixelScale);
ol.transform.rotate(imageTransform, -rotation);
ol.transform.translate(imageTransform, -center[0] + dX / pixelScale, -center[1] - dY / pixelScale);
this.dispatchRenderEvent(renderContext, frameState, imageTransform);
}
if (rotation || hasRenderListeners) {
@@ -2,7 +2,7 @@ goog.provide('ol.renderer.canvas.VectorTileLayer');
goog.require('goog.asserts');
goog.require('ol.events');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.Feature');
goog.require('ol.VectorTile');
goog.require('ol.array');
@@ -56,9 +56,9 @@ ol.renderer.canvas.VectorTileLayer = function(layer) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.tmpTransform_ = ol.matrix.create();
this.tmpTransform_ = ol.transform.create();
// Use lower resolution for pure vector rendering. Closest resolution otherwise.
this.zDirection =
@@ -147,11 +147,12 @@ ol.renderer.canvas.VectorTileLayer.prototype.renderTileReplays_ = function(
if (pixelSpace) {
origin = ol.extent.getTopLeft(tileExtent);
tileTransform = ol.matrix.makeTransform(this.tmpTransform_,
offsetX, offsetY,
pixelScale * tilePixelResolution,
pixelScale * tilePixelResolution,
rotation,
tileTransform = ol.transform.reset(this.tmpTransform_);
ol.transform.translate(tileTransform, offsetX, offsetY);
ol.transform.scale(tileTransform,
pixelScale * tilePixelResolution, pixelScale * tilePixelResolution);
ol.transform.rotate(tileTransform, rotation);
ol.transform.translate(tileTransform,
(origin[0] - center[0]) / tilePixelResolution,
(center[1] - origin[1]) / tilePixelResolution);
} else {
@@ -425,20 +426,16 @@ ol.renderer.canvas.VectorTileLayer.prototype.renderTileImage_ = function(
var tilePixelResolution = tileResolution / tilePixelRatio;
var tileExtent = tileGrid.getTileCoordExtent(
tile.getTileCoord(), this.tmpExtent);
var tileTransform;
var tileTransform = ol.transform.reset(this.tmpTransform_);
if (pixelSpace) {
tileTransform = ol.matrix.makeTransform(this.tmpTransform_,
0, 0,
pixelScale * tilePixelResolution, pixelScale * tilePixelResolution,
0,
ol.transform.scale(tileTransform,
pixelScale * tilePixelResolution, pixelScale * tilePixelResolution);
ol.transform.translate(tileTransform,
-tileSize[0] * tilePixelRatio / 2, -tileSize[1] * tilePixelRatio / 2);
} else {
var tileCenter = ol.extent.getCenter(tileExtent);
tileTransform = ol.matrix.makeTransform(this.tmpTransform_,
0, 0,
pixelScale, -pixelScale,
0,
-tileCenter[0], -tileCenter[1]);
ol.transform.scale(tileTransform, pixelScale, -pixelScale);
ol.transform.translate(tileTransform, -tileCenter[0], -tileCenter[1]);
}
replayState.replayGroup.replay(tileContext, pixelRatio,
+13 -11
View File
@@ -1,7 +1,7 @@
goog.provide('ol.renderer.dom.ImageLayer');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.ImageBase');
goog.require('ol.ViewHint');
goog.require('ol.dom');
@@ -31,9 +31,9 @@ ol.renderer.dom.ImageLayer = function(imageLayer) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.transform_ = ol.matrix.create();
this.transform_ = ol.transform.create();
};
ol.inherits(ol.renderer.dom.ImageLayer, ol.renderer.dom.Layer);
@@ -117,11 +117,13 @@ ol.renderer.dom.ImageLayer.prototype.prepareFrame = function(frameState, layerSt
if (image) {
var imageExtent = image.getExtent();
var imageResolution = image.getResolution();
var transform = ol.matrix.create();
ol.matrix.makeTransform(transform,
frameState.size[0] / 2, frameState.size[1] / 2,
imageResolution / viewResolution, imageResolution / viewResolution,
viewRotation,
var transform = ol.transform.create();
ol.transform.translate(transform,
frameState.size[0] / 2, frameState.size[1] / 2);
ol.transform.scale(transform,
imageResolution / viewResolution, imageResolution / viewResolution);
ol.transform.rotate(transform, viewRotation);
ol.transform.translate(transform,
(imageExtent[0] - viewCenter[0]) / imageResolution,
(viewCenter[1] - imageExtent[3]) / imageResolution);
if (image != this.image_) {
@@ -145,12 +147,12 @@ ol.renderer.dom.ImageLayer.prototype.prepareFrame = function(frameState, layerSt
/**
* @param {ol.Matrix} transform Transform.
* @param {ol.Transform} transform Transform.
* @private
*/
ol.renderer.dom.ImageLayer.prototype.setTransform_ = function(transform) {
if (!ol.matrix.equals(transform, this.transform_)) {
if (!ol.array.equals(transform, this.transform_)) {
ol.dom.transformElement2D(this.target, transform, 6);
ol.matrix.setFromArray(this.transform_, transform);
ol.transform.setFromArray(this.transform_, transform);
}
};
+9 -9
View File
@@ -4,7 +4,7 @@ goog.require('goog.asserts');
goog.require('ol.events');
goog.require('ol.events.Event');
goog.require('ol.events.EventType');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol');
goog.require('ol.RendererType');
goog.require('ol.array');
@@ -49,9 +49,9 @@ ol.renderer.dom.Map = function(container, map) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.transform_ = ol.matrix.create();
this.transform_ = ol.transform.create();
/**
* @type {!Element}
@@ -123,12 +123,12 @@ ol.renderer.dom.Map.prototype.dispatchComposeEvent_ = function(type, frameState)
var context = this.context_;
var canvas = context.canvas;
ol.matrix.makeTransform(this.transform_,
canvas.width / 2,
canvas.height / 2,
pixelRatio / viewState.resolution,
-pixelRatio / viewState.resolution,
-viewState.rotation,
var transform = ol.transform.reset(this.transform_);
ol.transform.translate(transform, canvas.width / 2, canvas.height / 2);
ol.transform.scale(transform,
pixelRatio / viewState.resolution, -pixelRatio / viewState.resolution);
ol.transform.rotate(transform, -viewState.rotation);
ol.transform.translate(transform,
-viewState.center[0], -viewState.center[1]);
var vectorContext = new ol.render.canvas.Immediate(context, pixelRatio,
extent, this.transform_, rotation);
+14 -14
View File
@@ -4,7 +4,7 @@
goog.provide('ol.renderer.dom.TileLayer');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol');
goog.require('ol.TileRange');
goog.require('ol.TileState');
@@ -199,7 +199,7 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame = function(frameState, layerSta
tileLayerZKeys.sort(ol.array.numberSafeCompareFunction);
var i, ii, j, origin, resolution;
var transform = ol.matrix.create();
var transform = ol.transform.create();
for (i = 0, ii = tileLayerZKeys.length; i < ii; ++i) {
tileLayerZKey = tileLayerZKeys[i];
tileLayerZ = this.tileLayerZs_[tileLayerZKey];
@@ -210,13 +210,13 @@ ol.renderer.dom.TileLayer.prototype.prepareFrame = function(frameState, layerSta
}
resolution = tileLayerZ.getResolution();
origin = tileLayerZ.getOrigin();
ol.matrix.makeTransform(transform,
frameState.size[0] / 2, frameState.size[1] / 2,
resolution / viewState.resolution,
resolution / viewState.resolution,
viewState.rotation,
(origin[0] - center[0]) / resolution,
(center[1] - origin[1]) / resolution);
ol.transform.translate(ol.transform.reset(transform),
frameState.size[0] / 2, frameState.size[1] / 2);
ol.transform.scale(transform,
resolution / viewState.resolution, resolution / viewState.resolution);
ol.transform.rotate(transform, viewState.rotation);
ol.transform.translate(transform,
(origin[0] - center[0]) / resolution, (center[1] - origin[1]) / resolution);
tileLayerZ.setTransform(transform);
if (tileLayerZKey in newTileLayerZKeys) {
for (j = tileLayerZKey - 1; j >= 0; --j) {
@@ -313,9 +313,9 @@ ol.renderer.dom.TileLayerZ_ = function(tileGrid, tileCoordOrigin) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.transform_ = ol.matrix.create();
this.transform_ = ol.transform.create();
/**
* @private
@@ -436,11 +436,11 @@ ol.renderer.dom.TileLayerZ_.prototype.removeTilesOutsideExtent = function(extent
/**
* @param {ol.Matrix} transform Transform.
* @param {ol.Transform} transform Transform.
*/
ol.renderer.dom.TileLayerZ_.prototype.setTransform = function(transform) {
if (!ol.matrix.equals(transform, this.transform_)) {
if (!ol.array.equals(transform, this.transform_)) {
ol.dom.transformElement2D(this.target, transform, 6);
ol.matrix.setFromArray(this.transform_, transform);
ol.transform.setFromArray(this.transform_, transform);
}
};
+16 -17
View File
@@ -2,7 +2,7 @@ goog.provide('ol.renderer.dom.VectorLayer');
goog.require('goog.asserts');
goog.require('ol.events');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.ViewHint');
goog.require('ol.dom');
goog.require('ol.extent');
@@ -75,15 +75,15 @@ ol.renderer.dom.VectorLayer = function(vectorLayer) {
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.transform_ = ol.matrix.create();
this.transform_ = ol.transform.create();
/**
* @private
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.elementTransform_ = ol.matrix.create();
this.elementTransform_ = ol.transform.create();
};
ol.inherits(ol.renderer.dom.VectorLayer, ol.renderer.dom.Layer);
@@ -119,13 +119,13 @@ ol.renderer.dom.VectorLayer.prototype.composeFrame = function(frameState, layerS
var imageWidth = viewWidth * pixelRatio;
var imageHeight = viewHeight * pixelRatio;
var transform = ol.matrix.makeTransform(this.transform_,
pixelRatio * viewWidth / 2,
pixelRatio * viewHeight / 2,
pixelRatio / viewResolution,
-pixelRatio / viewResolution,
-viewRotation,
-viewCenter[0], -viewCenter[1]);
var transform = ol.transform.reset(this.transform_);
ol.transform.translate(transform,
pixelRatio * viewWidth / 2, pixelRatio * viewHeight / 2);
ol.transform.scale(transform,
pixelRatio / viewResolution, -pixelRatio / viewResolution);
ol.transform.rotate(transform, -viewRotation);
ol.transform.translate(transform, -viewCenter[0], -viewCenter[1]);
var context = this.context_;
@@ -133,10 +133,9 @@ ol.renderer.dom.VectorLayer.prototype.composeFrame = function(frameState, layerS
context.canvas.width = imageWidth;
context.canvas.height = imageHeight;
var elementTransform = ol.matrix.makeTransform(this.elementTransform_,
0, 0,
1 / pixelRatio, 1 / pixelRatio,
0,
var elementTransform = ol.transform.reset(this.elementTransform_);
ol.transform.scale(elementTransform, 1 / pixelRatio, 1 / pixelRatio);
ol.transform.translate(elementTransform,
-(imageWidth - viewWidth) / 2 * pixelRatio,
-(imageHeight - viewHeight) / 2 * pixelRatio);
ol.dom.transformElement2D(context.canvas, elementTransform, 6);
@@ -161,7 +160,7 @@ ol.renderer.dom.VectorLayer.prototype.composeFrame = function(frameState, layerS
/**
* @param {ol.render.EventType} type Event type.
* @param {olx.FrameState} frameState Frame state.
* @param {ol.Matrix} transform Transform.
* @param {ol.Transform} transform Transform.
* @private
*/
ol.renderer.dom.VectorLayer.prototype.dispatchEvent_ = function(type, frameState, transform) {
+3 -4
View File
@@ -10,7 +10,7 @@ goog.require('ol.Observable');
goog.require('ol.TileRange');
goog.require('ol.TileState');
goog.require('ol.layer.Layer');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.source.State');
goog.require('ol.source.Tile');
@@ -57,9 +57,8 @@ ol.renderer.Layer.prototype.forEachFeatureAtCoordinate = ol.nullFunction;
* @template S,T
*/
ol.renderer.Layer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
var coordinate = pixel.slice();
ol.matrix.multVec2(
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
var coordinate = ol.transform.apply(
frameState.pixelToCoordinateTransform, pixel.slice());
var hasFeature = this.forEachFeatureAtCoordinate(
coordinate, frameState, ol.functions.TRUE, this);
+13 -11
View File
@@ -2,7 +2,7 @@ goog.provide('ol.RendererType');
goog.provide('ol.renderer.Map');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol');
goog.require('ol.Disposable');
goog.require('ol.events');
@@ -65,17 +65,19 @@ ol.inherits(ol.renderer.Map, ol.Disposable);
*/
ol.renderer.Map.prototype.calculateMatrices2D = function(frameState) {
var viewState = frameState.viewState;
var coordinateToPixelMatrix = frameState.coordinateToPixelMatrix;
goog.asserts.assert(coordinateToPixelMatrix,
'frameState has a coordinateToPixelMatrix');
ol.matrix.makeTransform(coordinateToPixelMatrix,
frameState.size[0] / 2, frameState.size[1] / 2,
1 / viewState.resolution, -1 / viewState.resolution,
-viewState.rotation,
var coordinateToPixelTransform = frameState.coordinateToPixelTransform;
var pixelToCoordinateTransform = frameState.pixelToCoordinateTransform;
goog.asserts.assert(coordinateToPixelTransform,
'frameState has a coordinateToPixelTransform');
ol.transform.translate(ol.transform.reset(coordinateToPixelTransform),
frameState.size[0] / 2, frameState.size[1] / 2);
ol.transform.scale(coordinateToPixelTransform,
1 / viewState.resolution, -1 / viewState.resolution);
ol.transform.rotate(coordinateToPixelTransform, -viewState.rotation);
ol.transform.translate(coordinateToPixelTransform,
-viewState.center[0], -viewState.center[1]);
var inverted = ol.matrix.invert(
coordinateToPixelMatrix, frameState.pixelToCoordinateMatrix);
goog.asserts.assert(inverted, 'matrix could be inverted');
ol.transform.invert(
ol.transform.setFromArray(pixelToCoordinateTransform, coordinateToPixelTransform));
};
@@ -1,7 +1,7 @@
goog.provide('ol.renderer.webgl.ImageLayer');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('goog.webgl');
goog.require('ol.ImageBase');
goog.require('ol.ViewHint');
@@ -40,7 +40,7 @@ ol.renderer.webgl.ImageLayer = function(mapRenderer, imageLayer) {
/**
* @private
* @type {?ol.Matrix}
* @type {?ol.Transform}
*/
this.hitTransformationMatrix_ = null;
@@ -164,9 +164,9 @@ ol.renderer.webgl.ImageLayer.prototype.prepareFrame = function(frameState, layer
// Translate and scale to flip the Y coord.
var texCoordMatrix = this.texCoordMatrix;
ol.matrix.makeIdentity(texCoordMatrix);
ol.matrix.scale(texCoordMatrix, 1, -1);
ol.matrix.translate(texCoordMatrix, 0, -1);
ol.transform.reset(texCoordMatrix);
ol.transform.scale(texCoordMatrix, 1, -1);
ol.transform.translate(texCoordMatrix, 0, -1);
this.image_ = image;
this.texture = texture;
@@ -196,18 +196,18 @@ ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ = function(canvas
var canvasExtentHeight = canvasHeight * viewResolution;
var projectionMatrix = this.projectionMatrix;
ol.matrix.makeIdentity(projectionMatrix);
ol.matrix.scale(projectionMatrix,
ol.transform.reset(projectionMatrix);
ol.transform.scale(projectionMatrix,
pixelRatio * 2 / canvasExtentWidth,
pixelRatio * 2 / canvasExtentHeight);
ol.matrix.rotate(projectionMatrix, -viewRotation);
ol.matrix.translate(projectionMatrix,
ol.transform.rotate(projectionMatrix, -viewRotation);
ol.transform.translate(projectionMatrix,
imageExtent[0] - viewCenter[0],
imageExtent[1] - viewCenter[1]);
ol.matrix.scale(projectionMatrix,
ol.transform.scale(projectionMatrix,
(imageExtent[2] - imageExtent[0]) / 2,
(imageExtent[3] - imageExtent[1]) / 2);
ol.matrix.translate(projectionMatrix, 1, 1);
ol.transform.translate(projectionMatrix, 1, 1);
};
@@ -233,9 +233,8 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fra
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
// for ImageVector sources use the original hit-detection logic,
// so that for example also transparent polygons are detected
var coordinate = pixel.slice();
ol.matrix.multVec2(
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
var coordinate = ol.transform.apply(
frameState.pixelToCoordinateTransform, pixel.slice());
var hasFeature = this.forEachFeatureAtCoordinate(
coordinate, frameState, ol.functions.TRUE, this);
@@ -253,9 +252,8 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fra
frameState.size, imageSize);
}
var pixelOnFrameBuffer = [0, 0];
ol.matrix.multVec2(
this.hitTransformationMatrix_, pixel, pixelOnFrameBuffer);
var pixelOnFrameBuffer = ol.transform.apply(
this.hitTransformationMatrix_, pixel.slice());
if (pixelOnFrameBuffer[0] < 0 || pixelOnFrameBuffer[0] > imageSize[0] ||
pixelOnFrameBuffer[1] < 0 || pixelOnFrameBuffer[1] > imageSize[1]) {
@@ -286,35 +284,31 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel = function(pixel, fra
* pixel on the map.
* @param {ol.Size} mapSize The map size.
* @param {ol.Size} imageSize The image size.
* @return {ol.Matrix} The transformation matrix.
* @return {ol.Transform} The transformation matrix.
* @private
*/
ol.renderer.webgl.ImageLayer.prototype.getHitTransformationMatrix_ = function(mapSize, imageSize) {
// the first matrix takes a map pixel, flips the y-axis and scales to
// a range between -1 ... 1
var mapCoordMatrix = ol.matrix.create();
ol.matrix.translate(mapCoordMatrix, -1, -1);
ol.matrix.scale(mapCoordMatrix, 2 / mapSize[0], 2 / mapSize[1]);
ol.matrix.translate(mapCoordMatrix, 0, mapSize[1]);
ol.matrix.scale(mapCoordMatrix, 1, -1);
var mapCoordTransform = ol.transform.create();
ol.transform.translate(mapCoordTransform, -1, -1);
ol.transform.scale(mapCoordTransform, 2 / mapSize[0], 2 / mapSize[1]);
ol.transform.translate(mapCoordTransform, 0, mapSize[1]);
ol.transform.scale(mapCoordTransform, 1, -1);
// the second matrix is the inverse of the projection matrix used in the
// shader for drawing
var projectionMatrixInv = ol.matrix.create();
ol.matrix.invert(this.projectionMatrix, projectionMatrixInv);
var projectionMatrixInv = ol.transform.invert(this.projectionMatrix.slice());
// the third matrix scales to the image dimensions and flips the y-axis again
var imageCoordMatrix = ol.matrix.create();
ol.matrix.translate(imageCoordMatrix, 0, imageSize[1]);
ol.matrix.scale(imageCoordMatrix, 1, -1);
ol.matrix.scale(imageCoordMatrix, imageSize[0] / 2, imageSize[1] / 2);
ol.matrix.translate(imageCoordMatrix, 1, 1);
var transform = ol.transform.create();
ol.transform.translate(transform, 0, imageSize[1]);
ol.transform.scale(transform, 1, -1);
ol.transform.scale(transform, imageSize[0] / 2, imageSize[1] / 2);
ol.transform.translate(transform, 1, 1);
var transformMatrix = ol.matrix.create();
ol.matrix.multiply(
imageCoordMatrix, projectionMatrixInv, transformMatrix);
ol.matrix.multiply(
transformMatrix, mapCoordMatrix, transformMatrix);
ol.transform.multiply(transform, projectionMatrixInv);
ol.transform.multiply(transform, mapCoordTransform);
return transformMatrix;
return transform;
};
+7 -7
View File
@@ -2,7 +2,7 @@ goog.provide('ol.renderer.webgl.Layer');
goog.require('goog.webgl');
goog.require('ol.layer.Layer');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.render.Event');
goog.require('ol.render.EventType');
goog.require('ol.render.webgl.Immediate');
@@ -63,15 +63,15 @@ ol.renderer.webgl.Layer = function(mapRenderer, layer) {
/**
* @protected
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.texCoordMatrix = ol.matrix.create();
this.texCoordMatrix = ol.transform.create();
/**
* @protected
* @type {ol.Matrix}
* @type {ol.Transform}
*/
this.projectionMatrix = ol.matrix.create();
this.projectionMatrix = ol.transform.create();
/**
* @private
@@ -209,7 +209,7 @@ ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = function(type, context
/**
* @return {!ol.Matrix} Matrix.
* @return {!ol.Transform} Matrix.
*/
ol.renderer.webgl.Layer.prototype.getTexCoordMatrix = function() {
return this.texCoordMatrix;
@@ -225,7 +225,7 @@ ol.renderer.webgl.Layer.prototype.getTexture = function() {
/**
* @return {!ol.Matrix} Matrix.
* @return {!ol.Transform} Matrix.
*/
ol.renderer.webgl.Layer.prototype.getProjectionMatrix = function() {
return this.projectionMatrix;
@@ -4,7 +4,7 @@
goog.provide('ol.renderer.webgl.TileLayer');
goog.require('goog.asserts');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('goog.webgl');
goog.require('ol.TileRange');
goog.require('ol.TileState');
@@ -351,21 +351,21 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS
this.updateLogos(frameState, tileSource);
var texCoordMatrix = this.texCoordMatrix;
ol.matrix.makeIdentity(texCoordMatrix);
ol.matrix.translate(texCoordMatrix,
ol.transform.reset(texCoordMatrix);
ol.transform.translate(texCoordMatrix,
(center[0] - framebufferExtent[0]) /
(framebufferExtent[2] - framebufferExtent[0]),
(center[1] - framebufferExtent[1]) /
(framebufferExtent[3] - framebufferExtent[1]));
if (viewState.rotation !== 0) {
ol.matrix.rotate(texCoordMatrix, viewState.rotation);
ol.transform.rotate(texCoordMatrix, viewState.rotation);
}
ol.matrix.scale(texCoordMatrix,
ol.transform.scale(texCoordMatrix,
frameState.size[0] * viewState.resolution /
(framebufferExtent[2] - framebufferExtent[0]),
frameState.size[1] * viewState.resolution /
(framebufferExtent[3] - framebufferExtent[1]));
ol.matrix.translate(texCoordMatrix, -0.5, -0.5);
ol.transform.translate(texCoordMatrix, -0.5, -0.5);
return true;
};
@@ -383,9 +383,8 @@ ol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel = function(pixel, fram
pixel[0] / frameState.size[0],
(frameState.size[1] - pixel[1]) / frameState.size[1]];
var pixelOnFrameBufferScaled = [0, 0];
ol.matrix.multVec2(
this.texCoordMatrix, pixelOnMapScaled, pixelOnFrameBufferScaled);
var pixelOnFrameBufferScaled = ol.transform.apply(
this.texCoordMatrix, pixelOnMapScaled.slice());
var pixelOnFrameBuffer = [
pixelOnFrameBufferScaled[0] * this.framebufferDimension,
pixelOnFrameBufferScaled[1] * this.framebufferDimension];
@@ -5,7 +5,7 @@ goog.require('ol.events');
goog.require('ol.ViewHint');
goog.require('ol.extent');
goog.require('ol.layer.Vector');
goog.require('ol.matrix');
goog.require('ol.transform');
goog.require('ol.render.webgl.ReplayGroup');
goog.require('ol.renderer.vector');
goog.require('ol.renderer.webgl.Layer');
@@ -154,9 +154,8 @@ ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtCoordinate = function(coordi
* @inheritDoc
*/
ol.renderer.webgl.VectorLayer.prototype.forEachLayerAtPixel = function(pixel, frameState, callback, thisArg) {
var coordinate = pixel.slice();
ol.matrix.multVec2(
frameState.pixelToCoordinateMatrix, coordinate, coordinate);
var coordinate = ol.transform.apply(
frameState.pixelToCoordinateTransform, pixel.slice());
var hasFeature = this.hasFeatureAtCoordinate(coordinate, frameState);
if (hasFeature) {