babylon.math.SIMD.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. var BABYLON;
  2. (function (BABYLON) {
  3. var SIMDVector3 = (function () {
  4. function SIMDVector3() {
  5. }
  6. SIMDVector3.TransformCoordinatesToRefSIMD = function (vector, transformation, result) {
  7. var v = SIMD.float32x4.loadXYZ(vector._data, 0);
  8. var m0 = SIMD.float32x4.load(transformation.m, 0);
  9. var m1 = SIMD.float32x4.load(transformation.m, 4);
  10. var m2 = SIMD.float32x4.load(transformation.m, 8);
  11. var m3 = SIMD.float32x4.load(transformation.m, 12);
  12. var r = SIMD.float32x4.add(SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(v, 0, 0, 0, 0), m0), SIMD.float32x4.mul(SIMD.float32x4.swizzle(v, 1, 1, 1, 1), m1)), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(v, 2, 2, 2, 2), m2), m3));
  13. r = SIMD.float32x4.div(r, SIMD.float32x4.swizzle(r, 3, 3, 3, 3));
  14. SIMD.float32x4.storeXYZ(result._data, 0, r);
  15. };
  16. SIMDVector3.TransformCoordinatesFromFloatsToRefSIMD = function (x, y, z, transformation, result) {
  17. var v0 = SIMD.float32x4.splat(x);
  18. var v1 = SIMD.float32x4.splat(y);
  19. var v2 = SIMD.float32x4.splat(z);
  20. var m0 = SIMD.float32x4.load(transformation.m, 0);
  21. var m1 = SIMD.float32x4.load(transformation.m, 4);
  22. var m2 = SIMD.float32x4.load(transformation.m, 8);
  23. var m3 = SIMD.float32x4.load(transformation.m, 12);
  24. var r = SIMD.float32x4.add(SIMD.float32x4.add(SIMD.float32x4.mul(v0, m0), SIMD.float32x4.mul(v1, m1)), SIMD.float32x4.add(SIMD.float32x4.mul(v2, m2), m3));
  25. r = SIMD.float32x4.div(r, SIMD.float32x4.swizzle(r, 3, 3, 3, 3));
  26. SIMD.float32x4.storeXYZ(result._data, 0, r);
  27. };
  28. return SIMDVector3;
  29. }());
  30. BABYLON.SIMDVector3 = SIMDVector3;
  31. var SIMDMatrix = (function () {
  32. function SIMDMatrix() {
  33. }
  34. SIMDMatrix.prototype.multiplyToArraySIMD = function (other, result, offset) {
  35. if (offset === void 0) { offset = 0; }
  36. var tm = this.m;
  37. var om = other.m;
  38. var om0 = SIMD.float32x4.load(om, 0);
  39. var om1 = SIMD.float32x4.load(om, 4);
  40. var om2 = SIMD.float32x4.load(om, 8);
  41. var om3 = SIMD.float32x4.load(om, 12);
  42. var tm0 = SIMD.float32x4.load(tm, 0);
  43. SIMD.float32x4.store(result, offset + 0, SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm0, 0, 0, 0, 0), om0), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm0, 1, 1, 1, 1), om1), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm0, 2, 2, 2, 2), om2), SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm0, 3, 3, 3, 3), om3)))));
  44. var tm1 = SIMD.float32x4.load(tm, 4);
  45. SIMD.float32x4.store(result, offset + 4, SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm1, 0, 0, 0, 0), om0), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm1, 1, 1, 1, 1), om1), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm1, 2, 2, 2, 2), om2), SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm1, 3, 3, 3, 3), om3)))));
  46. var tm2 = SIMD.float32x4.load(tm, 8);
  47. SIMD.float32x4.store(result, offset + 8, SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm2, 0, 0, 0, 0), om0), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm2, 1, 1, 1, 1), om1), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm2, 2, 2, 2, 2), om2), SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm2, 3, 3, 3, 3), om3)))));
  48. var tm3 = SIMD.float32x4.load(tm, 12);
  49. SIMD.float32x4.store(result, offset + 12, SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm3, 0, 0, 0, 0), om0), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm3, 1, 1, 1, 1), om1), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm3, 2, 2, 2, 2), om2), SIMD.float32x4.mul(SIMD.float32x4.swizzle(tm3, 3, 3, 3, 3), om3)))));
  50. };
  51. SIMDMatrix.prototype.invertToRefSIMD = function (other) {
  52. var src = this.m;
  53. var dest = other.m;
  54. var row0, row1, row2, row3;
  55. var tmp1;
  56. var minor0, minor1, minor2, minor3;
  57. var det;
  58. // Load the 4 rows
  59. var src0 = SIMD.float32x4.load(src, 0);
  60. var src1 = SIMD.float32x4.load(src, 4);
  61. var src2 = SIMD.float32x4.load(src, 8);
  62. var src3 = SIMD.float32x4.load(src, 12);
  63. // Transpose the source matrix. Sort of. Not a true transpose operation
  64. tmp1 = SIMD.float32x4.shuffle(src0, src1, 0, 1, 4, 5);
  65. row1 = SIMD.float32x4.shuffle(src2, src3, 0, 1, 4, 5);
  66. row0 = SIMD.float32x4.shuffle(tmp1, row1, 0, 2, 4, 6);
  67. row1 = SIMD.float32x4.shuffle(row1, tmp1, 1, 3, 5, 7);
  68. tmp1 = SIMD.float32x4.shuffle(src0, src1, 2, 3, 6, 7);
  69. row3 = SIMD.float32x4.shuffle(src2, src3, 2, 3, 6, 7);
  70. row2 = SIMD.float32x4.shuffle(tmp1, row3, 0, 2, 4, 6);
  71. row3 = SIMD.float32x4.shuffle(row3, tmp1, 1, 3, 5, 7);
  72. // This is a true transposition, but it will lead to an incorrect result
  73. //tmp1 = SIMD.float32x4.shuffle(src0, src1, 0, 1, 4, 5);
  74. //tmp2 = SIMD.float32x4.shuffle(src2, src3, 0, 1, 4, 5);
  75. //row0 = SIMD.float32x4.shuffle(tmp1, tmp2, 0, 2, 4, 6);
  76. //row1 = SIMD.float32x4.shuffle(tmp1, tmp2, 1, 3, 5, 7);
  77. //tmp1 = SIMD.float32x4.shuffle(src0, src1, 2, 3, 6, 7);
  78. //tmp2 = SIMD.float32x4.shuffle(src2, src3, 2, 3, 6, 7);
  79. //row2 = SIMD.float32x4.shuffle(tmp1, tmp2, 0, 2, 4, 6);
  80. //row3 = SIMD.float32x4.shuffle(tmp1, tmp2, 1, 3, 5, 7);
  81. // ----
  82. tmp1 = SIMD.float32x4.mul(row2, row3);
  83. tmp1 = SIMD.float32x4.swizzle(tmp1, 1, 0, 3, 2); // 0xB1 = 10110001
  84. minor0 = SIMD.float32x4.mul(row1, tmp1);
  85. minor1 = SIMD.float32x4.mul(row0, tmp1);
  86. tmp1 = SIMD.float32x4.swizzle(tmp1, 2, 3, 0, 1); // 0x4E = 01001110
  87. minor0 = SIMD.float32x4.sub(SIMD.float32x4.mul(row1, tmp1), minor0);
  88. minor1 = SIMD.float32x4.sub(SIMD.float32x4.mul(row0, tmp1), minor1);
  89. minor1 = SIMD.float32x4.swizzle(minor1, 2, 3, 0, 1); // 0x4E = 01001110
  90. // ----
  91. tmp1 = SIMD.float32x4.mul(row1, row2);
  92. tmp1 = SIMD.float32x4.swizzle(tmp1, 1, 0, 3, 2); // 0xB1 = 10110001
  93. minor0 = SIMD.float32x4.add(SIMD.float32x4.mul(row3, tmp1), minor0);
  94. minor3 = SIMD.float32x4.mul(row0, tmp1);
  95. tmp1 = SIMD.float32x4.swizzle(tmp1, 2, 3, 0, 1); // 0x4E = 01001110
  96. minor0 = SIMD.float32x4.sub(minor0, SIMD.float32x4.mul(row3, tmp1));
  97. minor3 = SIMD.float32x4.sub(SIMD.float32x4.mul(row0, tmp1), minor3);
  98. minor3 = SIMD.float32x4.swizzle(minor3, 2, 3, 0, 1); // 0x4E = 01001110
  99. // ----
  100. tmp1 = SIMD.float32x4.mul(SIMD.float32x4.swizzle(row1, 2, 3, 0, 1), row3); // 0x4E = 01001110
  101. tmp1 = SIMD.float32x4.swizzle(tmp1, 1, 0, 3, 2); // 0xB1 = 10110001
  102. row2 = SIMD.float32x4.swizzle(row2, 2, 3, 0, 1); // 0x4E = 01001110
  103. minor0 = SIMD.float32x4.add(SIMD.float32x4.mul(row2, tmp1), minor0);
  104. minor2 = SIMD.float32x4.mul(row0, tmp1);
  105. tmp1 = SIMD.float32x4.swizzle(tmp1, 2, 3, 0, 1); // 0x4E = 01001110
  106. minor0 = SIMD.float32x4.sub(minor0, SIMD.float32x4.mul(row2, tmp1));
  107. minor2 = SIMD.float32x4.sub(SIMD.float32x4.mul(row0, tmp1), minor2);
  108. minor2 = SIMD.float32x4.swizzle(minor2, 2, 3, 0, 1); // 0x4E = 01001110
  109. // ----
  110. tmp1 = SIMD.float32x4.mul(row0, row1);
  111. tmp1 = SIMD.float32x4.swizzle(tmp1, 1, 0, 3, 2); // 0xB1 = 10110001
  112. minor2 = SIMD.float32x4.add(SIMD.float32x4.mul(row3, tmp1), minor2);
  113. minor3 = SIMD.float32x4.sub(SIMD.float32x4.mul(row2, tmp1), minor3);
  114. tmp1 = SIMD.float32x4.swizzle(tmp1, 2, 3, 0, 1); // 0x4E = 01001110
  115. minor2 = SIMD.float32x4.sub(SIMD.float32x4.mul(row3, tmp1), minor2);
  116. minor3 = SIMD.float32x4.sub(minor3, SIMD.float32x4.mul(row2, tmp1));
  117. // ----
  118. tmp1 = SIMD.float32x4.mul(row0, row3);
  119. tmp1 = SIMD.float32x4.swizzle(tmp1, 1, 0, 3, 2); // 0xB1 = 10110001
  120. minor1 = SIMD.float32x4.sub(minor1, SIMD.float32x4.mul(row2, tmp1));
  121. minor2 = SIMD.float32x4.add(SIMD.float32x4.mul(row1, tmp1), minor2);
  122. tmp1 = SIMD.float32x4.swizzle(tmp1, 2, 3, 0, 1); // 0x4E = 01001110
  123. minor1 = SIMD.float32x4.add(SIMD.float32x4.mul(row2, tmp1), minor1);
  124. minor2 = SIMD.float32x4.sub(minor2, SIMD.float32x4.mul(row1, tmp1));
  125. // ----
  126. tmp1 = SIMD.float32x4.mul(row0, row2);
  127. tmp1 = SIMD.float32x4.swizzle(tmp1, 1, 0, 3, 2); // 0xB1 = 10110001
  128. minor1 = SIMD.float32x4.add(SIMD.float32x4.mul(row3, tmp1), minor1);
  129. minor3 = SIMD.float32x4.sub(minor3, SIMD.float32x4.mul(row1, tmp1));
  130. tmp1 = SIMD.float32x4.swizzle(tmp1, 2, 3, 0, 1); // 0x4E = 01001110
  131. minor1 = SIMD.float32x4.sub(minor1, SIMD.float32x4.mul(row3, tmp1));
  132. minor3 = SIMD.float32x4.add(SIMD.float32x4.mul(row1, tmp1), minor3);
  133. // Compute determinant
  134. det = SIMD.float32x4.mul(row0, minor0);
  135. det = SIMD.float32x4.add(SIMD.float32x4.swizzle(det, 2, 3, 0, 1), det); // 0x4E = 01001110
  136. det = SIMD.float32x4.add(SIMD.float32x4.swizzle(det, 1, 0, 3, 2), det); // 0xB1 = 10110001
  137. tmp1 = SIMD.float32x4.reciprocalApproximation(det);
  138. det = SIMD.float32x4.sub(SIMD.float32x4.add(tmp1, tmp1), SIMD.float32x4.mul(det, SIMD.float32x4.mul(tmp1, tmp1)));
  139. det = SIMD.float32x4.swizzle(det, 0, 0, 0, 0);
  140. // These shuffles aren't necessary if the faulty transposition is done
  141. // up at the top of this function.
  142. //minor0 = SIMD.float32x4.swizzle(minor0, 2, 1, 0, 3);
  143. //minor1 = SIMD.float32x4.swizzle(minor1, 2, 1, 0, 3);
  144. //minor2 = SIMD.float32x4.swizzle(minor2, 2, 1, 0, 3);
  145. //minor3 = SIMD.float32x4.swizzle(minor3, 2, 1, 0, 3);
  146. // Compute final values by multiplying with 1/det
  147. minor0 = SIMD.float32x4.mul(det, minor0);
  148. minor1 = SIMD.float32x4.mul(det, minor1);
  149. minor2 = SIMD.float32x4.mul(det, minor2);
  150. minor3 = SIMD.float32x4.mul(det, minor3);
  151. SIMD.float32x4.store(dest, 0, minor0);
  152. SIMD.float32x4.store(dest, 4, minor1);
  153. SIMD.float32x4.store(dest, 8, minor2);
  154. SIMD.float32x4.store(dest, 12, minor3);
  155. return this;
  156. };
  157. SIMDMatrix.LookAtLHToRefSIMD = function (eyeRef, targetRef, upRef, result) {
  158. var out = result.m;
  159. var center = SIMD.float32x4(targetRef.x, targetRef.y, targetRef.z, 0);
  160. var eye = SIMD.float32x4(eyeRef.x, eyeRef.y, eyeRef.z, 0);
  161. var up = SIMD.float32x4(upRef.x, upRef.y, upRef.z, 0);
  162. // cc.kmVec3Subtract(f, pCenter, pEye);
  163. var f = SIMD.float32x4.sub(center, eye);
  164. // cc.kmVec3Normalize(f, f);
  165. var tmp = SIMD.float32x4.mul(f, f);
  166. tmp = SIMD.float32x4.add(tmp, SIMD.float32x4.add(SIMD.float32x4.swizzle(tmp, 1, 2, 0, 3), SIMD.float32x4.swizzle(tmp, 2, 0, 1, 3)));
  167. f = SIMD.float32x4.mul(f, SIMD.float32x4.reciprocalSqrtApproximation(tmp));
  168. // cc.kmVec3Assign(up, pUp);
  169. // cc.kmVec3Normalize(up, up);
  170. tmp = SIMD.float32x4.mul(up, up);
  171. tmp = SIMD.float32x4.add(tmp, SIMD.float32x4.add(SIMD.float32x4.swizzle(tmp, 1, 2, 0, 3), SIMD.float32x4.swizzle(tmp, 2, 0, 1, 3)));
  172. up = SIMD.float32x4.mul(up, SIMD.float32x4.reciprocalSqrtApproximation(tmp));
  173. // cc.kmVec3Cross(s, f, up);
  174. var s = SIMD.float32x4.sub(SIMD.float32x4.mul(SIMD.float32x4.swizzle(f, 1, 2, 0, 3), SIMD.float32x4.swizzle(up, 2, 0, 1, 3)), SIMD.float32x4.mul(SIMD.float32x4.swizzle(f, 2, 0, 1, 3), SIMD.float32x4.swizzle(up, 1, 2, 0, 3)));
  175. // cc.kmVec3Normalize(s, s);
  176. tmp = SIMD.float32x4.mul(s, s);
  177. tmp = SIMD.float32x4.add(tmp, SIMD.float32x4.add(SIMD.float32x4.swizzle(tmp, 1, 2, 0, 3), SIMD.float32x4.swizzle(tmp, 2, 0, 1, 3)));
  178. s = SIMD.float32x4.mul(s, SIMD.float32x4.reciprocalSqrtApproximation(tmp));
  179. // cc.kmVec3Cross(u, s, f);
  180. var u = SIMD.float32x4.sub(SIMD.float32x4.mul(SIMD.float32x4.swizzle(s, 1, 2, 0, 3), SIMD.float32x4.swizzle(f, 2, 0, 1, 3)), SIMD.float32x4.mul(SIMD.float32x4.swizzle(s, 2, 0, 1, 3), SIMD.float32x4.swizzle(f, 1, 2, 0, 3)));
  181. // cc.kmVec3Normalize(s, s);
  182. tmp = SIMD.float32x4.mul(s, s);
  183. tmp = SIMD.float32x4.add(tmp, SIMD.float32x4.add(SIMD.float32x4.swizzle(tmp, 1, 2, 0, 3), SIMD.float32x4.swizzle(tmp, 2, 0, 1, 3)));
  184. s = SIMD.float32x4.mul(s, SIMD.float32x4.reciprocalSqrtApproximation(tmp));
  185. var zero = SIMD.float32x4.splat(0.0);
  186. s = SIMD.float32x4.neg(s);
  187. var tmp01 = SIMD.float32x4.shuffle(s, u, 0, 1, 4, 5);
  188. var tmp23 = SIMD.float32x4.shuffle(f, zero, 0, 1, 4, 5);
  189. var a0 = SIMD.float32x4.shuffle(tmp01, tmp23, 0, 2, 4, 6);
  190. var a1 = SIMD.float32x4.shuffle(tmp01, tmp23, 1, 3, 5, 7);
  191. tmp01 = SIMD.float32x4.shuffle(s, u, 2, 3, 6, 7);
  192. tmp23 = SIMD.float32x4.shuffle(f, zero, 2, 3, 6, 7);
  193. var a2 = SIMD.float32x4.shuffle(tmp01, tmp23, 0, 2, 4, 6);
  194. var a3 = SIMD.float32x4(0.0, 0.0, 0.0, 1.0);
  195. var b0 = SIMD.float32x4(1.0, 0.0, 0.0, 0.0);
  196. var b1 = SIMD.float32x4(0.0, 1.0, 0.0, 0.0);
  197. var b2 = SIMD.float32x4(0.0, 0.0, 1.0, 0.0);
  198. var b3 = SIMD.float32x4.neg(eye);
  199. b3 = SIMD.float32x4.withW(b3, 1.0);
  200. SIMD.float32x4.store(out, 0, SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b0, 0, 0, 0, 0), a0), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b0, 1, 1, 1, 1), a1), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b0, 2, 2, 2, 2), a2), SIMD.float32x4.mul(SIMD.float32x4.swizzle(b0, 3, 3, 3, 3), a3)))));
  201. SIMD.float32x4.store(out, 4, SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b1, 0, 0, 0, 0), a0), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b1, 1, 1, 1, 1), a1), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b1, 2, 2, 2, 2), a2), SIMD.float32x4.mul(SIMD.float32x4.swizzle(b1, 3, 3, 3, 3), a3)))));
  202. SIMD.float32x4.store(out, 8, SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b2, 0, 0, 0, 0), a0), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b2, 1, 1, 1, 1), a1), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b2, 2, 2, 2, 2), a2), SIMD.float32x4.mul(SIMD.float32x4.swizzle(b2, 3, 3, 3, 3), a3)))));
  203. SIMD.float32x4.store(out, 12, SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b3, 0, 0, 0, 0), a0), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b3, 1, 1, 1, 1), a1), SIMD.float32x4.add(SIMD.float32x4.mul(SIMD.float32x4.swizzle(b3, 2, 2, 2, 2), a2), SIMD.float32x4.mul(SIMD.float32x4.swizzle(b3, 3, 3, 3, 3), a3)))));
  204. };
  205. return SIMDMatrix;
  206. }());
  207. BABYLON.SIMDMatrix = SIMDMatrix;
  208. var previousMultiplyToArray = BABYLON.Matrix.prototype.multiplyToArray;
  209. var previousInvertToRef = BABYLON.Matrix.prototype.invertToRef;
  210. var previousLookAtLHToRef = BABYLON.Matrix.LookAtLHToRef;
  211. var previousTransformCoordinatesToRef = BABYLON.Vector3.TransformCoordinatesToRef;
  212. var previousTransformCoordinatesFromFloatsToRef = BABYLON.Vector3.TransformCoordinatesFromFloatsToRef;
  213. var SIMDHelper = (function () {
  214. function SIMDHelper() {
  215. }
  216. Object.defineProperty(SIMDHelper, "IsEnabled", {
  217. get: function () {
  218. return SIMDHelper._isEnabled;
  219. },
  220. enumerable: true,
  221. configurable: true
  222. });
  223. SIMDHelper.DisableSIMD = function () {
  224. // Replace functions
  225. BABYLON.Matrix.prototype.multiplyToArray = previousMultiplyToArray;
  226. BABYLON.Matrix.prototype.invertToRef = previousInvertToRef;
  227. BABYLON.Matrix.LookAtLHToRef = previousLookAtLHToRef;
  228. BABYLON.Vector3.TransformCoordinatesToRef = previousTransformCoordinatesToRef;
  229. BABYLON.Vector3.TransformCoordinatesFromFloatsToRef = previousTransformCoordinatesFromFloatsToRef;
  230. SIMDHelper._isEnabled = false;
  231. };
  232. SIMDHelper.EnableSIMD = function () {
  233. if (window.SIMD === undefined) {
  234. return;
  235. }
  236. // Replace functions
  237. BABYLON.Matrix.prototype.multiplyToArray = SIMDMatrix.prototype.multiplyToArraySIMD;
  238. BABYLON.Matrix.prototype.invertToRef = SIMDMatrix.prototype.invertToRefSIMD;
  239. BABYLON.Matrix.LookAtLHToRef = SIMDMatrix.LookAtLHToRefSIMD;
  240. BABYLON.Vector3.TransformCoordinatesToRef = SIMDVector3.TransformCoordinatesToRefSIMD;
  241. BABYLON.Vector3.TransformCoordinatesFromFloatsToRef = SIMDVector3.TransformCoordinatesFromFloatsToRefSIMD;
  242. Object.defineProperty(BABYLON.Vector3.prototype, "x", {
  243. get: function () { return this._data[0]; },
  244. set: function (value) {
  245. if (!this._data) {
  246. this._data = new Float32Array(3);
  247. }
  248. this._data[0] = value;
  249. }
  250. });
  251. Object.defineProperty(BABYLON.Vector3.prototype, "y", {
  252. get: function () { return this._data[1]; },
  253. set: function (value) {
  254. this._data[1] = value;
  255. }
  256. });
  257. Object.defineProperty(BABYLON.Vector3.prototype, "z", {
  258. get: function () { return this._data[2]; },
  259. set: function (value) {
  260. this._data[2] = value;
  261. }
  262. });
  263. SIMDHelper._isEnabled = true;
  264. };
  265. SIMDHelper._isEnabled = false;
  266. return SIMDHelper;
  267. }());
  268. BABYLON.SIMDHelper = SIMDHelper;
  269. })(BABYLON || (BABYLON = {}));