@lightningjs/renderer 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +13 -13
  2. package/dist/exports/utils.d.ts +1 -1
  3. package/dist/exports/utils.js +1 -1
  4. package/dist/exports/utils.js.map +1 -1
  5. package/dist/src/common/CommonTypes.d.ts +32 -12
  6. package/dist/src/core/CoreNode.d.ts +14 -18
  7. package/dist/src/core/CoreNode.js +90 -124
  8. package/dist/src/core/CoreNode.js.map +1 -1
  9. package/dist/src/core/CoreTextNode.d.ts +0 -2
  10. package/dist/src/core/CoreTextNode.js +39 -17
  11. package/dist/src/core/CoreTextNode.js.map +1 -1
  12. package/dist/src/core/Stage.js +11 -8
  13. package/dist/src/core/Stage.js.map +1 -1
  14. package/dist/src/core/lib/Matrix3d.d.ts +59 -0
  15. package/dist/src/core/lib/Matrix3d.js +253 -0
  16. package/dist/src/core/lib/Matrix3d.js.map +1 -0
  17. package/dist/src/core/lib/utils.d.ts +1 -0
  18. package/dist/src/core/lib/utils.js +3 -0
  19. package/dist/src/core/lib/utils.js.map +1 -1
  20. package/dist/src/core/renderers/CoreRenderer.d.ts +2 -4
  21. package/dist/src/core/renderers/CoreRenderer.js.map +1 -1
  22. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.d.ts +1 -1
  23. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js +16 -16
  24. package/dist/src/core/renderers/webgl/WebGlCoreRenderer.js.map +1 -1
  25. package/dist/src/core/renderers/webgl/WebGlCoreShader.d.ts +1 -1
  26. package/dist/src/core/renderers/webgl/WebGlCoreShader.js +2 -2
  27. package/dist/src/core/renderers/webgl/WebGlCoreShader.js.map +1 -1
  28. package/dist/src/core/renderers/webgl/shaders/SdfShader.d.ts +2 -1
  29. package/dist/src/core/renderers/webgl/shaders/SdfShader.js +15 -6
  30. package/dist/src/core/renderers/webgl/shaders/SdfShader.js.map +1 -1
  31. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.d.ts +2 -1
  32. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js +27 -30
  33. package/dist/src/core/text-rendering/renderers/CanvasTextRenderer.js.map +1 -1
  34. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.d.ts +2 -1
  35. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js +7 -9
  36. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.js.map +1 -1
  37. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js +0 -1
  38. package/dist/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.js.map +1 -1
  39. package/dist/src/core/text-rendering/renderers/TextRenderer.d.ts +24 -2
  40. package/dist/src/core/text-rendering/renderers/TextRenderer.js +6 -3
  41. package/dist/src/core/text-rendering/renderers/TextRenderer.js.map +1 -1
  42. package/dist/src/core/textures/SubTexture.js +1 -1
  43. package/dist/src/core/textures/SubTexture.js.map +1 -1
  44. package/dist/src/core/textures/Texture.d.ts +13 -1
  45. package/dist/src/core/textures/Texture.js.map +1 -1
  46. package/dist/src/main-api/INode.d.ts +30 -5
  47. package/dist/src/main-api/RendererMain.js +3 -1
  48. package/dist/src/main-api/RendererMain.js.map +1 -1
  49. package/dist/src/render-drivers/main/MainOnlyNode.d.ts +6 -4
  50. package/dist/src/render-drivers/main/MainOnlyNode.js +31 -16
  51. package/dist/src/render-drivers/main/MainOnlyNode.js.map +1 -1
  52. package/dist/src/render-drivers/main/MainOnlyTextNode.d.ts +0 -2
  53. package/dist/src/render-drivers/main/MainOnlyTextNode.js +3 -10
  54. package/dist/src/render-drivers/main/MainOnlyTextNode.js.map +1 -1
  55. package/dist/src/render-drivers/threadx/NodeStruct.d.ts +6 -3
  56. package/dist/src/render-drivers/threadx/NodeStruct.js +12 -3
  57. package/dist/src/render-drivers/threadx/NodeStruct.js.map +1 -1
  58. package/dist/src/render-drivers/threadx/SharedNode.d.ts +2 -1
  59. package/dist/src/render-drivers/threadx/SharedNode.js +2 -1
  60. package/dist/src/render-drivers/threadx/SharedNode.js.map +1 -1
  61. package/dist/src/render-drivers/threadx/ThreadXMainNode.d.ts +2 -0
  62. package/dist/src/render-drivers/threadx/ThreadXMainNode.js +14 -0
  63. package/dist/src/render-drivers/threadx/ThreadXMainNode.js.map +1 -1
  64. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js +4 -2
  65. package/dist/src/render-drivers/threadx/ThreadXRenderDriver.js.map +1 -1
  66. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js +6 -5
  67. package/dist/src/render-drivers/threadx/worker/ThreadXRendererNode.js.map +1 -1
  68. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js +2 -7
  69. package/dist/src/render-drivers/threadx/worker/ThreadXRendererTextNode.js.map +1 -1
  70. package/dist/src/render-drivers/threadx/worker/renderer.js +2 -1
  71. package/dist/src/render-drivers/threadx/worker/renderer.js.map +1 -1
  72. package/dist/src/utils.d.ts +7 -12
  73. package/dist/src/utils.js +9 -25
  74. package/dist/src/utils.js.map +1 -1
  75. package/dist/tsconfig.dist.tsbuildinfo +1 -1
  76. package/exports/utils.ts +1 -1
  77. package/package.json +22 -19
  78. package/src/common/CommonTypes.ts +42 -16
  79. package/src/core/CoreNode.ts +120 -158
  80. package/src/core/CoreTextNode.ts +54 -24
  81. package/src/core/Stage.ts +16 -11
  82. package/src/core/lib/Matrix3d.ts +290 -0
  83. package/src/core/lib/utils.ts +4 -0
  84. package/src/core/renderers/CoreRenderer.ts +2 -4
  85. package/src/core/renderers/webgl/WebGlCoreRenderer.ts +18 -21
  86. package/src/core/renderers/webgl/WebGlCoreShader.ts +2 -2
  87. package/src/core/renderers/webgl/shaders/SdfShader.ts +17 -8
  88. package/src/core/text-rendering/renderers/CanvasTextRenderer.ts +30 -28
  89. package/src/core/text-rendering/renderers/SdfTextRenderer/SdfTextRenderer.ts +9 -20
  90. package/src/core/text-rendering/renderers/SdfTextRenderer/internal/layoutText.ts +0 -1
  91. package/src/core/text-rendering/renderers/TextRenderer.ts +37 -5
  92. package/src/core/textures/SubTexture.ts +6 -5
  93. package/src/core/textures/Texture.ts +19 -6
  94. package/src/main-api/INode.ts +32 -5
  95. package/src/main-api/RendererMain.ts +3 -1
  96. package/src/render-drivers/main/MainOnlyNode.ts +39 -22
  97. package/src/render-drivers/main/MainOnlyTextNode.ts +2 -15
  98. package/src/render-drivers/threadx/NodeStruct.ts +13 -3
  99. package/src/render-drivers/threadx/SharedNode.ts +4 -2
  100. package/src/render-drivers/threadx/ThreadXMainNode.ts +16 -0
  101. package/src/render-drivers/threadx/ThreadXRenderDriver.ts +4 -2
  102. package/src/render-drivers/threadx/worker/ThreadXRendererNode.ts +18 -8
  103. package/src/render-drivers/threadx/worker/ThreadXRendererTextNode.ts +2 -14
  104. package/src/render-drivers/threadx/worker/renderer.ts +2 -1
  105. package/src/utils.ts +10 -27
  106. package/dist/src/core/Matrix2DContext.d.ts +0 -15
  107. package/dist/src/core/Matrix2DContext.js +0 -45
  108. package/dist/src/core/Matrix2DContext.js.map +0 -1
  109. package/dist/src/core/lib/glm/common.d.ts +0 -162
  110. package/dist/src/core/lib/glm/common.js +0 -81
  111. package/dist/src/core/lib/glm/common.js.map +0 -1
  112. package/dist/src/core/lib/glm/index.d.ts +0 -11
  113. package/dist/src/core/lib/glm/index.js +0 -30
  114. package/dist/src/core/lib/glm/index.js.map +0 -1
  115. package/dist/src/core/lib/glm/mat2.d.ts +0 -219
  116. package/dist/src/core/lib/glm/mat2.js +0 -396
  117. package/dist/src/core/lib/glm/mat2.js.map +0 -1
  118. package/dist/src/core/lib/glm/mat2d.d.ts +0 -237
  119. package/dist/src/core/lib/glm/mat2d.js +0 -442
  120. package/dist/src/core/lib/glm/mat2d.js.map +0 -1
  121. package/dist/src/core/lib/glm/mat3.d.ts +0 -283
  122. package/dist/src/core/lib/glm/mat3.js +0 -680
  123. package/dist/src/core/lib/glm/mat3.js.map +0 -1
  124. package/dist/src/core/lib/glm/mat4.d.ts +0 -550
  125. package/dist/src/core/lib/glm/mat4.js +0 -1802
  126. package/dist/src/core/lib/glm/mat4.js.map +0 -1
  127. package/dist/src/core/lib/glm/quat.d.ts +0 -363
  128. package/dist/src/core/lib/glm/quat.js +0 -693
  129. package/dist/src/core/lib/glm/quat.js.map +0 -1
  130. package/dist/src/core/lib/glm/quat2.d.ts +0 -356
  131. package/dist/src/core/lib/glm/quat2.js +0 -754
  132. package/dist/src/core/lib/glm/quat2.js.map +0 -1
  133. package/dist/src/core/lib/glm/vec2.d.ts +0 -365
  134. package/dist/src/core/lib/glm/vec2.js +0 -569
  135. package/dist/src/core/lib/glm/vec2.js.map +0 -1
  136. package/dist/src/core/lib/glm/vec3.d.ts +0 -406
  137. package/dist/src/core/lib/glm/vec3.js +0 -720
  138. package/dist/src/core/lib/glm/vec3.js.map +0 -1
  139. package/dist/src/core/lib/glm/vec4.d.ts +0 -330
  140. package/dist/src/core/lib/glm/vec4.js +0 -608
  141. package/dist/src/core/lib/glm/vec4.js.map +0 -1
  142. package/dist/src/core/textures/utils.d.ts +0 -11
  143. package/dist/src/core/textures/utils.js +0 -32
  144. package/dist/src/core/textures/utils.js.map +0 -1
  145. package/dist/src/main-api/TextureRegistry.d.ts +0 -33
  146. package/dist/src/main-api/TextureRegistry.js +0 -97
  147. package/dist/src/main-api/TextureRegistry.js.map +0 -1
  148. package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.d.ts +0 -33
  149. package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.js +0 -97
  150. package/dist/src/main-api/TextureUsageRegistry/TextureRegistry.js.map +0 -1
  151. package/src/core/Matrix2DContext.ts +0 -52
  152. package/src/core/lib/glm/common.ts +0 -231
  153. package/src/core/lib/glm/index.ts +0 -31
  154. package/src/core/lib/glm/mat2.ts +0 -499
  155. package/src/core/lib/glm/mat2d.ts +0 -547
  156. package/src/core/lib/glm/mat3.ts +0 -849
  157. package/src/core/lib/glm/mat4.ts +0 -2169
  158. package/src/core/lib/glm/quat.ts +0 -828
  159. package/src/core/lib/glm/quat2.ts +0 -951
  160. package/src/core/lib/glm/vec2.ts +0 -671
  161. package/src/core/lib/glm/vec3.ts +0 -859
  162. package/src/core/lib/glm/vec4.ts +0 -708
