diff --git a/src/ol/renderer/canvas/canvaslayerrenderer.js b/src/ol/renderer/canvas/canvaslayerrenderer.js index fba0964d89..8696ea6bca 100644 --- a/src/ol/renderer/canvas/canvaslayerrenderer.js +++ b/src/ol/renderer/canvas/canvaslayerrenderer.js @@ -16,7 +16,15 @@ goog.require('ol.renderer.Layer'); * @param {ol.layer.Layer} layer Layer. */ ol.renderer.canvas.Layer = function(mapRenderer, layer) { + goog.base(this, mapRenderer, layer); + + /** + * @private + * @type {!goog.vec.Mat4.Number} + */ + this.transform_ = goog.vec.Mat4.createNumber(); + }; goog.inherits(ol.renderer.canvas.Layer, ol.renderer.Layer); @@ -87,3 +95,24 @@ ol.renderer.canvas.Layer.prototype.getImage = goog.abstractMethod; * @return {!goog.vec.Mat4.Number} Image transform. */ ol.renderer.canvas.Layer.prototype.getImageTransform = goog.abstractMethod; + + +/** + * @param {ol.FrameState} frameState Frame state. + * @protected + * @return {!goog.vec.Mat4.Number} Transform. + */ +ol.renderer.canvas.Layer.prototype.getTransform = function(frameState) { + var view2DState = frameState.view2DState; + var center = view2DState.center; + var resolution = view2DState.resolution; + var rotation = view2DState.rotation; + var size = frameState.size; + var transform = this.transform_; + goog.vec.Mat4.makeIdentity(transform); + goog.vec.Mat4.translate(transform, size[0] / 2, size[1] / 2, 0); + goog.vec.Mat4.scale(transform, 1 / resolution, -1 / resolution, 1); + goog.vec.Mat4.rotateZ(transform, -rotation); + goog.vec.Mat4.translate(transform, -center[0], -center[1], 0); + return transform; +}; diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js index 866db90dfd..9c07594bde 100644 --- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js +++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js @@ -20,12 +20,6 @@ ol.renderer.canvas.VectorLayer = function(mapRenderer, vectorLayer) { goog.base(this, mapRenderer, vectorLayer); - /** - * @private - * @type {!goog.vec.Mat4.Number} - */ - this.transform_ = goog.vec.Mat4.createNumber(); - /** * @private * @type {number} @@ -60,26 +54,9 @@ goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer); ol.renderer.canvas.VectorLayer.prototype.composeFrame = function(frameState, layerState, context) { - var view2DState = frameState.view2DState; - var viewCenter = view2DState.center; - var viewResolution = view2DState.resolution; - var viewRotation = view2DState.rotation; - - var transform = this.transform_; - goog.vec.Mat4.makeIdentity(transform); - goog.vec.Mat4.translate(transform, - frameState.size[0] / 2, - frameState.size[1] / 2, - 0); - goog.vec.Mat4.scale(transform, - 1 / viewResolution, - -1 / viewResolution, - 1); - goog.vec.Mat4.rotateZ(transform, -viewRotation); - goog.vec.Mat4.translate(transform, - -viewCenter[0], - -viewCenter[1], - 0); + // FIXME should be able to avoid call to getTransform here if no postcompose + // FIXME listeners or replay group + var transform = this.getTransform(frameState); var replayGroup = this.replayGroup_; if (!goog.isNull(replayGroup)) {