Clean up calculation of framebuffer extent and size

This commit is contained in:
Tom Payne
2012-08-06 01:19:41 +02:00
parent 530724235a
commit fe8c064a2e
+13 -12
View File
@@ -1,7 +1,7 @@
// FIXME large resolutions lead to too large framebuffers :-( // FIXME large resolutions lead to too large framebuffers :-(
// FIXME animated shaders! check in redraw // FIXME animated shaders! check in redraw
// FIXME defer texture uploads and delete* calls // FIXME defer texture uploads and delete* calls
// FIXME this now breaks for intermediate resolutions :-( // FIXME strange things happen at very large zooms
goog.provide('ol.webgl.TileLayerRenderer'); goog.provide('ol.webgl.TileLayerRenderer');
goog.provide('ol.webgl.tilelayerrenderer.shader.Fragment'); goog.provide('ol.webgl.tilelayerrenderer.shader.Fragment');
@@ -272,17 +272,18 @@ ol.webgl.TileLayerRenderer.prototype.render = function() {
tileBoundsSize.height * tileSize.height); tileBoundsSize.height * tileSize.height);
var framebufferDimension = var framebufferDimension =
Math.pow(2, Math.ceil(Math.log(maxDimension) / Math.log(2))); Math.pow(2, Math.ceil(Math.log(maxDimension) / Math.log(2)));
var nTilesX = framebufferDimension / tileSize.width; var framebufferExtentSize = new ol.Size(
var nTilesY = framebufferDimension / tileSize.height; mapResolution * framebufferDimension,
var framebufferTileBounds = new ol.TileBounds( mapResolution * framebufferDimension);
tileBounds.minX, var origin = tileGrid.getOrigin(z);
tileBounds.minY, var tileResolution = tileGrid.getResolution(z);
tileBounds.minX + nTilesX - 1, var minX = origin.x + tileBounds.minX * tileSize.width * tileResolution;
tileBounds.minY + nTilesY - 1); var minY = origin.y + tileBounds.minY * tileSize.height * tileResolution;
goog.asserts.assert(framebufferTileBounds.containsTileBounds(tileBounds)); var framebufferExtent = new ol.Extent(
var framebufferExtent = minX,
tileGrid.getTileBoundsExtent(z, framebufferTileBounds); minY,
var framebufferExtentSize = framebufferExtent.getSize(); minX + framebufferExtentSize.width,
minY + framebufferExtentSize.height);
this.bindFramebuffer_(framebufferDimension); this.bindFramebuffer_(framebufferDimension);
gl.viewport(0, 0, framebufferDimension, framebufferDimension); gl.viewport(0, 0, framebufferDimension, framebufferDimension);