From 16957c98339b907e920e48a60736559be7d7a9a6 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Thu, 21 Nov 2013 10:04:19 +0100 Subject: [PATCH] Only recompute pixel coordinates when transform has changed --- src/ol/render/canvas/canvasreplay.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/ol/render/canvas/canvasreplay.js b/src/ol/render/canvas/canvasreplay.js index 17cd203d9a..47b4d51249 100644 --- a/src/ol/render/canvas/canvasreplay.js +++ b/src/ol/render/canvas/canvasreplay.js @@ -6,6 +6,7 @@ goog.provide('ol.render.canvas.ReplayGroup'); goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.object'); +goog.require('goog.vec.Mat4'); goog.require('ol.color'); goog.require('ol.extent'); goog.require('ol.geom.flat'); @@ -13,6 +14,7 @@ goog.require('ol.render.IRender'); goog.require('ol.render.IReplayGroup'); goog.require('ol.style.Fill'); goog.require('ol.style.Stroke'); +goog.require('ol.vec.Mat4'); /** @@ -50,6 +52,12 @@ ol.render.canvas.Replay = function() { */ this.coordinates = []; + /** + * @private + * @type {goog.vec.Mat4.Number} + */ + this.renderedTransform_ = goog.vec.Mat4.createNumber(); + /** * @private * @type {Array.} @@ -95,9 +103,16 @@ ol.render.canvas.Replay.prototype.appendFlatCoordinates = * @param {goog.vec.Mat4.AnyType} transform Transform. */ ol.render.canvas.Replay.prototype.draw = function(context, transform) { - var pixelCoordinates = ol.geom.flat.transform2D( - this.coordinates, 2, transform, this.pixelCoordinates_); - this.pixelCoordinates_ = pixelCoordinates; // FIXME ? + /** @type {Array.} */ + var pixelCoordinates; + if (ol.vec.Mat4.equal2D(transform, this.renderedTransform_)) { + pixelCoordinates = this.pixelCoordinates_; + } else { + pixelCoordinates = ol.geom.flat.transform2D( + this.coordinates, 2, transform, this.pixelCoordinates_); + goog.vec.Mat4.setFromArray(this.renderedTransform_, transform); + goog.asserts.assert(pixelCoordinates === this.pixelCoordinates_); + } var instructions = this.instructions; var i = 0; // instruction index var ii = instructions.length; // end of instructions