Refactor ol.render.transformCoordinates to accept stride

This commit is contained in:
Tom Payne
2013-11-10 13:24:20 +01:00
parent dab12456ae
commit cd82cb2534
2 changed files with 17 additions and 21 deletions

View File

@@ -91,8 +91,8 @@ ol.render.canvas.Batch.prototype.appendFlatCoordinates =
* @param {goog.vec.Mat4.AnyType} transform Transform. * @param {goog.vec.Mat4.AnyType} transform Transform.
*/ */
ol.render.canvas.Batch.prototype.draw = function(context, transform) { ol.render.canvas.Batch.prototype.draw = function(context, transform) {
var pixelCoordinates = ol.render.transformCoordinates( var pixelCoordinates = ol.render.transformFlatCoordinates(
this.coordinates, transform, this.pixelCoordinates_); this.coordinates, 2, transform, this.pixelCoordinates_);
this.pixelCoordinates_ = pixelCoordinates; // FIXME ? this.pixelCoordinates_ = pixelCoordinates; // FIXME ?
var instructions = this.instructions; var instructions = this.instructions;
var i = 0; var i = 0;

View File

@@ -4,35 +4,31 @@ goog.require('goog.vec.Mat4');
/** /**
* @param {Array.<number>} coordinates Coordinates. * @param {Array.<number>} flatCoordinates Flat coordinates.
* @param {number} stride Stride.
* @param {goog.vec.Mat4.AnyType} transform Transform. * @param {goog.vec.Mat4.AnyType} transform Transform.
* @param {Array.<number>=} opt_dest Destination. * @param {Array.<number>=} opt_dest Destination.
* @return {Array.<number>} Transformed coordinates. * @return {Array.<number>} Transformed coordinates.
*/ */
ol.render.transformCoordinates = function(coordinates, transform, opt_dest) { ol.render.transformFlatCoordinates =
function(flatCoordinates, stride, transform, opt_dest) {
var m00 = goog.vec.Mat4.getElement(transform, 0, 0); var m00 = goog.vec.Mat4.getElement(transform, 0, 0);
var m10 = goog.vec.Mat4.getElement(transform, 1, 0); var m10 = goog.vec.Mat4.getElement(transform, 1, 0);
var m01 = goog.vec.Mat4.getElement(transform, 0, 1); var m01 = goog.vec.Mat4.getElement(transform, 0, 1);
var m11 = goog.vec.Mat4.getElement(transform, 1, 1); var m11 = goog.vec.Mat4.getElement(transform, 1, 1);
var m03 = goog.vec.Mat4.getElement(transform, 0, 3); var m03 = goog.vec.Mat4.getElement(transform, 0, 3);
var m13 = goog.vec.Mat4.getElement(transform, 1, 3); var m13 = goog.vec.Mat4.getElement(transform, 1, 3);
var n = coordinates.length; var dest = goog.isDef(opt_dest) ? opt_dest : [];
var result; var i = 0;
if (goog.isDef(opt_dest)) { var j, jj;
result = opt_dest; for (j = 0, jj = flatCoordinates.length; j < jj; j += stride) {
} else { var x = flatCoordinates[j];
result = []; var y = flatCoordinates[j + 1];
dest[i++] = m00 * x + m01 * y + m03;
dest[i++] = m10 * x + m11 * y + m13;
} }
var j = 0; if (goog.isDef(opt_dest) && dest.length != i) {
var i, x, y; dest.length = i;
for (i = 0; i < n; ) {
x = coordinates[i++];
y = coordinates[i++];
result[j++] = m00 * x + m01 * y + m03;
result[j++] = m10 * x + m11 * y + m13;
} }
if (goog.isDef(opt_dest) && result.length != j) { return dest;
result.length = j;
}
return result;
}; };