166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2012 The Chromium Authors. All rights reserved.
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be
366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file.
466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict';
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.requireRawScript('../third_party/gl-matrix/src/gl-matrix/common.js');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.requireRawScript('../third_party/gl-matrix/src/gl-matrix/mat2d.js');
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.requireRawScript('../third_party/gl-matrix/src/gl-matrix/mat4.js');
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.requireRawScript('../third_party/gl-matrix/src/gl-matrix/vec2.js');
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.requireRawScript('../third_party/gl-matrix/src/gl-matrix/vec3.js');
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.requireRawScript('../third_party/gl-matrix/src/gl-matrix/vec4.js');
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.exportTo('base', function() {
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var tmp_vec2 = vec2.create();
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var tmp_vec2b = vec2.create();
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var tmp_vec4 = vec4.create();
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var tmp_mat2d = mat2d.create();
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  vec2.createFromArray = function(arr) {
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    if (arr.length != 2)
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      throw new Error('Should be length 2');
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var v = vec2.create();
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec2.set(v, arr[0], arr[1]);
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    return v;
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  vec2.createXY = function(x, y) {
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var v = vec2.create();
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec2.set(v, x, y);
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    return v;
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  vec2.toString = function(a) {
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    return '[' + a[0] + ', ' + a[1] + ']';
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  vec2.addTwoScaledUnitVectors = function(out, u1, scale1, u2, scale2) {
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    // out = u1 * scale1 + u2 * scale2
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec2.scale(tmp_vec2, u1, scale1);
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec2.scale(tmp_vec2b, u2, scale2);
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec2.add(out, tmp_vec2, tmp_vec2b);
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  vec3.createXYZ = function(x, y, z) {
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var v = vec3.create();
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec3.set(v, x, y, z);
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    return v;
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  vec3.toString = function(a) {
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    return 'vec3(' + a[0] + ', ' + a[1] + ', ' + a[2] + ')';
5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  mat2d.translateXY = function(out, x, y) {
5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec2.set(tmp_vec2, x, y);
5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    mat2d.translate(out, out, tmp_vec2);
5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  mat2d.scaleXY = function(out, x, y) {
6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec2.set(tmp_vec2, x, y);
6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    mat2d.scale(out, out, tmp_vec2);
6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  vec4.unitize = function(out, a) {
6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    out[0] = a[0] / a[3];
6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    out[1] = a[1] / a[3];
6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    out[2] = a[2] / a[3];
6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    out[3] = 1;
7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    return out;
7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  vec2.copyFromVec4 = function(out, a) {
7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec4.unitize(tmp_vec4, a);
7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    vec2.copy(out, tmp_vec4);
7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  }
7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  return {};
7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
80