Restore opacity after drawing vector layers

This commit is contained in:
Antoine Abt
2014-08-20 15:34:48 +02:00
parent 42e8fb544a
commit b034e114d6

View File

@@ -93,6 +93,10 @@ ol.renderer.canvas.VectorLayer.prototype.composeFrame =
} else { } else {
replayContext = context; replayContext = context;
} }
// for performance reasons, context.save / context.restore is not used
// to save and restore the transformation matrix and the opacity.
// see http://jsperf.com/context-save-restore-versus-variable
var alpha = replayContext.globalAlpha;
replayContext.globalAlpha = layerState.opacity; replayContext.globalAlpha = layerState.opacity;
replayGroup.replay( replayGroup.replay(
replayContext, frameState.extent, frameState.pixelRatio, transform, replayContext, frameState.extent, frameState.pixelRatio, transform,
@@ -102,6 +106,7 @@ ol.renderer.canvas.VectorLayer.prototype.composeFrame =
this.dispatchRenderEvent(replayContext, frameState, transform); this.dispatchRenderEvent(replayContext, frameState, transform);
context.drawImage(replayContext.canvas, 0, 0); context.drawImage(replayContext.canvas, 0, 0);
} }
replayContext.globalAlpha = alpha;
} }
this.dispatchPostComposeEvent(context, frameState, transform); this.dispatchPostComposeEvent(context, frameState, transform);