Browse Source

bugfix: multiplyMatrices can be called with this matrix as a or b, so copy elements if that's the case

foijord 8 years ago
parent
commit
866dd06f29
3 changed files with 6 additions and 6 deletions
  1. 2 2
      build/three.js
  2. 2 2
      build/three.module.js
  3. 2 2
      src/math/Matrix4.js

+ 2 - 2
build/three.js

@@ -3709,8 +3709,8 @@
 
 
 		multiplyMatrices: function ( a, b ) {
 		multiplyMatrices: function ( a, b ) {
 
 
-			var ae = a.elements;
-			var be = b.elements;
+			var ae = (a == this) ? a.elements.slice() : a.elements;
+			var be = (b == this) ? b.elements.slice() : b.elements;
 			var te = this.elements;
 			var te = this.elements;
 
 
 			te[ 0 ] = ae[ 0 ] * be[ 0 ] + ae[ 4 ] * be[ 1 ] + ae[ 8 ] * be[ 2 ] + ae[ 12 ] * be[ 3 ];
 			te[ 0 ] = ae[ 0 ] * be[ 0 ] + ae[ 4 ] * be[ 1 ] + ae[ 8 ] * be[ 2 ] + ae[ 12 ] * be[ 3 ];

+ 2 - 2
build/three.module.js

@@ -3703,8 +3703,8 @@ Matrix4.prototype = {
 
 
 	multiplyMatrices: function ( a, b ) {
 	multiplyMatrices: function ( a, b ) {
 
 
-		var ae = a.elements;
-		var be = b.elements;
+		var ae = (a == this) ? a.elements.slice() : a.elements;
+		var be = (b == this) ? b.elements.slice() : b.elements;
 		var te = this.elements;
 		var te = this.elements;
 
 
 		te[ 0 ] = ae[ 0 ] * be[ 0 ] + ae[ 4 ] * be[ 1 ] + ae[ 8 ] * be[ 2 ] + ae[ 12 ] * be[ 3 ];
 		te[ 0 ] = ae[ 0 ] * be[ 0 ] + ae[ 4 ] * be[ 1 ] + ae[ 8 ] * be[ 2 ] + ae[ 12 ] * be[ 3 ];

+ 2 - 2
src/math/Matrix4.js

@@ -382,8 +382,8 @@ Matrix4.prototype = {
 
 
 	multiplyMatrices: function ( a, b ) {
 	multiplyMatrices: function ( a, b ) {
 
 
-		var ae = a.elements;
-		var be = b.elements;
+		var ae = (a == this) ? a.elements.slice() : a.elements;
+		var be = (b == this) ? b.elements.slice() : b.elements;
 		var te = this.elements;
 		var te = this.elements;
 
 
 		te[ 0 ] = ae[ 0 ] * be[ 0 ] + ae[ 4 ] * be[ 1 ] + ae[ 8 ] * be[ 2 ] + ae[ 12 ] * be[ 3 ];
 		te[ 0 ] = ae[ 0 ] * be[ 0 ] + ae[ 4 ] * be[ 1 ] + ae[ 8 ] * be[ 2 ] + ae[ 12 ] * be[ 3 ];