Only hit-detect visible features

This commit is contained in:
Éric Lemoine
2014-01-03 15:48:23 +01:00
parent 2342f83a48
commit 1e54947ebb

View File

@@ -30,6 +30,12 @@ ol.renderer.canvas.VectorLayer = function(mapRenderer, vectorLayer) {
*/
this.dirty_ = false;
/**
* @private
* @type {ol.Extent}
*/
this.frameStateExtent_ = ol.extent.createEmpty();
/**
* @private
* @type {number}
@@ -96,14 +102,14 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel =
if (goog.isNull(this.replayGroup_)) {
return undefined;
} else {
goog.asserts.assert(!ol.extent.isEmpty(this.renderedExtent_));
goog.asserts.assert(!ol.extent.isEmpty(this.frameStateExtent_));
goog.asserts.assert(!isNaN(this.renderedResolution_));
goog.asserts.assert(!isNaN(this.renderedRotation_));
var coordinate = this.getMap().getCoordinateFromPixel(pixel);
var layer = this.getLayer();
var renderGeometryFunction = this.getRenderGeometryFunction_();
goog.asserts.assert(goog.isFunction(renderGeometryFunction));
return this.replayGroup_.forEachGeometryAtCoordinate(this.renderedExtent_,
return this.replayGroup_.forEachGeometryAtCoordinate(this.frameStateExtent_,
this.renderedResolution_, this.renderedRotation_, coordinate,
renderGeometryFunction,
/**
@@ -174,6 +180,8 @@ ol.renderer.canvas.VectorLayer.prototype.prepareFrame =
var frameStateResolution = frameState.view2DState.resolution;
var pixelRatio = frameState.devicePixelRatio;
this.frameStateExtent_ = frameStateExtent;
if (!this.dirty_ &&
this.renderedResolution_ == frameStateResolution &&
this.renderedRevision_ == vectorSource.getRevision() &&