Merge pull request #662 from fredj/canvas-draw-image-perf
Possible canvas performance enhancement
This commit is contained in:
@@ -128,16 +128,28 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
|
|||||||
image = layerRenderer.getImage();
|
image = layerRenderer.getImage();
|
||||||
if (!goog.isNull(image)) {
|
if (!goog.isNull(image)) {
|
||||||
transform = layerRenderer.getTransform();
|
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.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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user