Optimize canvas renderer.

Only use setTransform when it's needed (ie. when the view is rotated)
This commit is contained in:
Frederic Junod
2013-04-26 10:24:58 +02:00
parent e7eb07197e
commit b3e5ac2717

View File

@@ -128,16 +128,28 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
image = layerRenderer.getImage();
if (!goog.isNull(image)) {
transform = layerRenderer.getTransform();
context.setTransform(
goog.vec.Mat4.getElement(transform, 0, 0),
goog.vec.Mat4.getElement(transform, 1, 0),
goog.vec.Mat4.getElement(transform, 0, 1),
goog.vec.Mat4.getElement(transform, 1, 1),
goog.vec.Mat4.getElement(transform, 0, 3),
goog.vec.Mat4.getElement(transform, 1, 3));
context.globalAlpha = layerState.opacity;
context.drawImage(image, 0, 0);
// for performance reasons, context.setTransform is only used
// when the view is rotated. see http://jsperf.com/canvas-transform
if (frameState.view2DState.rotation == 0) {
var dx = goog.vec.Mat4.getElement(transform, 0, 3);
var dy = goog.vec.Mat4.getElement(transform, 1, 3);
var dw = image.width * goog.vec.Mat4.getElement(transform, 0, 0);
var dh = image.height * goog.vec.Mat4.getElement(transform, 1, 1);
context.drawImage(image, 0, 0, image.width, image.height,
dx, dy, dw, dh);
} else {
context.setTransform(
goog.vec.Mat4.getElement(transform, 0, 0),
goog.vec.Mat4.getElement(transform, 1, 0),
goog.vec.Mat4.getElement(transform, 0, 1),
goog.vec.Mat4.getElement(transform, 1, 1),
goog.vec.Mat4.getElement(transform, 0, 3),
goog.vec.Mat4.getElement(transform, 1, 3));
context.drawImage(image, 0, 0);
}
}
}