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.
|
* Manage tile pyramid.
|
||||||
* This function performs a number of functions related to the tiles at the
|
* 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 tileGutter = frameState.pixelRatio * tileSource.getGutter(projection);
|
||||||
|
|
||||||
var center = viewState.center;
|
var center = viewState.center;
|
||||||
var extent;
|
var extent = frameState.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 tileRange = tileGrid.getTileRangeForExtentAndResolution(
|
var tileRange = tileGrid.getTileRangeForExtentAndResolution(
|
||||||
extent, tileResolution);
|
extent, tileResolution);
|
||||||
|
|
||||||
@@ -346,9 +339,9 @@ ol.renderer.webgl.TileLayer.prototype.prepareFrame = function(frameState, layerS
|
|||||||
var texCoordMatrix = this.texCoordMatrix;
|
var texCoordMatrix = this.texCoordMatrix;
|
||||||
ol.transform.reset(texCoordMatrix);
|
ol.transform.reset(texCoordMatrix);
|
||||||
ol.transform.translate(texCoordMatrix,
|
ol.transform.translate(texCoordMatrix,
|
||||||
(center[0] - framebufferExtent[0]) /
|
(Math.round(center[0] / tileResolution) * tileResolution - framebufferExtent[0]) /
|
||||||
(framebufferExtent[2] - framebufferExtent[0]),
|
(framebufferExtent[2] - framebufferExtent[0]),
|
||||||
(center[1] - framebufferExtent[1]) /
|
(Math.round(center[1] / tileResolution) * tileResolution - framebufferExtent[1]) /
|
||||||
(framebufferExtent[3] - framebufferExtent[1]));
|
(framebufferExtent[3] - framebufferExtent[1]));
|
||||||
if (viewState.rotation !== 0) {
|
if (viewState.rotation !== 0) {
|
||||||
ol.transform.rotate(texCoordMatrix, viewState.rotation);
|
ol.transform.rotate(texCoordMatrix, viewState.rotation);
|
||||||
|
|||||||
Reference in New Issue
Block a user