diff --git a/src/ol/render/renderevent.js b/src/ol/render/renderevent.js index dcb2597ef5..5000d4c56e 100644 --- a/src/ol/render/renderevent.js +++ b/src/ol/render/renderevent.js @@ -35,13 +35,14 @@ ol.render.EventType = { * @param {ol.render.EventType} type Type. * @param {Object=} opt_target Target. * @param {ol.render.IVectorContext=} opt_vectorContext Vector context. + * @param {ol.render.IReplayGroup=} opt_replayGroup Replay group. * @param {olx.FrameState=} opt_frameState Frame state. * @param {?CanvasRenderingContext2D=} opt_context Context. * @param {?ol.webgl.Context=} opt_glContext WebGL Context. */ ol.render.Event = function( - type, opt_target, opt_vectorContext, opt_frameState, opt_context, - opt_glContext) { + type, opt_target, opt_vectorContext, opt_replayGroup, opt_frameState, + opt_context, opt_glContext) { goog.base(this, type, opt_target); @@ -52,6 +53,12 @@ ol.render.Event = function( */ this.vectorContext = opt_vectorContext; + /** + * @type {ol.render.IReplayGroup|undefined} + * @todo api + */ + this.replayGroup = opt_replayGroup; + /** * @type {olx.FrameState|undefined} * @todo api diff --git a/src/ol/renderer/canvas/canvaslayerrenderer.js b/src/ol/renderer/canvas/canvaslayerrenderer.js index 54375fc932..2732f5a1a0 100644 --- a/src/ol/renderer/canvas/canvaslayerrenderer.js +++ b/src/ol/renderer/canvas/canvaslayerrenderer.js @@ -90,8 +90,8 @@ ol.renderer.canvas.Layer.prototype.dispatchComposeEvent_ = var render = new ol.render.canvas.Immediate( context, frameState.pixelRatio, frameState.extent, transform, frameState.view2DState.rotation); - var composeEvent = new ol.render.Event(type, layer, render, frameState, - context, null); + var composeEvent = new ol.render.Event(type, layer, render, null, + frameState, context, null); layer.dispatchEvent(composeEvent); render.flush(); } diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index c262d394e9..18d1f3dd47 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -17,6 +17,7 @@ goog.require('ol.layer.Vector'); goog.require('ol.render.Event'); goog.require('ol.render.EventType'); goog.require('ol.render.canvas.Immediate'); +goog.require('ol.render.canvas.ReplayGroup'); goog.require('ol.renderer.Map'); goog.require('ol.renderer.canvas.ImageLayer'); goog.require('ol.renderer.canvas.Layer'); @@ -97,8 +98,11 @@ ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = var map = this.getMap(); var context = this.context_; if (map.hasListener(type)) { - var view2DState = frameState.view2DState; + var extent = frameState.extent; var pixelRatio = frameState.pixelRatio; + var view2DState = frameState.view2DState; + var resolution = view2DState.resolution; + var rotation = view2DState.rotation; ol.vec.Mat4.makeTransform2D(this.transform_, this.canvas_.width / 2, this.canvas_.height / 2, @@ -106,12 +110,19 @@ ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ = -pixelRatio / view2DState.resolution, -view2DState.rotation, -view2DState.center[0], -view2DState.center[1]); - var render = new ol.render.canvas.Immediate(context, pixelRatio, - frameState.extent, this.transform_, view2DState.rotation); - var composeEvent = new ol.render.Event(type, map, render, frameState, - context, null); + var vectorContext = new ol.render.canvas.Immediate(context, pixelRatio, + extent, this.transform_, rotation); + var tolerance = resolution / (2 * pixelRatio); + var replayGroup = new ol.render.canvas.ReplayGroup(tolerance, extent, + resolution); + var composeEvent = new ol.render.Event(type, map, vectorContext, + replayGroup, frameState, context, null); map.dispatchEvent(composeEvent); - render.flush(); + vectorContext.flush(); + if (!replayGroup.isEmpty()) { + replayGroup.replay(context, extent, pixelRatio, this.transform_, + rotation, {}); + } } }; diff --git a/src/ol/renderer/webgl/webgllayerrenderer.js b/src/ol/renderer/webgl/webgllayerrenderer.js index 707a661abd..823ffcc184 100644 --- a/src/ol/renderer/webgl/webgllayerrenderer.js +++ b/src/ol/renderer/webgl/webgllayerrenderer.js @@ -239,7 +239,7 @@ ol.renderer.webgl.Layer.prototype.dispatchComposeEvent_ = if (layer.hasListener(type)) { var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio); var composeEvent = new ol.render.Event( - type, layer, render, frameState, null, context); + type, layer, render, null, frameState, null, context); layer.dispatchEvent(composeEvent); } }; diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 2b8074ee29..ecb2c222fe 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -269,7 +269,7 @@ ol.renderer.webgl.Map.prototype.dispatchComposeEvent_ = var context = this.getContext(); var render = new ol.render.webgl.Immediate(context, frameState.pixelRatio); var composeEvent = new ol.render.Event( - type, map, render, frameState, null, context); + type, map, render, null, frameState, null, context); map.dispatchEvent(composeEvent); } };