diff --git a/core/src/avm2/globals/flash/geom/Matrix3D.as b/core/src/avm2/globals/flash/geom/Matrix3D.as index cf0d80829..3d45a9455 100644 --- a/core/src/avm2/globals/flash/geom/Matrix3D.as +++ b/core/src/avm2/globals/flash/geom/Matrix3D.as @@ -371,6 +371,12 @@ package flash.geom { this._rawData[15] = m141 * m214 + m142 * m224 + m143 * m234 + m144 * m244; } + public function prependScale(xScale:Number, yScale:Number, zScale:Number):void { + var m = new Matrix3D(); + m.appendScale(xScale, yScale, zScale); + this.prepend(m); + } + public function copyFrom(other:Matrix3D):void { // This makes a copy of other.rawData this._rawData = other.rawData; diff --git a/tests/tests/swfs/avm2/matrix3d/Test.as b/tests/tests/swfs/avm2/matrix3d/Test.as index 078c710a6..d412d5d4e 100644 --- a/tests/tests/swfs/avm2/matrix3d/Test.as +++ b/tests/tests/swfs/avm2/matrix3d/Test.as @@ -149,6 +149,9 @@ newMat.prependRotation(90, Vector3D.X_AXIS); trace("After prependRotation: " + newMat.rawData); + newMat.prependScale(1, 2, 3); + trace("After prependScale: " + newMat.rawData); + trace("// copyColumnFrom tests"); var columnMatrix:Matrix3D = new Matrix3D(Vector.([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])); diff --git a/tests/tests/swfs/avm2/matrix3d/output.txt b/tests/tests/swfs/avm2/matrix3d/output.txt index 62e552c21..8e531b036 100644 --- a/tests/tests/swfs/avm2/matrix3d/output.txt +++ b/tests/tests/swfs/avm2/matrix3d/output.txt @@ -48,6 +48,7 @@ Row 4: ArgumentError: Error #2004: One of the parameters is invalid. Copy from row 4: ArgumentError: Error #2004: One of the parameters is invalid. After row copies: 100,500,900,1300,200,600,1000,1400,300,700,1100,1500,400,800,1200,1600 After prependRotation: 100,500,900,1300,300,700,1100,1500,-200,-600,-1000,-1400,400,800,1200,1600 +After prependScale: 100,500,900,1300,600,1400,2200,3000,-600,-1800,-3000,-4200,400,800,1200,1600 // copyColumnFrom tests Matrix raw data: 3,4,5,6,0,0,0,0,0,0,0,0,0,0,0,0 Matrix raw data: 3,4,5,6,3,4,5,6,0,0,0,0,0,0,0,0 diff --git a/tests/tests/swfs/avm2/matrix3d/test.swf b/tests/tests/swfs/avm2/matrix3d/test.swf index 8e532590f..1eafd8de3 100644 Binary files a/tests/tests/swfs/avm2/matrix3d/test.swf and b/tests/tests/swfs/avm2/matrix3d/test.swf differ