Merge pull request #3061 from elemoine/render-bug2
Add a renderBuffer option to ol.layer.Vector
This commit is contained in:
@@ -37,6 +37,13 @@ ol.layer.Vector = function(opt_options) {
|
||||
delete baseOptions.style;
|
||||
goog.base(this, /** @type {olx.layer.LayerOptions} */ (baseOptions));
|
||||
|
||||
/**
|
||||
* @type {number}
|
||||
* @private
|
||||
*/
|
||||
this.renderBuffer_ = goog.isDef(options.renderBuffer) ?
|
||||
options.renderBuffer : 100;
|
||||
|
||||
/**
|
||||
* User provided style.
|
||||
* @type {ol.style.Style|Array.<ol.style.Style>|ol.style.StyleFunction}
|
||||
@@ -57,6 +64,14 @@ ol.layer.Vector = function(opt_options) {
|
||||
goog.inherits(ol.layer.Vector, ol.layer.Layer);
|
||||
|
||||
|
||||
/**
|
||||
* @return {number|undefined} Render buffer.
|
||||
*/
|
||||
ol.layer.Vector.prototype.getRenderBuffer = function() {
|
||||
return this.renderBuffer_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {function(ol.Feature, ol.Feature): number|null|undefined} Render
|
||||
* order.
|
||||
|
||||
@@ -120,12 +120,6 @@ ol.render.canvas.Replay = function(tolerance, maxExtent, resolution) {
|
||||
*/
|
||||
this.pixelCoordinates_ = [];
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {ol.Extent}
|
||||
*/
|
||||
this.extent_ = ol.extent.createEmpty();
|
||||
|
||||
/**
|
||||
* @private
|
||||
* @type {!goog.vec.Mat4.Number}
|
||||
@@ -620,14 +614,6 @@ ol.render.canvas.Replay.prototype.getBufferedMaxExtent = function() {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Extent} Extent.
|
||||
*/
|
||||
ol.render.canvas.Replay.prototype.getExtent = function() {
|
||||
return this.extent_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
@@ -775,7 +761,6 @@ ol.render.canvas.ImageReplay.prototype.drawPointGeometry =
|
||||
goog.asserts.assert(goog.isDef(this.rotation_));
|
||||
goog.asserts.assert(goog.isDef(this.scale_));
|
||||
goog.asserts.assert(goog.isDef(this.width_));
|
||||
ol.extent.extend(this.extent_, pointGeometry.getExtent());
|
||||
this.beginGeometry(pointGeometry, feature);
|
||||
var flatCoordinates = pointGeometry.getFlatCoordinates();
|
||||
var stride = pointGeometry.getStride();
|
||||
@@ -819,7 +804,6 @@ ol.render.canvas.ImageReplay.prototype.drawMultiPointGeometry =
|
||||
goog.asserts.assert(goog.isDef(this.rotation_));
|
||||
goog.asserts.assert(goog.isDef(this.scale_));
|
||||
goog.asserts.assert(goog.isDef(this.width_));
|
||||
ol.extent.extend(this.extent_, multiPointGeometry.getExtent());
|
||||
this.beginGeometry(multiPointGeometry, feature);
|
||||
var flatCoordinates = multiPointGeometry.getFlatCoordinates();
|
||||
var stride = multiPointGeometry.getStride();
|
||||
@@ -1036,7 +1020,6 @@ ol.render.canvas.LineStringReplay.prototype.drawLineStringGeometry =
|
||||
if (!goog.isDef(strokeStyle) || !goog.isDef(lineWidth)) {
|
||||
return;
|
||||
}
|
||||
ol.extent.extend(this.extent_, lineStringGeometry.getExtent());
|
||||
this.setStrokeStyle_();
|
||||
this.beginGeometry(lineStringGeometry, feature);
|
||||
this.hitDetectionInstructions.push(
|
||||
@@ -1065,7 +1048,6 @@ ol.render.canvas.LineStringReplay.prototype.drawMultiLineStringGeometry =
|
||||
if (!goog.isDef(strokeStyle) || !goog.isDef(lineWidth)) {
|
||||
return;
|
||||
}
|
||||
ol.extent.extend(this.extent_, multiLineStringGeometry.getExtent());
|
||||
this.setStrokeStyle_();
|
||||
this.beginGeometry(multiLineStringGeometry, feature);
|
||||
this.hitDetectionInstructions.push(
|
||||
@@ -1243,7 +1225,6 @@ ol.render.canvas.PolygonReplay.prototype.drawCircleGeometry =
|
||||
if (goog.isDef(strokeStyle)) {
|
||||
goog.asserts.assert(goog.isDef(state.lineWidth));
|
||||
}
|
||||
ol.extent.extend(this.extent_, circleGeometry.getExtent());
|
||||
this.setFillStrokeStyles_();
|
||||
this.beginGeometry(circleGeometry, feature);
|
||||
// always fill the circle for hit detection
|
||||
@@ -1295,7 +1276,6 @@ ol.render.canvas.PolygonReplay.prototype.drawPolygonGeometry =
|
||||
if (goog.isDef(strokeStyle)) {
|
||||
goog.asserts.assert(goog.isDef(state.lineWidth));
|
||||
}
|
||||
ol.extent.extend(this.extent_, polygonGeometry.getExtent());
|
||||
this.setFillStrokeStyles_();
|
||||
this.beginGeometry(polygonGeometry, feature);
|
||||
// always fill the polygon for hit detection
|
||||
@@ -1331,7 +1311,6 @@ ol.render.canvas.PolygonReplay.prototype.drawMultiPolygonGeometry =
|
||||
if (goog.isDef(strokeStyle)) {
|
||||
goog.asserts.assert(goog.isDef(state.lineWidth));
|
||||
}
|
||||
ol.extent.extend(this.extent_, multiPolygonGeometry.getExtent());
|
||||
this.setFillStrokeStyles_();
|
||||
this.beginGeometry(multiPolygonGeometry, feature);
|
||||
// always fill the multi-polygon for hit detection
|
||||
@@ -1576,8 +1555,6 @@ ol.render.canvas.TextReplay.prototype.drawText =
|
||||
goog.isNull(this.textStrokeState_))) {
|
||||
return;
|
||||
}
|
||||
ol.extent.extendFlatCoordinates(
|
||||
this.extent_, flatCoordinates, offset, end, stride);
|
||||
if (!goog.isNull(this.textFillState_)) {
|
||||
this.setReplayFillState_(this.textFillState_);
|
||||
}
|
||||
@@ -1866,7 +1843,6 @@ ol.render.canvas.ReplayGroup.prototype.finish = function() {
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @param {number} resolution Resolution.
|
||||
* @param {number} rotation Rotation.
|
||||
* @param {ol.Coordinate} coordinate Coordinate.
|
||||
@@ -1876,8 +1852,7 @@ ol.render.canvas.ReplayGroup.prototype.finish = function() {
|
||||
* @template T
|
||||
*/
|
||||
ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function(
|
||||
extent, resolution, rotation, coordinate,
|
||||
skippedFeaturesHash, callback) {
|
||||
resolution, rotation, coordinate, skippedFeaturesHash, callback) {
|
||||
|
||||
var transform = this.hitDetectionTransform_;
|
||||
ol.vec.Mat4.makeTransform2D(transform, 0.5, 0.5,
|
||||
@@ -1887,8 +1862,8 @@ ol.render.canvas.ReplayGroup.prototype.forEachGeometryAtPixel = function(
|
||||
var context = this.hitDetectionContext_;
|
||||
context.clearRect(0, 0, 1, 1);
|
||||
|
||||
return this.replayHitDetection_(context, extent, transform,
|
||||
rotation, skippedFeaturesHash,
|
||||
return this.replayHitDetection_(context, transform, rotation,
|
||||
skippedFeaturesHash,
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @return {?} Callback result.
|
||||
@@ -1939,14 +1914,13 @@ ol.render.canvas.ReplayGroup.prototype.isEmpty = function() {
|
||||
|
||||
/**
|
||||
* @param {CanvasRenderingContext2D} context Context.
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @param {number} pixelRatio Pixel ratio.
|
||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||
* @param {number} viewRotation View rotation.
|
||||
* @param {Object} skippedFeaturesHash Ids of features to skip
|
||||
*/
|
||||
ol.render.canvas.ReplayGroup.prototype.replay = function(
|
||||
context, extent, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
|
||||
context, pixelRatio, transform, viewRotation, skippedFeaturesHash) {
|
||||
|
||||
/** @type {Array.<number>} */
|
||||
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
|
||||
@@ -1974,8 +1948,7 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(
|
||||
replays = this.replaysByZIndex_[zs[i].toString()];
|
||||
for (j = 0, jj = ol.render.REPLAY_ORDER.length; j < jj; ++j) {
|
||||
replay = replays[ol.render.REPLAY_ORDER[j]];
|
||||
if (goog.isDef(replay) &&
|
||||
ol.extent.intersects(extent, replay.getExtent())) {
|
||||
if (goog.isDef(replay)) {
|
||||
replay.replay(context, pixelRatio, transform, viewRotation,
|
||||
skippedFeaturesHash);
|
||||
}
|
||||
@@ -1989,7 +1962,6 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(
|
||||
/**
|
||||
* @private
|
||||
* @param {CanvasRenderingContext2D} context Context.
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @param {goog.vec.Mat4.Number} transform Transform.
|
||||
* @param {number} viewRotation View rotation.
|
||||
* @param {Object} skippedFeaturesHash Ids of features to skip
|
||||
@@ -1998,7 +1970,7 @@ ol.render.canvas.ReplayGroup.prototype.replay = function(
|
||||
* @template T
|
||||
*/
|
||||
ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
|
||||
context, extent, transform, viewRotation, skippedFeaturesHash,
|
||||
context, transform, viewRotation, skippedFeaturesHash,
|
||||
featureCallback) {
|
||||
/** @type {Array.<number>} */
|
||||
var zs = goog.array.map(goog.object.getKeys(this.replaysByZIndex_), Number);
|
||||
@@ -2009,8 +1981,7 @@ ol.render.canvas.ReplayGroup.prototype.replayHitDetection_ = function(
|
||||
replays = this.replaysByZIndex_[zs[i].toString()];
|
||||
for (j = ol.render.REPLAY_ORDER.length - 1; j >= 0; --j) {
|
||||
replay = replays[ol.render.REPLAY_ORDER[j]];
|
||||
if (goog.isDef(replay) &&
|
||||
ol.extent.intersects(extent, replay.getExtent())) {
|
||||
if (goog.isDef(replay)) {
|
||||
result = replay.replayHitDetection(context, transform, viewRotation,
|
||||
skippedFeaturesHash, featureCallback);
|
||||
if (result) {
|
||||
|
||||
@@ -54,12 +54,6 @@ ol.render.webgl.ImageReplay = function(tolerance, maxExtent) {
|
||||
*/
|
||||
this.origin_ = ol.extent.getCenter(maxExtent);
|
||||
|
||||
/**
|
||||
* @type {ol.Extent}
|
||||
* @private
|
||||
*/
|
||||
this.extent_ = ol.extent.createEmpty();
|
||||
|
||||
/**
|
||||
* @type {Array.<number>}
|
||||
* @private
|
||||
@@ -383,7 +377,6 @@ ol.render.webgl.ImageReplay.prototype.drawMultiLineStringGeometry =
|
||||
*/
|
||||
ol.render.webgl.ImageReplay.prototype.drawMultiPointGeometry =
|
||||
function(multiPointGeometry, feature) {
|
||||
ol.extent.extend(this.extent_, multiPointGeometry.getExtent());
|
||||
var flatCoordinates = multiPointGeometry.getFlatCoordinates();
|
||||
var stride = multiPointGeometry.getStride();
|
||||
this.drawCoordinates_(
|
||||
@@ -403,7 +396,6 @@ ol.render.webgl.ImageReplay.prototype.drawMultiPolygonGeometry =
|
||||
*/
|
||||
ol.render.webgl.ImageReplay.prototype.drawPointGeometry =
|
||||
function(pointGeometry, feature) {
|
||||
ol.extent.extend(this.extent_, pointGeometry.getExtent());
|
||||
var flatCoordinates = pointGeometry.getFlatCoordinates();
|
||||
var stride = pointGeometry.getStride();
|
||||
this.drawCoordinates_(
|
||||
@@ -498,21 +490,12 @@ ol.render.webgl.ImageReplay.prototype.finish = function(context) {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @return {ol.Extent} Extent.
|
||||
*/
|
||||
ol.render.webgl.ImageReplay.prototype.getExtent = function() {
|
||||
return this.extent_;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.webgl.Context} context Context.
|
||||
* @param {ol.Coordinate} center Center.
|
||||
* @param {number} resolution Resolution.
|
||||
* @param {number} rotation Rotation.
|
||||
* @param {ol.Size} size Size.
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @param {number} pixelRatio Pixel ratio.
|
||||
* @param {number} opacity Global opacity.
|
||||
* @param {number} brightness Global brightness.
|
||||
@@ -524,7 +507,7 @@ ol.render.webgl.ImageReplay.prototype.getExtent = function() {
|
||||
* @template T
|
||||
*/
|
||||
ol.render.webgl.ImageReplay.prototype.replay = function(context,
|
||||
center, resolution, rotation, size, extent, pixelRatio,
|
||||
center, resolution, rotation, size, pixelRatio,
|
||||
opacity, brightness, contrast, hue, saturation, skippedFeaturesHash) {
|
||||
var gl = context.getGL();
|
||||
|
||||
@@ -798,7 +781,6 @@ ol.render.webgl.ReplayGroup.prototype.isEmpty = function() {
|
||||
* @param {number} resolution Resolution.
|
||||
* @param {number} rotation Rotation.
|
||||
* @param {ol.Size} size Size.
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @param {number} pixelRatio Pixel ratio.
|
||||
* @param {number} opacity Global opacity.
|
||||
* @param {number} brightness Global brightness.
|
||||
@@ -810,15 +792,14 @@ ol.render.webgl.ReplayGroup.prototype.isEmpty = function() {
|
||||
* @template T
|
||||
*/
|
||||
ol.render.webgl.ReplayGroup.prototype.replay = function(context,
|
||||
center, resolution, rotation, size, extent, pixelRatio,
|
||||
center, resolution, rotation, size, pixelRatio,
|
||||
opacity, brightness, contrast, hue, saturation, skippedFeaturesHash) {
|
||||
var i, ii, replay, result;
|
||||
for (i = 0, ii = ol.render.REPLAY_ORDER.length; i < ii; ++i) {
|
||||
replay = this.replays_[ol.render.REPLAY_ORDER[i]];
|
||||
if (goog.isDef(replay) &&
|
||||
ol.extent.intersects(extent, replay.getExtent())) {
|
||||
if (goog.isDef(replay)) {
|
||||
result = replay.replay(context,
|
||||
center, resolution, rotation, size, extent, pixelRatio,
|
||||
center, resolution, rotation, size, pixelRatio,
|
||||
opacity, brightness, contrast, hue, saturation, skippedFeaturesHash);
|
||||
if (result) {
|
||||
return result;
|
||||
|
||||
@@ -49,12 +49,11 @@ ol.renderer.canvas.ImageLayer.prototype.forEachFeatureAtPixel =
|
||||
function(coordinate, frameState, callback, thisArg) {
|
||||
var layer = this.getLayer();
|
||||
var source = layer.getSource();
|
||||
var extent = frameState.extent;
|
||||
var resolution = frameState.viewState.resolution;
|
||||
var rotation = frameState.viewState.rotation;
|
||||
var skippedFeatureUids = frameState.skippedFeatureUids;
|
||||
return source.forEachFeatureAtPixel(
|
||||
extent, resolution, rotation, coordinate, skippedFeatureUids,
|
||||
resolution, rotation, coordinate, skippedFeatureUids,
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @return {?} Callback result.
|
||||
|
||||
@@ -123,7 +123,7 @@ ol.renderer.canvas.Map.prototype.dispatchComposeEvent_ =
|
||||
|
||||
replayGroup.finish();
|
||||
if (!replayGroup.isEmpty()) {
|
||||
replayGroup.replay(context, extent, pixelRatio, this.transform_,
|
||||
replayGroup.replay(context, pixelRatio, this.transform_,
|
||||
rotation, {});
|
||||
}
|
||||
vectorContext.flush();
|
||||
|
||||
@@ -98,7 +98,7 @@ ol.renderer.canvas.VectorLayer.prototype.composeFrame =
|
||||
var alpha = replayContext.globalAlpha;
|
||||
replayContext.globalAlpha = layerState.opacity;
|
||||
replayGroup.replay(
|
||||
replayContext, frameState.extent, frameState.pixelRatio, transform,
|
||||
replayContext, frameState.pixelRatio, transform,
|
||||
frameState.viewState.rotation, frameState.skippedFeatureUids);
|
||||
|
||||
if (replayContext != context) {
|
||||
@@ -121,13 +121,12 @@ ol.renderer.canvas.VectorLayer.prototype.forEachFeatureAtPixel =
|
||||
if (goog.isNull(this.replayGroup_)) {
|
||||
return undefined;
|
||||
} else {
|
||||
var extent = frameState.extent;
|
||||
var resolution = frameState.viewState.resolution;
|
||||
var rotation = frameState.viewState.rotation;
|
||||
var layer = this.getLayer();
|
||||
/** @type {Object.<string, boolean>} */
|
||||
var features = {};
|
||||
return this.replayGroup_.forEachGeometryAtPixel(extent, resolution,
|
||||
return this.replayGroup_.forEachGeometryAtPixel(resolution,
|
||||
rotation, coordinate, frameState.skippedFeatureUids,
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
@@ -181,27 +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 xBuffer = ol.extent.getWidth(frameStateExtent) / 4;
|
||||
var yBuffer = ol.extent.getHeight(frameStateExtent) / 4;
|
||||
extent[0] = frameStateExtent[0] - xBuffer;
|
||||
extent[1] = frameStateExtent[1] - yBuffer;
|
||||
extent[2] = frameStateExtent[2] + xBuffer;
|
||||
extent[3] = frameStateExtent[3] + yBuffer;
|
||||
|
||||
// FIXME dispose of old replayGroup in post render
|
||||
goog.dispose(this.replayGroup_);
|
||||
this.replayGroup_ = null;
|
||||
@@ -252,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;
|
||||
|
||||
@@ -54,12 +54,11 @@ ol.renderer.dom.ImageLayer.prototype.forEachFeatureAtPixel =
|
||||
function(coordinate, frameState, callback, thisArg) {
|
||||
var layer = this.getLayer();
|
||||
var source = layer.getSource();
|
||||
var extent = frameState.extent;
|
||||
var resolution = frameState.viewState.resolution;
|
||||
var rotation = frameState.viewState.rotation;
|
||||
var skippedFeatureUids = frameState.skippedFeatureUids;
|
||||
return source.forEachFeatureAtPixel(
|
||||
extent, resolution, rotation, coordinate, skippedFeatureUids,
|
||||
resolution, rotation, coordinate, skippedFeatureUids,
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @return {?} Callback result.
|
||||
|
||||
@@ -160,8 +160,7 @@ ol.renderer.dom.Map.prototype.dispatchComposeEvent_ =
|
||||
map.dispatchEvent(composeEvent);
|
||||
replayGroup.finish();
|
||||
if (!replayGroup.isEmpty()) {
|
||||
replayGroup.replay(context, extent, pixelRatio, this.transform_,
|
||||
rotation, {});
|
||||
replayGroup.replay(context, pixelRatio, this.transform_, rotation, {});
|
||||
}
|
||||
vectorContext.flush();
|
||||
this.replayGroup = replayGroup;
|
||||
|
||||
@@ -121,9 +121,8 @@ ol.renderer.dom.VectorLayer.prototype.composeFrame =
|
||||
if (!goog.isNull(replayGroup) && !replayGroup.isEmpty()) {
|
||||
|
||||
context.globalAlpha = layerState.opacity;
|
||||
replayGroup.replay(
|
||||
context, frameState.extent, pixelRatio, transform,
|
||||
viewRotation, frameState.skippedFeatureUids);
|
||||
replayGroup.replay(context, pixelRatio, transform, viewRotation,
|
||||
frameState.skippedFeatureUids);
|
||||
|
||||
this.dispatchEvent_(ol.render.EventType.RENDER, frameState, transform);
|
||||
}
|
||||
@@ -162,13 +161,12 @@ ol.renderer.dom.VectorLayer.prototype.forEachFeatureAtPixel =
|
||||
if (goog.isNull(this.replayGroup_)) {
|
||||
return undefined;
|
||||
} else {
|
||||
var extent = frameState.extent;
|
||||
var resolution = frameState.viewState.resolution;
|
||||
var rotation = frameState.viewState.rotation;
|
||||
var layer = this.getLayer();
|
||||
/** @type {Object.<string, boolean>} */
|
||||
var features = {};
|
||||
return this.replayGroup_.forEachGeometryAtPixel(extent, resolution,
|
||||
return this.replayGroup_.forEachGeometryAtPixel(resolution,
|
||||
rotation, coordinate, frameState.skippedFeatureUids,
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
@@ -222,27 +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 xBuffer = ol.extent.getWidth(frameStateExtent) / 4;
|
||||
var yBuffer = ol.extent.getHeight(frameStateExtent) / 4;
|
||||
extent[0] = frameStateExtent[0] - xBuffer;
|
||||
extent[1] = frameStateExtent[1] - yBuffer;
|
||||
extent[2] = frameStateExtent[2] + xBuffer;
|
||||
extent[3] = frameStateExtent[3] + yBuffer;
|
||||
|
||||
// FIXME dispose of old replayGroup in post render
|
||||
goog.dispose(this.replayGroup_);
|
||||
this.replayGroup_ = null;
|
||||
@@ -293,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;
|
||||
|
||||
@@ -80,12 +80,11 @@ ol.renderer.webgl.ImageLayer.prototype.forEachFeatureAtPixel =
|
||||
function(coordinate, frameState, callback, thisArg) {
|
||||
var layer = this.getLayer();
|
||||
var source = layer.getSource();
|
||||
var extent = frameState.extent;
|
||||
var resolution = frameState.viewState.resolution;
|
||||
var rotation = frameState.viewState.rotation;
|
||||
var skippedFeatureUids = frameState.skippedFeatureUids;
|
||||
return source.forEachFeatureAtPixel(
|
||||
extent, resolution, rotation, coordinate, skippedFeatureUids,
|
||||
resolution, rotation, coordinate, skippedFeatureUids,
|
||||
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
|
||||
@@ -299,7 +299,7 @@ ol.renderer.webgl.Map.prototype.dispatchComposeEvent_ =
|
||||
var contrast = 1;
|
||||
var hue = 0;
|
||||
var saturation = 1;
|
||||
replayGroup.replay(context, center, resolution, rotation, size, extent,
|
||||
replayGroup.replay(context, center, resolution, rotation, size,
|
||||
pixelRatio, opacity, brightness, contrast, hue, saturation, {});
|
||||
}
|
||||
replayGroup.getDeleteResourcesFunction(context)();
|
||||
|
||||
@@ -72,9 +72,9 @@ ol.renderer.webgl.VectorLayer.prototype.composeFrame =
|
||||
if (!goog.isNull(replayGroup) && !replayGroup.isEmpty()) {
|
||||
replayGroup.replay(context,
|
||||
viewState.center, viewState.resolution, viewState.rotation,
|
||||
frameState.size, frameState.extent, frameState.pixelRatio,
|
||||
layerState.opacity, layerState.brightness, layerState.contrast,
|
||||
layerState.hue, layerState.saturation, frameState.skippedFeatureUids);
|
||||
frameState.size, frameState.pixelRatio, layerState.opacity,
|
||||
layerState.brightness, layerState.contrast, layerState.hue,
|
||||
layerState.saturation, frameState.skippedFeatureUids);
|
||||
}
|
||||
|
||||
};
|
||||
@@ -139,27 +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 xBuffer = ol.extent.getWidth(frameStateExtent) / 4;
|
||||
var yBuffer = ol.extent.getHeight(frameStateExtent) / 4;
|
||||
extent[0] = frameStateExtent[0] - xBuffer;
|
||||
extent[1] = frameStateExtent[1] - yBuffer;
|
||||
extent[2] = frameStateExtent[2] + xBuffer;
|
||||
extent[3] = frameStateExtent[3] + yBuffer;
|
||||
|
||||
if (!goog.isNull(this.replayGroup_)) {
|
||||
frameState.postRenderFunctions.push(
|
||||
this.replayGroup_.getDeleteResourcesFunction(context));
|
||||
@@ -210,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;
|
||||
|
||||
@@ -141,8 +141,7 @@ ol.source.ImageVector.prototype.canvasFunctionInternal_ =
|
||||
|
||||
var transform = this.getTransform_(ol.extent.getCenter(extent),
|
||||
resolution, pixelRatio, size);
|
||||
replayGroup.replay(this.canvasContext_, extent, pixelRatio, transform, 0,
|
||||
{});
|
||||
replayGroup.replay(this.canvasContext_, pixelRatio, transform, 0, {});
|
||||
|
||||
this.replayGroup_ = replayGroup;
|
||||
|
||||
@@ -154,14 +153,14 @@ ol.source.ImageVector.prototype.canvasFunctionInternal_ =
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.source.ImageVector.prototype.forEachFeatureAtPixel = function(
|
||||
extent, resolution, rotation, coordinate, skippedFeatureUids, callback) {
|
||||
resolution, rotation, coordinate, skippedFeatureUids, callback) {
|
||||
if (goog.isNull(this.replayGroup_)) {
|
||||
return undefined;
|
||||
} else {
|
||||
/** @type {Object.<string, boolean>} */
|
||||
var features = {};
|
||||
return this.replayGroup_.forEachGeometryAtPixel(
|
||||
extent, resolution, 0, coordinate, skippedFeatureUids,
|
||||
resolution, 0, coordinate, skippedFeatureUids,
|
||||
/**
|
||||
* @param {ol.Feature} feature Feature.
|
||||
* @return {?} Callback result.
|
||||
|
||||
@@ -3,7 +3,6 @@ goog.provide('ol.source.State');
|
||||
|
||||
goog.require('goog.events.EventType');
|
||||
goog.require('ol.Attribution');
|
||||
goog.require('ol.Extent');
|
||||
goog.require('ol.Observable');
|
||||
goog.require('ol.proj');
|
||||
|
||||
@@ -78,7 +77,6 @@ goog.inherits(ol.source.Source, ol.Observable);
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Extent} extent Extent.
|
||||
* @param {number} resolution Resolution.
|
||||
* @param {number} rotation Rotation.
|
||||
* @param {ol.Coordinate} coordinate Coordinate.
|
||||
|
||||
Reference in New Issue
Block a user