@@ -1,499 +0,0 @@
1
- /*
2
- * If not stated otherwise in this file or this component's LICENSE file the
3
- * following copyright and licenses apply:
4
- *
5
- * Copyright 2023 Comcast Cable Communications Management, LLC.
6
- *
7
- * Licensed under the Apache License, Version 2.0 (the License);
8
- * you may not use this file except in compliance with the License.
9
- * You may obtain a copy of the License at
10
- *
11
- * http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing, software
14
- * distributed under the License is distributed on an "AS IS" BASIS,
15
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- * See the License for the specific language governing permissions and
17
- * limitations under the License.
18
- */
19
-
20
- import {
21
- EPSILON,
22
- getMatrixArrayType,
23
- type Float32ArrayLen4,
24
- type NumberArrayLen4,
25
- } from './common.js';
26
-
27
- import type { Vec2 } from './vec2.js';
28
-
29
- export type Mat2 = Float32ArrayLen4 | NumberArrayLen4;
30
-
31
- /**
32
- * Creates a new identity Mat2
33
- *
34
- * @returns {Mat2} a new 2x2 matrix
35
- */
36
-
37
- export function create(): Mat2 {
38
- const out = getMatrixArrayType(4) as Mat2;
39
-
40
- if (!(out instanceof Float32Array)) {
41
- out[1] = 0;
42
- out[2] = 0;
43
- }
44
-
45
- out[0] = 1;
46
- out[3] = 1;
47
- return out;
48
- }
49
-
50
- /**
51
- * Creates a new Mat2 initialized with values from an existing matrix
52
- *
53
- * @param {Mat2} a matrix to clone
54
- * @returns {Mat2} a new 2x2 matrix
55
- */
56
-
57
- export function clone(a: Mat2): Mat2 {
58
- const out = getMatrixArrayType(4) as Mat2;
59
- out[0] = a[0];
60
- out[1] = a[1];
61
- out[2] = a[2];
62
- out[3] = a[3];
63
- return out;
64
- }
65
-
66
- /**
67
- * Copy the values from one Mat2 to another
68
- *
69
- * @param {Mat2} out the receiving matrix
70
- * @param {Mat2} a the source matrix
71
- * @returns {Mat2} out
72
- */
73
-
74
- export function copy(out: Mat2, a: Mat2): Mat2 {
75
- out[0] = a[0];
76
- out[1] = a[1];
77
- out[2] = a[2];
78
- out[3] = a[3];
79
- return out;
80
- }
81
-
82
- /**
83
- * Set a Mat2 to the identity matrix
84
- *
85
- * @param {Mat2} out the receiving matrix
86
- * @returns {Mat2} out
87
- */
88
-
89
- export function identity(out: Mat2): Mat2 {
90
- out[0] = 1;
91
- out[1] = 0;
92
- out[2] = 0;
93
- out[3] = 1;
94
- return out;
95
- }
96
-
97
- /**
98
- * Create a new Mat2 with the given values
99
- *
100
- * @param {number} m00 Component in column 0, row 0 position (index 0)
101
- * @param {number} m01 Component in column 0, row 1 position (index 1)
102
- * @param {number} m10 Component in column 1, row 0 position (index 2)
103
- * @param {number} m11 Component in column 1, row 1 position (index 3)
104
- * @returns {Mat2} out A new 2x2 matrix
105
- */
106
- export function fromValues(
107
- m00: number,
108
- m01: number,
109
- m10: number,
110
- m11: number,
111
- ): Mat2 {
112
- const out = getMatrixArrayType(4) as Mat2;
113
- out[0] = m00;
114
- out[1] = m01;
115
- out[2] = m10;
116
- out[3] = m11;
117
- return out;
118
- }
119
-
120
- /**
121
- * Set the components of a Mat2 to the given values
122
- *
123
- * @param {Mat2} out the receiving matrix
124
- * @param {Number} m00 Component in column 0, row 0 position (index 0)
125
- * @param {Number} m01 Component in column 0, row 1 position (index 1)
126
- * @param {Number} m10 Component in column 1, row 0 position (index 2)
127
- * @param {Number} m11 Component in column 1, row 1 position (index 3)
128
- * @returns {Mat2} out
129
- */
130
- export function set(
131
- out: Mat2,
132
- m00: number,
133
- m01: number,
134
- m10: number,
135
- m11: number,
136
- ): Mat2 {
137
- out[0] = m00;
138
- out[1] = m01;
139
- out[2] = m10;
140
- out[3] = m11;
141
- return out;
142
- }
143
-
144
- /**
145
- * Transpose the values of a Mat2
146
- *
147
- * @param {Mat2} out the receiving matrix
148
- * @param {Mat2} a the source matrix
149
- * @returns {Mat2} out
150
- */
151
-
152
- export function transpose(out: Mat2, a: Mat2): Mat2 {
153
- // If we are transposing ourselves we can skip a few steps but have to cache
154
- // some values
155
- if (out === a) {
156
- const a1 = a[1];
157
- out[1] = a[2];
158
- out[2] = a1;
159
- } else {
160
- out[0] = a[0];
161
- out[1] = a[2];
162
- out[2] = a[1];
163
- out[3] = a[3];
164
- }
165
-
166
- return out;
167
- }
168
-
169
- /**
170
- * Inverts a Mat2
171
- *
172
- * @param {Mat2} out the receiving matrix
173
- * @param {Mat2} a the source matrix
174
- * @returns {Mat2} out
175
- */
176
-
177
- export function invert(out: Mat2, a: Mat2): Mat2 | null {
178
- const a0 = a[0],
179
- a1 = a[1],
180
- a2 = a[2],
181
- a3 = a[3]; // Calculate the determinant
182
-
183
- let det = a0 * a3 - a2 * a1;
184
-
185
- if (!det) {
186
- return null;
187
- }
188
-
189
- det = 1.0 / det;
190
- out[0] = a3 * det;
191
- out[1] = -a1 * det;
192
- out[2] = -a2 * det;
193
- out[3] = a0 * det;
194
- return out;
195
- }
196
-
197
- /**
198
- * Calculates the adjugate of a Mat2
199
- *
200
- * @param {Mat2} out the receiving matrix
201
- * @param {Mat2} a the source matrix
202
- * @returns {Mat2} out
203
- */
204
-
205
- export function adjoint(out: Mat2, a: Mat2) {
206
- // Caching this value is necessary if out == a
207
- const a0 = a[0];
208
- out[0] = a[3];
209
- out[1] = -a[1];
210
- out[2] = -a[2];
211
- out[3] = a0;
212
- return out;
213
- }
214
-
215
- /**
216
- * Calculates the determinant of a Mat2
217
- *
218
- * @param {Mat2} a the source matrix
219
- * @returns {number} determinant of a
220
- */
221
-
222
- export function determinant(a: Mat2): number {
223
- return a[0] * a[3] - a[2] * a[1];
224
- }
225
-
226
- /**
227
- * Multiplies two Mat2's
228
- *
229
- * @param {Mat2} out the receiving matrix
230
- * @param {Mat2} a the first operand
231
- * @param {Mat2} b the second operand
232
- * @returns {Mat2} out
233
- */
234
-
235
- export function multiply(out: Mat2, a: Mat2, b: Mat2): Mat2 {
236
- const a0 = a[0],
237
- a1 = a[1],
238
- a2 = a[2],
239
- a3 = a[3];
240
- const b0 = b[0],
241
- b1 = b[1],
242
- b2 = b[2],
243
- b3 = b[3];
244
- out[0] = a0 * b0 + a2 * b1;
245
- out[1] = a1 * b0 + a3 * b1;
246
- out[2] = a0 * b2 + a2 * b3;
247
- out[3] = a1 * b2 + a3 * b3;
248
- return out;
249
- }
250
-
251
- /**
252
- * Rotates a Mat2 by the given angle
253
- *
254
- * @param {Mat2} out the receiving matrix
255
- * @param {Mat2} a the matrix to rotate
256
- * @param {Number} rad the angle to rotate the matrix by
257
- * @returns {Mat2} out
258
- */
259
-
260
- export function rotate(out: Mat2, a: Mat2, rad: number) {
261
- const a0 = a[0],
262
- a1 = a[1],
263
- a2 = a[2],
264
- a3 = a[3];
265
- const s = Math.sin(rad);
266
- const c = Math.cos(rad);
267
- out[0] = a0 * c + a2 * s;
268
- out[1] = a1 * c + a3 * s;
269
- out[2] = a0 * -s + a2 * c;
270
- out[3] = a1 * -s + a3 * c;
271
- return out;
272
- }
273
-
274
- /**
275
- * Scales the Mat2 by the dimensions in the given vec2
276
- *
277
- * @param {Mat2} out the receiving matrix
278
- * @param {Mat2} a the matrix to rotate
279
- * @param {Vec2} v the vec2 to scale the matrix by
280
- * @returns {Mat2} out
281
- **/
282
-
283
- export function scale(out: Mat2, a: Mat2, v: Vec2): Mat2 {
284
- const a0 = a[0],
285
- a1 = a[1],
286
- a2 = a[2],
287
- a3 = a[3];
288
- const v0 = v[0],
289
- v1 = v[1];
290
- out[0] = a0 * v0;
291
- out[1] = a1 * v0;
292
- out[2] = a2 * v1;
293
- out[3] = a3 * v1;
294
- return out;
295
- }
296
-
297
- /**
298
- * Creates a matrix from a given angle
299
- * This is equivalent to (but much faster than):
300
- *
301
- * Mat2.identity(dest);
302
- * Mat2.rotate(dest, dest, rad);
303
- *
304
- * @param {Mat2} out Mat2 receiving operation result
305
- * @param {number} rad the angle to rotate the matrix by
306
- * @returns {Mat2} out
307
- */
308
-
309
- export function fromRotation(out: Mat2, rad: number): Mat2 {
310
- const s = Math.sin(rad);
311
- const c = Math.cos(rad);
312
- out[0] = c;
313
- out[1] = s;
314
- out[2] = -s;
315
- out[3] = c;
316
- return out;
317
- }
318
-
319
- /**
320
- * Creates a matrix from a vector scaling
321
- * This is equivalent to (but much faster than):
322
- *
323
- * Mat2.identity(dest);
324
- * Mat2.scale(dest, dest, vec);
325
- *
326
- * @param {Mat2} out Mat2 receiving operation result
327
- * @param {Vec2} v Scaling vector
328
- * @returns {Mat2} out
329
- */
330
-
331
- export function fromScaling(out: Mat2, v: Vec2) {
332
- out[0] = v[0];
333
- out[1] = 0;
334
- out[2] = 0;
335
- out[3] = v[1];
336
- return out;
337
- }
338
-
339
- /**
340
- * Returns a string representation of a Mat2
341
- *
342
- * @param {Mat2} a matrix to represent as a string
343
- * @returns {String} string representation of the matrix
344
- */
345
-
346
- export function str(a: Mat2): string {
347
- return `Mat2(${a[0]}, ${a[1]}, ${a[2]}, ${a[3]})`;
348
- }
349
-
350
- /**
351
- * Returns Frobenius norm of a Mat2
352
- *
353
- * @param {Mat2} a the matrix to calculate Frobenius norm of
354
- * @returns {Number} Frobenius norm
355
- */
356
-
357
- export function frob(a: Mat2): number {
358
- return Math.hypot(a[0], a[1], a[2], a[3]);
359
- }
360
-
361
- /**
362
- * Returns L, D and U matrices (Lower triangular, Diagonal and Upper triangular) by factorizing the input matrix
363
- * @param {Mat2} L the lower triangular matrix
364
- * @param {Mat2} D the diagonal matrix
365
- * @param {Mat2} U the upper triangular matrix
366
- * @param {Mat2} a the input matrix to factorize
367
- */
368
-
369
- export function LDU(L: Mat2, D: Mat2, U: Mat2, a: Mat2): Mat2[] {
370
- L[2] = a[2] / a[0];
371
- U[0] = a[0];
372
- U[1] = a[1];
373
- U[3] = a[3] - L[2] * U[1];
374
- return [L, D, U];
375
- }
376
-
377
- /**
378
- * Adds two Mat2's
379
- *
380
- * @param {Mat2} out the receiving matrix
381
- * @param {Mat2} a the first operand
382
- * @param {Mat2} b the second operand
383
- * @returns {Mat2} out
384
- */
385
-
386
- export function add(out: Mat2, a: Mat2, b: Mat2): Mat2 {
387
- out[0] = a[0] + b[0];
388
- out[1] = a[1] + b[1];
389
- out[2] = a[2] + b[2];
390
- out[3] = a[3] + b[3];
391
- return out;
392
- }
393
-
394
- /**
395
- * Subtracts matrix b from matrix a
396
- *
397
- * @param {Mat2} out the receiving matrix
398
- * @param {Mat2} a the first operand
399
- * @param {Mat2} b the second operand
400
- * @returns {Mat2} out
401
- */
402
-
403
- export function subtract(out: Mat2, a: Mat2, b: Mat2): Mat2 {
404
- out[0] = a[0] - b[0];
405
- out[1] = a[1] - b[1];
406
- out[2] = a[2] - b[2];
407
- out[3] = a[3] - b[3];
408
- return out;
409
- }
410
-
411
- /**
412
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
413
- *
414
- * @param {Mat2} a The first matrix.
415
- * @param {Mat2} b The second matrix.
416
- * @returns {Boolean} True if the matrices are equal, false otherwise.
417
- */
418
-
419
- export function exactEquals(a: Mat2, b: Mat2): boolean {
420
- return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
421
- }
422
-
423
- /**
424
- * Returns whether or not the matrices have approximately the same elements in the same position.
425
- *
426
- * @param {Mat2} a The first matrix.
427
- * @param {Mat2} b The second matrix.
428
- * @returns {Boolean} True if the matrices are equal, false otherwise.
429
- */
430
-
431
- export function equals(a: Mat2, b: Mat2): boolean {
432
- const a0 = a[0],
433
- a1 = a[1],
434
- a2 = a[2],
435
- a3 = a[3];
436
- const b0 = b[0],
437
- b1 = b[1],
438
- b2 = b[2],
439
- b3 = b[3];
440
- return (
441
- Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&
442
- Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&
443
- Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&
444
- Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3))
445
- );
446
- }
447
-
448
- /**
449
- * Multiply each element of the matrix by a scalar.
450
- *
451
- * @param {Mat2} out the receiving matrix
452
- * @param {Mat2} a the matrix to scale
453
- * @param {Number} b amount to scale the matrix's elements by
454
- * @returns {Mat2} out
455
- */
456
-
457
- export function multiplyScalar(out: Mat2, a: Mat2, b: number): Mat2 {
458
- out[0] = a[0] * b;
459
- out[1] = a[1] * b;
460
- out[2] = a[2] * b;
461
- out[3] = a[3] * b;
462
- return out;
463
- }
464
-
465
- /**
466
- * Adds two Mat2's after multiplying each element of the second operand by a scalar value.
467
- *
468
- * @param {Mat2} out the receiving vector
469
- * @param {Mat2} a the first operand
470
- * @param {Mat2} b the second operand
471
- * @param {Number} scale the amount to scale b's elements by before adding
472
- * @returns {Mat2} out
473
- */
474
-
475
- export function multiplyScalarAndAdd(
476
- out: Mat2,
477
- a: Mat2,
478
- b: Mat2,
479
- scale: number,
480
- ): Mat2 {
481
- out[0] = a[0] + b[0] * scale;
482
- out[1] = a[1] + b[1] * scale;
483
- out[2] = a[2] + b[2] * scale;
484
- out[3] = a[3] + b[3] * scale;
485
- return out;
486
- }
487
-
488
- /**
489
- * Alias for {@link multiply}
490
- * @function
491
- */
492
-
493
- export const mul = multiply;
494
- /**
495
- * Alias for {@link subtract}
496
- * @function
497
- */
498
-
499
- export const sub = subtract;