Change "recreate batch" strategy

Only recreate batch when the (buffered) rendered extent contains the **buffered** viewport extent.
This commit is contained in:
Éric Lemoine
2014-12-18 13:13:48 +01:00
parent 8e8fc9977c
commit f1bf782133
3 changed files with 21 additions and 15 deletions

View File

@@ -180,23 +180,24 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame =
var resolution = viewState.resolution; var resolution = viewState.resolution;
var pixelRatio = frameState.pixelRatio; var pixelRatio = frameState.pixelRatio;
var vectorLayerRevision = vectorLayer.getRevision(); var vectorLayerRevision = vectorLayer.getRevision();
var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();
var vectorLayerRenderOrder = vectorLayer.getRenderOrder(); var vectorLayerRenderOrder = vectorLayer.getRenderOrder();
if (!goog.isDef(vectorLayerRenderOrder)) { if (!goog.isDef(vectorLayerRenderOrder)) {
vectorLayerRenderOrder = ol.renderer.vector.defaultOrder; vectorLayerRenderOrder = ol.renderer.vector.defaultOrder;
} }
var extent = ol.extent.buffer(frameStateExtent,
vectorLayerRenderBuffer * resolution);
if (!this.dirty_ && if (!this.dirty_ &&
this.renderedResolution_ == resolution && this.renderedResolution_ == resolution &&
this.renderedRevision_ == vectorLayerRevision && this.renderedRevision_ == vectorLayerRevision &&
this.renderedRenderOrder_ == vectorLayerRenderOrder && this.renderedRenderOrder_ == vectorLayerRenderOrder &&
ol.extent.containsExtent(this.renderedExtent_, frameStateExtent)) { ol.extent.containsExtent(this.renderedExtent_, extent)) {
return true; return true;
} }
var extent = this.renderedExtent_;
var renderBuffer = vectorLayer.getRenderBuffer();
ol.extent.buffer(frameStateExtent, renderBuffer * resolution, extent);
// FIXME dispose of old replayGroup in post render // FIXME dispose of old replayGroup in post render
goog.dispose(this.replayGroup_); goog.dispose(this.replayGroup_);
this.replayGroup_ = null; this.replayGroup_ = null;
@@ -247,6 +248,7 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame =
this.renderedResolution_ = resolution; this.renderedResolution_ = resolution;
this.renderedRevision_ = vectorLayerRevision; this.renderedRevision_ = vectorLayerRevision;
this.renderedRenderOrder_ = vectorLayerRenderOrder; this.renderedRenderOrder_ = vectorLayerRenderOrder;
this.renderedExtent_ = extent;
this.replayGroup_ = replayGroup; this.replayGroup_ = replayGroup;
return true; return true;

View File

