Use pixel rounded center for the WebGL renderer transform
This commit is contained in:
@@ -254,21 +254,6 @@ ol.renderer.Layer.prototype.updateUsedTiles = function(usedTiles, tileSource, z,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* @param {ol.Coordinate} center Center.
|
||||
* @param {number} resolution Resolution.
|
||||
* @param {ol.Size} size Size.
|
||||
* @protected
|
||||
* @return {ol.Coordinate} Snapped center.
|
||||
*/
|
||||
ol.renderer.Layer.prototype.snapCenterToPixel = function(center, resolution, size) {
|
||||
return [
|
||||
resolution * (Math.round(center[0] / resolution) + (size[0] % 2) / 2),
|
||||
resolution * (Math.round(center[1] / resolution) + (size[1] % 2) / 2)
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Manage tile pyramid.
|
||||
* This function performs a number of functions related to the tiles at the
|
||||
|
||||
@@ -164,14 +164,7 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS
|
||||
var tileGutter = frameState.pixelRatio * tileSource.getGutter(projection);
|
||||
|
||||
var center = viewState.center;
|
||||
var extent;
|
||||
if (tileResolution == viewState.resolution) {
|
||||
center = this.snapCenterToPixel(center, tileResolution, frameState.size);
|
||||
extent = ol.extent.getForViewAndSize(
|
||||
center, tileResolution, viewState.rotation, frameState.size);
|
||||
} else {
|
||||
extent = frameState.extent;
|
||||
}
|
||||
var extent = frameState.extent;
|
||||
var tileRange = tileGrid.getTileRangeForExtentAndResolution(
|
||||
extent, tileResolution);
|
||||
|
||||
@@ -346,9 +339,9 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS
|
||||
var texCoordMatrix = this.texCoordMatrix;
|
||||
ol.transform.reset(texCoordMatrix);
|
||||
ol.transform.translate(texCoordMatrix,
|
||||
(center[0] - framebufferExtent[0]) /
|
||||
(Math.round(center[0] / tileResolution) * tileResolution - framebufferExtent[0]) /
|
||||
(framebufferExtent[2] - framebufferExtent[0]),
|
||||
(center[1] - framebufferExtent[1]) /
|
||||
(Math.round(center[1] / tileResolution) * tileResolution - framebufferExtent[1]) /
|
||||
(framebufferExtent[3] - framebufferExtent[1]));
|
||||
if (viewState.rotation !== 0) {
|
||||
ol.transform.rotate(texCoordMatrix, viewState.rotation);
|
||||
|
||||
Reference in New Issue
Block a user