From df2e50d1e6a215c2317ee94208a5efd4d80f5b41 Mon Sep 17 00:00:00 2001 From: Yoshihiro Yamazaki Date: Tue, 11 Dec 2012 19:24:45 +0900 Subject: [PATCH] =?utf8?q?Float32Arrray=20=E3=82=92=E4=BD=BF=E3=81=86?= =?utf8?q?=E3=82=88=E3=81=86=E3=81=AB=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/swf/matrix.js | 63 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/src/swf/matrix.js b/src/swf/matrix.js index e828868..0263169 100644 --- a/src/swf/matrix.js +++ b/src/swf/matrix.js @@ -5,45 +5,66 @@ goog.scope(function() { /** * @constructor */ -FlappSWFMatrix = function(ibit) { - ; +FlappSWFMatrix = function() { + ; // no data property, only Float32Array procedure }; FlappSWFMatrix.identity = function() { - return { scaleX:1, scaleY:1, skew0:0, skew1:0, transX:0, transY:0 }; + var m = new Float32Array(6) + m[0] = m[3] = 1; + m[1] = m[2] = 0; + m[4] = m[5] = 0; + return m; }; -FlappSWFMatrix.multiplyScalar = function(m, a) { - return { scaleX:m.scaleX*a, scaleY:m.scaleY*a, - skew0:m.skew0*a, skew1:m.skew1*a, - transX:m.transX*a, transY:m.transY*a }; +FlappSWFMatrix.multiplyScalar = function(m1, a) { + var m = new Float32Array(6) + m[0] = a* m1[0]; + m[1] = a* m1[1]; + m[2] = a* m1[2]; + m[3] = a* m1[3]; + m[4] = a* m1[4]; + m[5] = a* m1[5]; + return m; +}; + + +FlappSWFMatrix.multiply = function(m1, m2) { + var m = new Float32Array(6); + /* + * / a1 c1 e1 \ / a2 c2 e2 \ / a1*a2+b1*c2 a1*b2+b1*d2 a1*e2+b1*f2+e1 \ + * \ b1 d1 f1 / * \ b1 d2 f2 / = \ c1*a2+d1*c2 c1*b2+d1*d2 c1*e2+d1*f2+f1 / + */ + m[0] = m1[0]*m2[0] + m1[1]*m2[2]; // a1*a2 + b1*c2; + m[1] = m1[2]*m2[0] + m1[3]*m2[2]; // c1*a2 + d1*c2; + m[2] = m1[0]*m2[1] + m1[1]*m2[3]; // a1*b2 + b1*d2 + m[3] = m1[2]*m2[1] + m1[3]*m2[3]; // c1*b2 + d1*d2 + m[4] = m1[0]*m2[4] + m1[1]*m2[5] + m1[4]; // a1*e2 + b1*f2 + e1 + m[5] = m1[2]*m2[4] + m1[3]*m2[5] + m1[5]; // c1*e2 + d1*f2 + f1 + return m; }; FlappSWFMatrix.load = function(ibit) { ibit.a(); + var m = new Float32Array(6); if (ibit.b()) { // HasScale var nScaleBits = ibit.ub(5); - var scaleX = ibit.sb(nScaleBits) / 0x10000; - var scaleY = ibit.sb(nScaleBits) / 0x10000; + m[0] = ibit.sb(nScaleBits) / 0x10000; // ScaleX + m[3] = ibit.sb(nScaleBits) / 0x10000; // ScaleY } else { - var scaleX = 1; - var scaleY = 1; + m[0] = m[3] = 1; // scaleX, scaleY } if (ibit.b()) { // HasSkew var nSkewBits = ibit.ub(5); - var skew0 = ibit.sb(nSkewBits) / 0x10000; - var skew1 = ibit.sb(nSkewBits) / 0x10000; + m[1] = ibit.sb(nSkewBits) / 0x10000; // RotateSkew0 + m[2] = ibit.sb(nSkewBits) / 0x10000; // RotateSkew1 } else { - var skew0 = 0; - var skew1 = 0; + m[1] = m[2] = 0; // RotateSkew0, RotateSkew1 } var nTransBits = ibit.ub(5); - var transX = ibit.sb(nTransBits); - var transY = ibit.sb(nTransBits); - - return { scaleX:scaleX, scaleY:scaleY, skew0:skew0, skew1:skew1, - transX:transX, transY:transY - }; + m[4] = ibit.sb(nTransBits); // TranslateX + m[5] = ibit.sb(nTransBits); // TranslateY + return m; }; }); -- 2.11.0