@@ -220,23 +220,24 @@ ol.renderer.dom.VectorLayer.prototype.prepareFrame =
var resolution = viewState.resolution; var resolution = viewState.resolution;
var pixelRatio = frameState.pixelRatio; var pixelRatio = frameState.pixelRatio;
var vectorLayerRevision = vectorLayer.getRevision(); var vectorLayerRevision = vectorLayer.getRevision();
var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();
var vectorLayerRenderOrder = vectorLayer.getRenderOrder(); var vectorLayerRenderOrder = vectorLayer.getRenderOrder();
if (!goog.isDef(vectorLayerRenderOrder)) { if (!goog.isDef(vectorLayerRenderOrder)) {
vectorLayerRenderOrder = ol.renderer.vector.defaultOrder; vectorLayerRenderOrder = ol.renderer.vector.defaultOrder;
} }
var extent = ol.extent.buffer(frameStateExtent,
vectorLayerRenderBuffer * resolution);
if (!this.dirty_ && if (!this.dirty_ &&
this.renderedResolution_ == resolution && this.renderedResolution_ == resolution &&
this.renderedRevision_ == vectorLayerRevision && this.renderedRevision_ == vectorLayerRevision &&
this.renderedRenderOrder_ == vectorLayerRenderOrder && this.renderedRenderOrder_ == vectorLayerRenderOrder &&
ol.extent.containsExtent(this.renderedExtent_, frameStateExtent)) { ol.extent.containsExtent(this.renderedExtent_, extent)) {
return true; return true;
} }
var extent = this.renderedExtent_;
var renderBuffer = vectorLayer.getRenderBuffer();
ol.extent.buffer(frameStateExtent, renderBuffer * resolution, extent);
// FIXME dispose of old replayGroup in post render // FIXME dispose of old replayGroup in post render
goog.dispose(this.replayGroup_); goog.dispose(this.replayGroup_);
this.replayGroup_ = null; this.replayGroup_ = null;
@@ -287,6 +288,7 @@ ol.renderer.dom.VectorLayer.prototype.prepareFrame =
this.renderedResolution_ = resolution; this.renderedResolution_ = resolution;
this.renderedRevision_ = vectorLayerRevision; this.renderedRevision_ = vectorLayerRevision;
this.renderedRenderOrder_ = vectorLayerRenderOrder; this.renderedRenderOrder_ = vectorLayerRenderOrder;
this.renderedExtent_ = extent;
this.replayGroup_ = replayGroup; this.replayGroup_ = replayGroup;
return true; return true;

View File

@@ -139,23 +139,24 @@ ol.renderer.webgl.VectorLayer.prototype.prepareFrame =
var resolution = viewState.resolution; var resolution = viewState.resolution;
var pixelRatio = frameState.pixelRatio; var pixelRatio = frameState.pixelRatio;
var vectorLayerRevision = vectorLayer.getRevision(); var vectorLayerRevision = vectorLayer.getRevision();
var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();
var vectorLayerRenderOrder = vectorLayer.getRenderOrder(); var vectorLayerRenderOrder = vectorLayer.getRenderOrder();
if (!goog.isDef(vectorLayerRenderOrder)) { if (!goog.isDef(vectorLayerRenderOrder)) {
vectorLayerRenderOrder = ol.renderer.vector.defaultOrder; vectorLayerRenderOrder = ol.renderer.vector.defaultOrder;
} }
var extent = ol.extent.buffer(frameStateExtent,
vectorLayerRenderBuffer * resolution);
if (!this.dirty_ && if (!this.dirty_ &&
this.renderedResolution_ == resolution && this.renderedResolution_ == resolution &&
this.renderedRevision_ == vectorLayerRevision && this.renderedRevision_ == vectorLayerRevision &&
this.renderedRenderOrder_ == vectorLayerRenderOrder && this.renderedRenderOrder_ == vectorLayerRenderOrder &&
ol.extent.containsExtent(this.renderedExtent_, frameStateExtent)) { ol.extent.containsExtent(this.renderedExtent_, extent)) {
return true; return true;
} }
var extent = this.renderedExtent_;
var renderBuffer = vectorLayer.getRenderBuffer();
ol.extent.buffer(frameStateExtent, renderBuffer * resolution, extent);
if (!goog.isNull(this.replayGroup_)) { if (!goog.isNull(this.replayGroup_)) {
frameState.postRenderFunctions.push( frameState.postRenderFunctions.push(
this.replayGroup_.getDeleteResourcesFunction(context)); this.replayGroup_.getDeleteResourcesFunction(context));
@@ -206,6 +207,7 @@ ol.renderer.webgl.VectorLayer.prototype.prepareFrame =
this.renderedResolution_ = resolution; this.renderedResolution_ = resolution;
this.renderedRevision_ = vectorLayerRevision; this.renderedRevision_ = vectorLayerRevision;
this.renderedRenderOrder_ = vectorLayerRenderOrder; this.renderedRenderOrder_ = vectorLayerRenderOrder;
this.renderedExtent_ = extent;
this.replayGroup_ = replayGroup; this.replayGroup_ = replayGroup;
return true; return true;