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 pixelRatio = frameState.pixelRatio;
var vectorLayerRevision = vectorLayer.getRevision();
var vectorLayerRenderBuffer = vectorLayer.getRenderBuffer();
var vectorLayerRenderOrder = vectorLayer.getRenderOrder();
if (!goog.isDef(vectorLayerRenderOrder)) {
vectorLayerRenderOrder = ol.renderer.vector.defaultOrder;
}
var extent = ol.extent.buffer(frameStateExtent,
vectorLayerRenderBuffer * resolution);
if (!this.dirty_ &&
this.renderedResolution_ == resolution &&
this.renderedRevision_ == vectorLayerRevision &&
this.renderedRenderOrder_ == vectorLayerRenderOrder &&
ol.extent.containsExtent(this.renderedExtent_, frameStateExtent)) {
ol.extent.containsExtent(this.renderedExtent_, extent)) {
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
goog.dispose(this.replayGroup_);
this.replayGroup_ = null;
@@ -247,6 +248,7 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame =
this.renderedResolution_ = resolution;
this.renderedRevision_ = vectorLayerRevision;
this.renderedRenderOrder_ = vectorLayerRenderOrder;
this.renderedExtent_ = extent;
this.replayGroup_ = replayGroup;
return true;

View File

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

View File

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