Add frameState to postcompose event and minimise calls to getTransform

This commit is contained in:
Tom Payne
2013-11-11 10:10:48 +01:00
parent 756944a2e9
commit ea0f8d1f8e
4 changed files with 33 additions and 16 deletions

View File

@@ -64,27 +64,28 @@ ol.renderer.canvas.Layer.prototype.composeFrame =
}
}
// FIXME should be able to avoid call to getTransform here if no postcompose
// FIXME listeners
var transform = this.getTransform(frameState);
this.dispatchPostComposeEvent(context, frameState.extent, transform);
this.dispatchPostComposeEvent(context, frameState);
};
/**
* @param {CanvasRenderingContext2D} context Context.
* @param {ol.Extent} extent Extent.
* @param {goog.vec.Mat4.AnyType} transform Transform.
* @param {ol.FrameState} frameState Frame state.
* @param {goog.vec.Mat4.AnyType=} opt_transform Transform.
* @protected
*/
ol.renderer.canvas.Layer.prototype.dispatchPostComposeEvent =
function(context, extent, transform) {
function(context, frameState, opt_transform) {
var layer = this.getLayer();
if (layer.hasListener(ol.render.RenderEventType.POSTCOMPOSE)) {
var render = new ol.render.canvas.Immediate(context, extent, transform);
var transform = goog.isDef(opt_transform) ?
opt_transform : this.getTransform(frameState);
var render = new ol.render.canvas.Immediate(context, frameState.extent,
transform);
var postComposeEvent = new ol.render.RenderEvent(
ol.render.RenderEventType.POSTCOMPOSE, layer, render, context, null);
ol.render.RenderEventType.POSTCOMPOSE, layer, render, frameState,
context, null);
layer.dispatchEvent(postComposeEvent);
}
};

View File

@@ -130,7 +130,8 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) {
var render = new ol.render.canvas.Immediate(
context, frameState.extent, frameState.coordinateToPixelMatrix);
var postComposeEvent = new ol.render.RenderEvent(
ol.render.RenderEventType.POSTCOMPOSE, map, render, context, null);
ol.render.RenderEventType.POSTCOMPOSE, map, render, frameState, context,
null);
map.dispatchEvent(postComposeEvent);
}

View File

@@ -54,17 +54,17 @@ goog.inherits(ol.renderer.canvas.VectorLayer, ol.renderer.canvas.Layer);
ol.renderer.canvas.VectorLayer.prototype.composeFrame =
function(frameState, layerState, context) {
// FIXME should be able to avoid call to getTransform here if no postcompose
// FIXME listeners or replay group
var transform = this.getTransform(frameState);
/** @type {goog.vec.Mat4.AnyType|undefined} */
var transform;
var replayGroup = this.replayGroup_;
if (!goog.isNull(replayGroup)) {
transform = this.getTransform(frameState);
context.globalAlpha = layerState.opacity;
replayGroup.draw(context, frameState.extent, transform);
}
this.dispatchPostComposeEvent(context, frameState.extent, transform);
this.dispatchPostComposeEvent(context, frameState, transform);
};