diff --git a/externs/olx.js b/externs/olx.js
index 1789574ec3..714db69548 100644
--- a/externs/olx.js
+++ b/externs/olx.js
@@ -3397,6 +3397,7 @@ olx.layer.TileOptions.prototype.useInterimTilesOnError;
* source: (ol.source.Vector|undefined),
* style: (ol.style.Style|Array.
|ol.style.StyleFunction|undefined),
* updateWhileAnimating: (boolean|undefined),
+ * updateWhileInteracting: (boolean|undefined),
* visible: (boolean|undefined)}}
* @api
*/
@@ -3516,6 +3517,15 @@ olx.layer.VectorOptions.prototype.style;
olx.layer.VectorOptions.prototype.updateWhileAnimating;
+/**
+ * When set to `true`, feature batches will be recreated during interactions.
+ * See also `updateWhileInteracting`. Default is `false`.
+ * @type {boolean|undefined}
+ * @api
+ */
+olx.layer.VectorOptions.prototype.updateWhileInteracting;
+
+
/**
* Visibility. Default is `true` (visible).
* @type {boolean|undefined}
diff --git a/src/ol/layer/vectorlayer.js b/src/ol/layer/vectorlayer.js
index 90d5e8657a..a70da218ef 100644
--- a/src/ol/layer/vectorlayer.js
+++ b/src/ol/layer/vectorlayer.js
@@ -37,6 +37,7 @@ ol.layer.Vector = function(opt_options) {
delete baseOptions.style;
delete baseOptions.renderBuffer;
delete baseOptions.updateWhileAnimating;
+ delete baseOptions.updateWhileInteracting;
goog.base(this, /** @type {olx.layer.LayerOptions} */ (baseOptions));
/**
@@ -69,6 +70,13 @@ ol.layer.Vector = function(opt_options) {
this.updateWhileAnimating_ = goog.isDef(options.updateWhileAnimating) ?
options.updateWhileAnimating : false;
+ /**
+ * @type {boolean}
+ * @private
+ */
+ this.updateWhileInteracting_ = goog.isDef(options.updateWhileInteracting) ?
+ options.updateWhileInteracting : false;
+
};
goog.inherits(ol.layer.Vector, ol.layer.Layer);
@@ -130,6 +138,15 @@ ol.layer.Vector.prototype.getUpdateWhileAnimating = function() {
};
+/**
+ * @return {boolean} Whether the rendered layer should be updated while
+ * interacting.
+ */
+ol.layer.Vector.prototype.getUpdateWhileInteracting = function() {
+ return this.updateWhileInteracting_;
+};
+
+
/**
* @param {function(ol.Feature, ol.Feature):number|null|undefined} renderOrder
* Render order.
diff --git a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js
index a4d72d9047..6b913462da 100644
--- a/src/ol/renderer/canvas/canvasvectorlayerrenderer.js
+++ b/src/ol/renderer/canvas/canvasvectorlayerrenderer.js
@@ -169,9 +169,13 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame =
frameState.attributions, vectorSource.getAttributions());
this.updateLogos(frameState, vectorSource);
- if (!this.dirty_ && (!vectorLayer.getUpdateWhileAnimating() &&
- frameState.viewHints[ol.ViewHint.ANIMATING] ||
- frameState.viewHints[ol.ViewHint.INTERACTING])) {
+ var animating = frameState.viewHints[ol.ViewHint.ANIMATING];
+ var interacting = frameState.viewHints[ol.ViewHint.INTERACTING];
+ var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();
+ var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();
+
+ if (!this.dirty_ && (!updateWhileAnimating && animating) ||
+ (!updateWhileInteracting && interacting)) {
return true;
}
diff --git a/src/ol/renderer/dom/domvectorlayerrenderer.js b/src/ol/renderer/dom/domvectorlayerrenderer.js
index a2c55c5057..9cf5f32dbd 100644
--- a/src/ol/renderer/dom/domvectorlayerrenderer.js
+++ b/src/ol/renderer/dom/domvectorlayerrenderer.js
@@ -230,9 +230,13 @@ ol.renderer.dom.VectorLayer.prototype.prepareFrame =
frameState.attributions, vectorSource.getAttributions());
this.updateLogos(frameState, vectorSource);
- if (!this.dirty_ && (!vectorLayer.getUpdateWhileAnimating() &&
- frameState.viewHints[ol.ViewHint.ANIMATING] ||
- frameState.viewHints[ol.ViewHint.INTERACTING])) {
+ var animating = frameState.viewHints[ol.ViewHint.ANIMATING];
+ var interacting = frameState.viewHints[ol.ViewHint.INTERACTING];
+ var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();
+ var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();
+
+ if (!this.dirty_ && (!updateWhileAnimating && animating) ||
+ (!updateWhileInteracting && interacting)) {
return true;
}
diff --git a/src/ol/renderer/webgl/webglvectorlayerrenderer.js b/src/ol/renderer/webgl/webglvectorlayerrenderer.js
index cfbbaff09f..f12022d915 100644
--- a/src/ol/renderer/webgl/webglvectorlayerrenderer.js
+++ b/src/ol/renderer/webgl/webglvectorlayerrenderer.js
@@ -202,9 +202,13 @@ ol.renderer.webgl.VectorLayer.prototype.prepareFrame =
frameState.attributions, vectorSource.getAttributions());
this.updateLogos(frameState, vectorSource);
- if (!this.dirty_ && (!vectorLayer.getUpdateWhileAnimating() &&
- frameState.viewHints[ol.ViewHint.ANIMATING] ||
- frameState.viewHints[ol.ViewHint.INTERACTING])) {
+ var animating = frameState.viewHints[ol.ViewHint.ANIMATING];
+ var interacting = frameState.viewHints[ol.ViewHint.INTERACTING];
+ var updateWhileAnimating = vectorLayer.getUpdateWhileAnimating();
+ var updateWhileInteracting = vectorLayer.getUpdateWhileInteracting();
+
+ if (!this.dirty_ && (!updateWhileAnimating && animating) ||
+ (!updateWhileInteracting && interacting)) {
return true;
}