WebGL renderer updates for new extent structure

This commit is contained in:
Tim Schaub
2013-09-03 17:53:36 -06:00
parent 1a7e99f67e
commit e84e0e1233
3 changed files with 20 additions and 18 deletions

View File

@@ -169,12 +169,12 @@ ol.renderer.webgl.ImageLayer.prototype.updateProjectionMatrix_ =
2 / canvasExtentWidth, 2 / canvasExtentHeight, 1); 2 / canvasExtentWidth, 2 / canvasExtentHeight, 1);
goog.vec.Mat4.rotateZ(projectionMatrix, -viewRotation); goog.vec.Mat4.rotateZ(projectionMatrix, -viewRotation);
goog.vec.Mat4.translate(projectionMatrix, goog.vec.Mat4.translate(projectionMatrix,
imageExtent[0] - viewCenter[0], imageExtent[0][0] - viewCenter[0],
imageExtent[2] - viewCenter[1], imageExtent[0][1] - viewCenter[1],
0); 0);
goog.vec.Mat4.scale(projectionMatrix, goog.vec.Mat4.scale(projectionMatrix,
(imageExtent[1] - imageExtent[0]) / 2, (imageExtent[1][0] - imageExtent[0][0]) / 2,
(imageExtent[3] - imageExtent[2]) / 2, (imageExtent[1][1] - imageExtent[0][1]) / 2,
1); 1);
goog.vec.Mat4.translate(projectionMatrix, 1, 1, 0); goog.vec.Mat4.translate(projectionMatrix, 1, 1, 0);

View File

@@ -161,8 +161,8 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
var minX = origin[0] + tileRange.minX * tileSize[0] * tileResolution; var minX = origin[0] + tileRange.minX * tileSize[0] * tileResolution;
var minY = origin[1] + tileRange.minY * tileSize[1] * tileResolution; var minY = origin[1] + tileRange.minY * tileSize[1] * tileResolution;
framebufferExtent = [ framebufferExtent = [
minX, minX + framebufferExtentDimension, [minX, minY],
minY, minY + framebufferExtentDimension [minX + framebufferExtentDimension, minY + framebufferExtentDimension]
]; ];
this.bindFramebuffer(frameState, framebufferDimension); this.bindFramebuffer(frameState, framebufferDimension);
@@ -246,11 +246,13 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
for (tileKey in tilesToDraw) { for (tileKey in tilesToDraw) {
tile = tilesToDraw[tileKey]; tile = tilesToDraw[tileKey];
tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent); tileExtent = tileGrid.getTileCoordExtent(tile.tileCoord, tmpExtent);
sx = 2 * (tileExtent[1] - tileExtent[0]) / framebufferExtentDimension; sx = 2 * (tileExtent[1][0] - tileExtent[0][0]) /
sy = 2 * (tileExtent[3] - tileExtent[2]) / framebufferExtentDimension; framebufferExtentDimension;
tx = 2 * (tileExtent[0] - framebufferExtent[0]) / sy = 2 * (tileExtent[1][1] - tileExtent[0][1]) /
framebufferExtentDimension;
tx = 2 * (tileExtent[0][0] - framebufferExtent[0][0]) /
framebufferExtentDimension - 1; framebufferExtentDimension - 1;
ty = 2 * (tileExtent[2] - framebufferExtent[2]) / ty = 2 * (tileExtent[0][1] - framebufferExtent[0][1]) /
framebufferExtentDimension - 1; framebufferExtentDimension - 1;
goog.vec.Vec4.setFromValues(u_tileOffset, sx, sy, tx, ty); goog.vec.Vec4.setFromValues(u_tileOffset, sx, sy, tx, ty);
gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset); gl.uniform4fv(this.locations_.u_tileOffset, u_tileOffset);
@@ -294,17 +296,17 @@ ol.renderer.webgl.TileLayer.prototype.renderFrame =
var texCoordMatrix = this.texCoordMatrix; var texCoordMatrix = this.texCoordMatrix;
goog.vec.Mat4.makeIdentity(texCoordMatrix); goog.vec.Mat4.makeIdentity(texCoordMatrix);
goog.vec.Mat4.translate(texCoordMatrix, goog.vec.Mat4.translate(texCoordMatrix,
(center[0] - framebufferExtent[0]) / (center[0] - framebufferExtent[0][0]) /
(framebufferExtent[1] - framebufferExtent[0]), (framebufferExtent[1][0] - framebufferExtent[0][0]),
(center[1] - framebufferExtent[2]) / (center[1] - framebufferExtent[0][1]) /
(framebufferExtent[3] - framebufferExtent[2]), (framebufferExtent[1][1] - framebufferExtent[0][1]),
0); 0);
goog.vec.Mat4.rotateZ(texCoordMatrix, view2DState.rotation); goog.vec.Mat4.rotateZ(texCoordMatrix, view2DState.rotation);
goog.vec.Mat4.scale(texCoordMatrix, goog.vec.Mat4.scale(texCoordMatrix,
frameState.size[0] * view2DState.resolution / frameState.size[0] * view2DState.resolution /
(framebufferExtent[1] - framebufferExtent[0]), (framebufferExtent[1][0] - framebufferExtent[0][0]),
frameState.size[1] * view2DState.resolution / frameState.size[1] * view2DState.resolution /
(framebufferExtent[3] - framebufferExtent[2]), (framebufferExtent[1][1] - framebufferExtent[0][1]),
1); 1);
goog.vec.Mat4.translate(texCoordMatrix, goog.vec.Mat4.translate(texCoordMatrix,
-0.5, -0.5,

View File

@@ -17,7 +17,7 @@ describe('ol.renderer.webgl.ImageLayer', function() {
}); });
var layer = new ol.layer.Image({ var layer = new ol.layer.Image({
source: new ol.source.Image({ source: new ol.source.Image({
extent: [0, 1, 0, 1] extent: [[0, 0], [1, 1]]
}) })
}); });
renderer = new ol.renderer.webgl.ImageLayer(map.getRenderer(), layer); renderer = new ol.renderer.webgl.ImageLayer(map.getRenderer(), layer);
@@ -32,7 +32,7 @@ describe('ol.renderer.webgl.ImageLayer', function() {
// image size is 1024, 768 // image size is 1024, 768
// image resolution is 10 // image resolution is 10
imageExtent = [0, 10240, 0, 7680]; imageExtent = [[0, 0], [10240, 7680]];
}); });
afterEach(function() { afterEach(function() {