Index: tools/cc-frame-viewer/third_party/gl-matrix/src/gl-matrix/mat2d.js |
diff --git a/tools/cc-frame-viewer/third_party/gl-matrix/src/gl-matrix/mat2d.js b/tools/cc-frame-viewer/third_party/gl-matrix/src/gl-matrix/mat2d.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6486972de10086744792004089c3b32bc2df080a |
--- /dev/null |
+++ b/tools/cc-frame-viewer/third_party/gl-matrix/src/gl-matrix/mat2d.js |
@@ -0,0 +1,253 @@ |
+/* Copyright (c) 2013, Brandon Jones, Colin MacKenzie IV. All rights reserved. |
+ |
+Redistribution and use in source and binary forms, with or without modification, |
+are permitted provided that the following conditions are met: |
+ |
+ * Redistributions of source code must retain the above copyright notice, this |
+ list of conditions and the following disclaimer. |
+ * Redistributions in binary form must reproduce the above copyright notice, |
+ this list of conditions and the following disclaimer in the documentation |
+ and/or other materials provided with the distribution. |
+ |
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ |
+ |
+/** |
+ * @class 2x3 Matrix |
+ * @name mat2d |
+ * |
+ * @description |
+ * A mat2d contains six elements defined as: |
+ * <pre> |
+ * [a, b, |
+ * c, d, |
+ * tx,ty] |
+ * </pre> |
+ * This is a short form for the 3x3 matrix: |
+ * <pre> |
+ * [a, b, 0 |
+ * c, d, 0 |
+ * tx,ty,1] |
+ * </pre> |
+ * The last column is ignored so the array is shorter and operations are faster. |
+ */ |
+var mat2d = {}; |
+ |
+/** |
+ * Creates a new identity mat2d |
+ * |
+ * @returns {mat2d} a new 2x3 matrix |
+ */ |
+mat2d.create = function() { |
+ var out = new GLMAT_ARRAY_TYPE(6); |
+ out[0] = 1; |
+ out[1] = 0; |
+ out[2] = 0; |
+ out[3] = 1; |
+ out[4] = 0; |
+ out[5] = 0; |
+ return out; |
+}; |
+ |
+/** |
+ * Creates a new mat2d initialized with values from an existing matrix |
+ * |
+ * @param {mat2d} a matrix to clone |
+ * @returns {mat2d} a new 2x3 matrix |
+ */ |
+mat2d.clone = function(a) { |
+ var out = new GLMAT_ARRAY_TYPE(6); |
+ out[0] = a[0]; |
+ out[1] = a[1]; |
+ out[2] = a[2]; |
+ out[3] = a[3]; |
+ out[4] = a[4]; |
+ out[5] = a[5]; |
+ return out; |
+}; |
+ |
+/** |
+ * Copy the values from one mat2d to another |
+ * |
+ * @param {mat2d} out the receiving matrix |
+ * @param {mat2d} a the source matrix |
+ * @returns {mat2d} out |
+ */ |
+mat2d.copy = function(out, a) { |
+ out[0] = a[0]; |
+ out[1] = a[1]; |
+ out[2] = a[2]; |
+ out[3] = a[3]; |
+ out[4] = a[4]; |
+ out[5] = a[5]; |
+ return out; |
+}; |
+ |
+/** |
+ * Set a mat2d to the identity matrix |
+ * |
+ * @param {mat2d} out the receiving matrix |
+ * @returns {mat2d} out |
+ */ |
+mat2d.identity = function(out) { |
+ out[0] = 1; |
+ out[1] = 0; |
+ out[2] = 0; |
+ out[3] = 1; |
+ out[4] = 0; |
+ out[5] = 0; |
+ return out; |
+}; |
+ |
+/** |
+ * Inverts a mat2d |
+ * |
+ * @param {mat2d} out the receiving matrix |
+ * @param {mat2d} a the source matrix |
+ * @returns {mat2d} out |
+ */ |
+mat2d.invert = function(out, a) { |
+ var aa = a[0], ab = a[1], ac = a[2], ad = a[3], |
+ atx = a[4], aty = a[5]; |
+ |
+ var det = aa * ad - ab * ac; |
+ if(!det){ |
+ return null; |
+ } |
+ det = 1.0 / det; |
+ |
+ out[0] = ad * det; |
+ out[1] = -ab * det; |
+ out[2] = -ac * det; |
+ out[3] = aa * det; |
+ out[4] = (ac * aty - ad * atx) * det; |
+ out[5] = (ab * atx - aa * aty) * det; |
+ return out; |
+}; |
+ |
+/** |
+ * Calculates the determinant of a mat2d |
+ * |
+ * @param {mat2d} a the source matrix |
+ * @returns {Number} determinant of a |
+ */ |
+mat2d.determinant = function (a) { |
+ return a[0] * a[3] - a[1] * a[2]; |
+}; |
+ |
+/** |
+ * Multiplies two mat2d's |
+ * |
+ * @param {mat2d} out the receiving matrix |
+ * @param {mat2d} a the first operand |
+ * @param {mat2d} b the second operand |
+ * @returns {mat2d} out |
+ */ |
+mat2d.multiply = function (out, a, b) { |
+ var aa = a[0], ab = a[1], ac = a[2], ad = a[3], |
+ atx = a[4], aty = a[5], |
+ ba = b[0], bb = b[1], bc = b[2], bd = b[3], |
+ btx = b[4], bty = b[5]; |
+ |
+ out[0] = aa*ba + ab*bc; |
+ out[1] = aa*bb + ab*bd; |
+ out[2] = ac*ba + ad*bc; |
+ out[3] = ac*bb + ad*bd; |
+ out[4] = ba*atx + bc*aty + btx; |
+ out[5] = bb*atx + bd*aty + bty; |
+ return out; |
+}; |
+ |
+/** |
+ * Alias for {@link mat2d.multiply} |
+ * @function |
+ */ |
+mat2d.mul = mat2d.multiply; |
+ |
+ |
+/** |
+ * Rotates a mat2d by the given angle |
+ * |
+ * @param {mat2d} out the receiving matrix |
+ * @param {mat2d} a the matrix to rotate |
+ * @param {Number} rad the angle to rotate the matrix by |
+ * @returns {mat2d} out |
+ */ |
+mat2d.rotate = function (out, a, rad) { |
+ var aa = a[0], |
+ ab = a[1], |
+ ac = a[2], |
+ ad = a[3], |
+ atx = a[4], |
+ aty = a[5], |
+ st = Math.sin(rad), |
+ ct = Math.cos(rad); |
+ |
+ out[0] = aa*ct + ab*st; |
+ out[1] = -aa*st + ab*ct; |
+ out[2] = ac*ct + ad*st; |
+ out[3] = -ac*st + ct*ad; |
+ out[4] = ct*atx + st*aty; |
+ out[5] = ct*aty - st*atx; |
+ return out; |
+}; |
+ |
+/** |
+ * Scales the mat2d by the dimensions in the given vec2 |
+ * |
+ * @param {mat2d} out the receiving matrix |
+ * @param {mat2d} a the matrix to translate |
+ * @param {mat2d} v the vec2 to scale the matrix by |
+ * @returns {mat2d} out |
+ **/ |
+mat2d.scale = function(out, a, v) { |
+ var vx = v[0], vy = v[1]; |
+ out[0] = a[0] * vx; |
+ out[1] = a[1] * vy; |
+ out[2] = a[2] * vx; |
+ out[3] = a[3] * vy; |
+ out[4] = a[4] * vx; |
+ out[5] = a[5] * vy; |
+ return out; |
+}; |
+ |
+/** |
+ * Translates the mat2d by the dimensions in the given vec2 |
+ * |
+ * @param {mat2d} out the receiving matrix |
+ * @param {mat2d} a the matrix to translate |
+ * @param {mat2d} v the vec2 to translate the matrix by |
+ * @returns {mat2d} out |
+ **/ |
+mat2d.translate = function(out, a, v) { |
+ out[0] = a[0]; |
+ out[1] = a[1]; |
+ out[2] = a[2]; |
+ out[3] = a[3]; |
+ out[4] = a[4] + v[0]; |
+ out[5] = a[5] + v[1]; |
+ return out; |
+}; |
+ |
+/** |
+ * Returns a string representation of a mat2d |
+ * |
+ * @param {mat2d} a matrix to represent as a string |
+ * @returns {String} string representation of the matrix |
+ */ |
+mat2d.str = function (a) { |
+ return 'mat2d(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + |
+ a[3] + ', ' + a[4] + ', ' + a[5] + ')'; |
+}; |
+ |
+if(typeof(exports) !== 'undefined') { |
+ exports.mat2d = mat2d; |
+} |