Avoid pixel->coord->pixel conversion
This commit is contained in:
@@ -226,7 +226,7 @@ ol.renderer.webgl.ImageLayer.prototype.hasFeatureAtPixel =
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel =
|
||||
function(coordinate, frameState, callback, thisArg) {
|
||||
function(pixel, frameState, callback, thisArg) {
|
||||
if (goog.isNull(this.image_) || goog.isNull(this.image_.getImage())) {
|
||||
return undefined;
|
||||
}
|
||||
@@ -234,6 +234,7 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel =
|
||||
if (this.getLayer().getSource() instanceof ol.source.ImageVector) {
|
||||
// for ImageVector sources use the original hit-detection logic,
|
||||
// so that for example also transparent polygons are detected
|
||||
var coordinate = this.getMap().getCoordinateFromPixel(pixel);
|
||||
var hasFeature = this.forEachFeatureAtPixel(
|
||||
coordinate, frameState, goog.functions.TRUE, this);
|
||||
|
||||
@@ -251,10 +252,9 @@ ol.renderer.webgl.ImageLayer.prototype.forEachLayerAtPixel =
|
||||
frameState.size, imageSize);
|
||||
}
|
||||
|
||||
var pixelOnMap = this.getMap().getPixelFromCoordinate(coordinate);
|
||||
var pixelOnFrameBuffer = [0, 0];
|
||||
ol.vec.Mat4.multVec2(
|
||||
this.hitTransformationMatrix_, pixelOnMap, pixelOnFrameBuffer);
|
||||
this.hitTransformationMatrix_, pixel, pixelOnFrameBuffer);
|
||||
|
||||
if (pixelOnFrameBuffer[0] < 0 || pixelOnFrameBuffer[0] > imageSize[0] ||
|
||||
pixelOnFrameBuffer[1] < 0 || pixelOnFrameBuffer[1] > imageSize[1]) {
|
||||
|
||||
@@ -650,7 +650,7 @@ ol.renderer.webgl.Map.prototype.hasFeatureAtPixel =
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.webgl.Map.prototype.forEachLayerAtPixel =
|
||||
function(coordinate, frameState, callback, thisArg,
|
||||
function(pixel, frameState, callback, thisArg,
|
||||
layerFilter, thisArg2) {
|
||||
if (this.getGL().isContextLost()) {
|
||||
return false;
|
||||
@@ -664,6 +664,7 @@ ol.renderer.webgl.Map.prototype.forEachLayerAtPixel =
|
||||
if (!goog.isNull(this.replayGroup)) {
|
||||
// use default color values
|
||||
var d = ol.renderer.webgl.Map.DEFAULT_COLOR_VALUES_;
|
||||
var coordinate = this.getMap().getCoordinateFromPixel(pixel);
|
||||
|
||||
var hasFeature = this.replayGroup.hasFeatureAtPixel(coordinate,
|
||||
context, viewState.center, viewState.resolution, viewState.rotation,
|
||||
@@ -686,7 +687,7 @@ ol.renderer.webgl.Map.prototype.forEachLayerAtPixel =
|
||||
layerFilter.call(thisArg, layer)) {
|
||||
var layerRenderer = this.getLayerRenderer(layer);
|
||||
result = layerRenderer.forEachLayerAtPixel(
|
||||
coordinate, frameState, callback, thisArg);
|
||||
pixel, frameState, callback, thisArg);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -333,16 +333,15 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame =
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.webgl.TileLayer.prototype.forEachLayerAtPixel =
|
||||
function(coordinate, frameState, callback, thisArg) {
|
||||
function(pixel, frameState, callback, thisArg) {
|
||||
if (goog.isNull(this.framebuffer)) {
|
||||
return undefined;
|
||||
}
|
||||
var mapSize = this.getMap().getSize();
|
||||
|
||||
var pixelOnMap = this.getMap().getPixelFromCoordinate(coordinate);
|
||||
var pixelOnMapScaled = [
|
||||
pixelOnMap[0] / mapSize[0],
|
||||
(mapSize[1] - pixelOnMap[1]) / mapSize[1]];
|
||||
pixel[0] / mapSize[0],
|
||||
(mapSize[1] - pixel[1]) / mapSize[1]];
|
||||
|
||||
var pixelOnFrameBufferScaled = [0, 0];
|
||||
ol.vec.Mat4.multVec2(
|
||||
|
||||
@@ -143,7 +143,7 @@ ol.renderer.webgl.VectorLayer.prototype.forEachFeatureAtPixel =
|
||||
* @inheritDoc
|
||||
*/
|
||||
ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtPixel =
|
||||
function(coordinate, frameState) {
|
||||
function(pixel, frameState) {
|
||||
if (goog.isNull(this.replayGroup_) || goog.isNull(this.layerState_)) {
|
||||
return false;
|
||||
} else {
|
||||
@@ -151,6 +151,7 @@ ol.renderer.webgl.VectorLayer.prototype.hasFeatureAtPixel =
|
||||
var context = mapRenderer.getContext();
|
||||
var viewState = frameState.viewState;
|
||||
var layerState = this.layerState_;
|
||||
var coordinate = this.getMap().getCoordinateFromPixel(pixel);
|
||||
return this.replayGroup_.hasFeatureAtPixel(coordinate,
|
||||
context, viewState.center, viewState.resolution, viewState.rotation,
|
||||
frameState.size, frameState.pixelRatio,
|
||||
|
||||
Reference in New Issue
Block a user