From 05b6ca05fe69b9d30705660fa3996c053210ecb1 Mon Sep 17 00:00:00 2001 From: Tom Payne Date: Tue, 7 Aug 2012 17:46:06 +0200 Subject: [PATCH] Improve WebGL pixel precision --- src/ol/webgl/tilelayerrenderer.js | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/ol/webgl/tilelayerrenderer.js b/src/ol/webgl/tilelayerrenderer.js index a93ac9f8ce..0929c9563c 100644 --- a/src/ol/webgl/tilelayerrenderer.js +++ b/src/ol/webgl/tilelayerrenderer.js @@ -374,8 +374,8 @@ ol.webgl.TileLayerRenderer.prototype.render = function() { var zs = goog.object.getKeys(tilesToDrawByZ); goog.array.sort(zs); var uTileOffset = goog.vec.Vec4.createFloat32(); - goog.array.forEach(zs, function(z) { - goog.object.forEach(tilesToDrawByZ[z], function(tile) { + goog.array.forEach(zs, function(tileZ) { + goog.object.forEach(tilesToDrawByZ[tileZ], function(tile) { var tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord); var sx = 2 * tileExtent.getWidth() / framebufferExtentSize.width; var sy = 2 * tileExtent.getHeight() / framebufferExtentSize.height; @@ -383,10 +383,17 @@ ol.webgl.TileLayerRenderer.prototype.render = function() { framebufferExtentSize.width - 1; var ty = 2 * (tileExtent.minY - framebufferExtent.minY) / framebufferExtentSize.height - 1; + var filter; + if (tileZ == z) { + tx += 0.5 * sx / tileSize.width; + ty += 0.5 * sy / tileSize.height; + filter = goog.webgl.NEAREST; + } else { + filter = goog.webgl.LINEAR; + } goog.vec.Vec4.setFromValues(uTileOffset, sx, sy, tx, ty); gl.uniform4fv(this.locations_.uTileOffset, uTileOffset); - map.bindImageTexture( - tile.getImage(), goog.webgl.LINEAR, goog.webgl.LINEAR); + map.bindImageTexture(tile.getImage(), filter, filter); gl.drawArrays(goog.webgl.TRIANGLE_STRIP, 0, 4); }, this); }, this); @@ -412,8 +419,8 @@ ol.webgl.TileLayerRenderer.prototype.render = function() { 1); } goog.vec.Mat4.translate(this.matrix_, - -0.5, - -0.5, + -0.5 - 0.5 / framebufferDimension, + -0.5 - 0.5 / framebufferDimension, 0); };