@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,547 +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 Float32ArrayLen6,
24
- type NumberArrayLen6,
25
- } from './common.js';
26
-
27
- import type { Vec2 } from './vec2.js';
28
-
29
- export type Mat2d = Float32ArrayLen6 | NumberArrayLen6;
30
- /**
31
- * 2x3 Matrix
32
- * @description
33
- * A mat2d contains six elements defined as:
34
- * <pre>
35
- * [a, b,
36
- * c, d,
37
- * tx, ty]
38
- * </pre>
39
- * This is a short form for the 3x3 matrix:
40
- * <pre>
41
- * [a, b, 0,
42
- * c, d, 0,
43
- * tx, ty, 1]
44
- * </pre>
45
- * The last column is ignored so the array is shorter and operations are faster.
46
- */
47
-
48
- /**
49
- * Creates a new identity mat2d
50
- *
51
- * @returns {mat2d} a new 2x3 matrix
52
- */
53
-
54
- export function create(): Mat2d {
55
- const out = getMatrixArrayType(6) as Mat2d;
56
-
57
- if (!(out instanceof Float32Array)) {
58
- out[1] = 0;
59
- out[2] = 0;
60
- out[4] = 0;
61
- out[5] = 0;
62
- }
63
-
64
- out[0] = 1;
65
- out[3] = 1;
66
- return out;
67
- }
68
- /**
69
- * Creates a new mat2d initialized with values from an existing matrix
70
- *
71
- * @param {Mat2d} a matrix to clone
72
- * @returns {mat2d} a new 2x3 matrix
73
- */
74
-
75
- export function clone(a: Mat2d): Mat2d {
76
- const out = getMatrixArrayType(6) as Mat2d;
77
- out[0] = a[0];
78
- out[1] = a[1];
79
- out[2] = a[2];
80
- out[3] = a[3];
81
- out[4] = a[4];
82
- out[5] = a[5];
83
- return out;
84
- }
85
- /**
86
- * Copy the values from one mat2d to another
87
- *
88
- * @param {mat2d} out the receiving matrix
89
- * @param {Mat2d} a the source matrix
90
- * @returns {mat2d} out
91
- */
92
-
93
- export function copy(out: Mat2d, a: Mat2d): Mat2d {
94
- out[0] = a[0];
95
- out[1] = a[1];
96
- out[2] = a[2];
97
- out[3] = a[3];
98
- out[4] = a[4];
99
- out[5] = a[5];
100
- return out;
101
- }
102
- /**
103
- * Set a mat2d to the identity matrix
104
- *
105
- * @param {mat2d} out the receiving matrix
106
- * @returns {mat2d} out
107
- */
108
-
109
- export function identity(out: Mat2d): Mat2d {
110
- out[0] = 1;
111
- out[1] = 0;
112
- out[2] = 0;
113
- out[3] = 1;
114
- out[4] = 0;
115
- out[5] = 0;
116
- return out;
117
- }
118
- /**
119
- * Create a new mat2d with the given values
120
- *
121
- * @param {Number} a Component A (index 0)
122
- * @param {Number} b Component B (index 1)
123
- * @param {Number} c Component C (index 2)
124
- * @param {Number} d Component D (index 3)
125
- * @param {Number} tx Component TX (index 4)
126
- * @param {Number} ty Component TY (index 5)
127
- * @returns {mat2d} A new mat2d
128
- */
129
-
130
- export function fromValues(
131
- a: number,
132
- b: number,
133
- c: number,
134
- d: number,
135
- tx: number,
136
- ty: number,
137
- ): Mat2d {
138
- const out = getMatrixArrayType(6) as Mat2d;
139
- out[0] = a;
140
- out[1] = b;
141
- out[2] = c;
142
- out[3] = d;
143
- out[4] = tx;
144
- out[5] = ty;
145
- return out;
146
- }
147
- /**
148
- * Set the components of a mat2d to the given values
149
- *
150
- * @param {mat2d} out the receiving matrix
151
- * @param {Number} a Component A (index 0)
152
- * @param {Number} b Component B (index 1)
153
- * @param {Number} c Component C (index 2)
154
- * @param {Number} d Component D (index 3)
155
- * @param {Number} tx Component TX (index 4)
156
- * @param {Number} ty Component TY (index 5)
157
- * @returns {mat2d} out
158
- */
159
-
160
- export function set(
161
- out: Mat2d,
162
- a: number,
163
- b: number,
164
- c: number,
165
- d: number,
166
- tx: number,
167
- ty: number,
168
- ): Mat2d {
169
- out[0] = a;
170
- out[1] = b;
171
- out[2] = c;
172
- out[3] = d;
173
- out[4] = tx;
174
- out[5] = ty;
175
- return out;
176
- }
177
- /**
178
- * Inverts a mat2d
179
- *
180
- * @param {mat2d} out the receiving matrix
181
- * @param {Mat2d} a the source matrix
182
- * @returns {mat2d} out
183
- */
184
-
185
- export function invert(out: Mat2d, a: Mat2d): Mat2d | null {
186
- const aa = a[0],
187
- ab = a[1],
188
- ac = a[2],
189
- ad = a[3];
190
- const atx = a[4],
191
- aty = a[5];
192
- let det = aa * ad - ab * ac;
193
-
194
- if (!det) {
195
- return null;
196
- }
197
-
198
- det = 1.0 / det;
199
- out[0] = ad * det;
200
- out[1] = -ab * det;
201
- out[2] = -ac * det;
202
- out[3] = aa * det;
203
- out[4] = (ac * aty - ad * atx) * det;
204
- out[5] = (ab * atx - aa * aty) * det;
205
- return out;
206
- }
207
- /**
208
- * Calculates the determinant of a mat2d
209
- *
210
- * @param {Mat2d} a the source matrix
211
- * @returns {Number} determinant of a
212
- */
213
-
214
- export function determinant(a: Mat2d): number {
215
- return a[0] * a[3] - a[1] * a[2];
216
- }
217
- /**
218
- * Multiplies two mat2d's
219
- *
220
- * @param {mat2d} out the receiving matrix
221
- * @param {Mat2d} a the first operand
222
- * @param {Mat2d} b the second operand
223
- * @returns {mat2d} out
224
- */
225
-
226
- export function multiply(out: Mat2d, a: Mat2d, b: Mat2d): Mat2d {
227
- const a0 = a[0],
228
- a1 = a[1],
229
- a2 = a[2],
230
- a3 = a[3],
231
- a4 = a[4],
232
- a5 = a[5];
233
- const b0 = b[0],
234
- b1 = b[1],
235
- b2 = b[2],
236
- b3 = b[3],
237
- b4 = b[4],
238
- b5 = b[5];
239
- out[0] = a0 * b0 + a2 * b1;
240
- out[1] = a1 * b0 + a3 * b1;
241
- out[2] = a0 * b2 + a2 * b3;
242
- out[3] = a1 * b2 + a3 * b3;
243
- out[4] = a0 * b4 + a2 * b5 + a4;
244
- out[5] = a1 * b4 + a3 * b5 + a5;
245
- return out;
246
- }
247
- /**
248
- * Rotates a mat2d by the given angle
249
- *
250
- * @param {mat2d} out the receiving matrix
251
- * @param {Mat2d} a the matrix to rotate
252
- * @param {Number} rad the angle to rotate the matrix by
253
- * @returns {mat2d} out
254
- */
255
-
256
- export function rotate(out: Mat2d, a: Mat2d, rad: number): Mat2d {
257
- const a0 = a[0],
258
- a1 = a[1],
259
- a2 = a[2],
260
- a3 = a[3],
261
- a4 = a[4],
262
- a5 = a[5];
263
- const s = Math.sin(rad);
264
- const c = Math.cos(rad);
265
- out[0] = a0 * c + a2 * s;
266
- out[1] = a1 * c + a3 * s;
267
- out[2] = a0 * -s + a2 * c;
268
- out[3] = a1 * -s + a3 * c;
269
- out[4] = a4;
270
- out[5] = a5;
271
- return out;
272
- }
273
- /**
274
- * Scales the mat2d by the dimensions in the given vec2
275
- *
276
- * @param {mat2d} out the receiving matrix
277
- * @param {Mat2d} a the matrix to translate
278
- * @param {Vec2} v the vec2 to scale the matrix by
279
- * @returns {mat2d} out
280
- **/
281
-
282
- export function scale(out: Mat2d, a: Mat2d, v: Vec2): Mat2d {
283
- const a0 = a[0],
284
- a1 = a[1],
285
- a2 = a[2],
286
- a3 = a[3],
287
- a4 = a[4],
288
- a5 = a[5];
289
- const v0 = v[0],
290
- v1 = v[1];
291
- out[0] = a0 * v0;
292
- out[1] = a1 * v0;
293
- out[2] = a2 * v1;
294
- out[3] = a3 * v1;
295
- out[4] = a4;
296
- out[5] = a5;
297
- return out;
298
- }
299
- /**
300
- * Translates the mat2d by the dimensions in the given vec2
301
- *
302
- * @param {mat2d} out the receiving matrix
303
- * @param {Mat2d} a the matrix to translate
304
- * @param {Vec2} v the vec2 to translate the matrix by
305
- * @returns {mat2d} out
306
- **/
307
-
308
- export function translate(out: Mat2d, a: Mat2d, v: Vec2): Mat2d {
309
- const a0 = a[0],
310
- a1 = a[1],
311
- a2 = a[2],
312
- a3 = a[3],
313
- a4 = a[4],
314
- a5 = a[5];
315
- const v0 = v[0],
316
- v1 = v[1];
317
- out[0] = a0;
318
- out[1] = a1;
319
- out[2] = a2;
320
- out[3] = a3;
321
- out[4] = a0 * v0 + a2 * v1 + a4;
322
- out[5] = a1 * v0 + a3 * v1 + a5;
323
- return out;
324
- }
325
- /**
326
- * Creates a matrix from a given angle
327
- * This is equivalent to (but much faster than):
328
- *
329
- * mat2d.identity(dest);
330
- * mat2d.rotate(dest, dest, rad);
331
- *
332
- * @param {mat2d} out mat2d receiving operation result
333
- * @param {Number} rad the angle to rotate the matrix by
334
- * @returns {mat2d} out
335
- */
336
-
337
- export function fromRotation(out: Mat2d, rad: number): Mat2d {
338
- const s = Math.sin(rad),
339
- c = Math.cos(rad);
340
- out[0] = c;
341
- out[1] = s;
342
- out[2] = -s;
343
- out[3] = c;
344
- out[4] = 0;
345
- out[5] = 0;
346
- return out;
347
- }
348
- /**
349
- * Creates a matrix from a vector scaling
350
- * This is equivalent to (but much faster than):
351
- *
352
- * mat2d.identity(dest);
353
- * mat2d.scale(dest, dest, vec);
354
- *
355
- * @param {mat2d} out mat2d receiving operation result
356
- * @param {Vec2} v Scaling vector
357
- * @returns {mat2d} out
358
- */
359
-
360
- export function fromScaling(out: Mat2d, v: Vec2): Mat2d {
361
- out[0] = v[0];
362
- out[1] = 0;
363
- out[2] = 0;
364
- out[3] = v[1];
365
- out[4] = 0;
366
- out[5] = 0;
367
- return out;
368
- }
369
- /**
370
- * Creates a matrix from a vector translation
371
- * This is equivalent to (but much faster than):
372
- *
373
- * mat2d.identity(dest);
374
- * mat2d.translate(dest, dest, vec);
375
- *
376
- * @param {mat2d} out mat2d receiving operation result
377
- * @param {Vec2} v Translation vector
378
- * @returns {mat2d} out
379
- */
380
-
381
- export function fromTranslation(out: Mat2d, v: Vec2): Mat2d {
382
- out[0] = 1;
383
- out[1] = 0;
384
- out[2] = 0;
385
- out[3] = 1;
386
- out[4] = v[0];
387
- out[5] = v[1];
388
- return out;
389
- }
390
- /**
391
- * Returns a string representation of a mat2d
392
- *
393
- * @param {Mat2d} a matrix to represent as a string
394
- * @returns {String} string representation of the matrix
395
- */
396
-
397
- export function str(a: Mat2d): string {
398
- return `mat2d(${a[0]}, ${a[1]}, ${a[2]}, ${a[3]}, ${a[4]}, ${a[5]})`;
399
- }
400
- /**
401
- * Returns Frobenius norm of a mat2d
402
- *
403
- * @param {Mat2d} a the matrix to calculate Frobenius norm of
404
- * @returns {Number} Frobenius norm
405
- */
406
-
407
- export function frob(a: Mat2d): number {
408
- return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], 1);
409
- }
410
- /**
411
- * Adds two mat2d's
412
- *
413
- * @param {mat2d} out the receiving matrix
414
- * @param {Mat2d} a the first operand
415
- * @param {Mat2d} b the second operand
416
- * @returns {mat2d} out
417
- */
418
-
419
- export function add(out: Mat2d, a: Mat2d, b: Mat2d): Mat2d {
420
- out[0] = a[0] + b[0];
421
- out[1] = a[1] + b[1];
422
- out[2] = a[2] + b[2];
423
- out[3] = a[3] + b[3];
424
- out[4] = a[4] + b[4];
425
- out[5] = a[5] + b[5];
426
- return out;
427
- }
428
- /**
429
- * Subtracts matrix b from matrix a
430
- *
431
- * @param {mat2d} out the receiving matrix
432
- * @param {Mat2d} a the first operand
433
- * @param {Mat2d} b the second operand
434
- * @returns {mat2d} out
435
- */
436
-
437
- export function subtract(out: Mat2d, a: Mat2d, b: Mat2d): Mat2d {
438
- out[0] = a[0] - b[0];
439
- out[1] = a[1] - b[1];
440
- out[2] = a[2] - b[2];
441
- out[3] = a[3] - b[3];
442
- out[4] = a[4] - b[4];
443
- out[5] = a[5] - b[5];
444
- return out;
445
- }
446
- /**
447
- * Multiply each element of the matrix by a scalar.
448
- *
449
- * @param {mat2d} out the receiving matrix
450
- * @param {Mat2d} a the matrix to scale
451
- * @param {Number} b amount to scale the matrix's elements by
452
- * @returns {mat2d} out
453
- */
454
-
455
- export function multiplyScalar(out: Mat2d, a: Mat2d, b: number): Mat2d {
456
- out[0] = a[0] * b;
457
- out[1] = a[1] * b;
458
- out[2] = a[2] * b;
459
- out[3] = a[3] * b;
460
- out[4] = a[4] * b;
461
- out[5] = a[5] * b;
462
- return out;
463
- }
464
- /**
465
- * Adds two mat2d's after multiplying each element of the second operand by a scalar value.
466
- *
467
- * @param {mat2d} out the receiving vector
468
- * @param {Mat2d} a the first operand
469
- * @param {Mat2d} b the second operand
470
- * @param {Number} scale the amount to scale b's elements by before adding
471
- * @returns {mat2d} out
472
- */
473
-
474
- export function multiplyScalarAndAdd(
475
- out: Mat2d,
476
- a: Mat2d,
477
- b: Mat2d,
478
- scale: number,
479
- ): Mat2d {
480
- out[0] = a[0] + b[0] * scale;
481
- out[1] = a[1] + b[1] * scale;
482
- out[2] = a[2] + b[2] * scale;
483
- out[3] = a[3] + b[3] * scale;
484
- out[4] = a[4] + b[4] * scale;
485
- out[5] = a[5] + b[5] * scale;
486
- return out;
487
- }
488
- /**
489
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
490
- *
491
- * @param {Mat2d} a The first matrix.
492
- * @param {Mat2d} b The second matrix.
493
- * @returns {Boolean} True if the matrices are equal, false otherwise.
494
- */
495
-
496
- export function exactEquals(a: Mat2d, b: Mat2d): boolean {
497
- return (
498
- a[0] === b[0] &&
499
- a[1] === b[1] &&
500
- a[2] === b[2] &&
501
- a[3] === b[3] &&
502
- a[4] === b[4] &&
503
- a[5] === b[5]
504
- );
505
- }
506
- /**
507
- * Returns whether or not the matrices have approximately the same elements in the same position.
508
- *
509
- * @param {Mat2d} a The first matrix.
510
- * @param {Mat2d} b The second matrix.
511
- * @returns {Boolean} True if the matrices are equal, false otherwise.
512
- */
513
-
514
- export function equals(a: Mat2d, b: Mat2d): boolean {
515
- const a0 = a[0],
516
- a1 = a[1],
517
- a2 = a[2],
518
- a3 = a[3],
519
- a4 = a[4],
520
- a5 = a[5];
521
- const b0 = b[0],
522
- b1 = b[1],
523
- b2 = b[2],
524
- b3 = b[3],
525
- b4 = b[4],
526
- b5 = b[5];
527
- return (
528
- Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&
529
- Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&
530
- Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) &&
531
- Math.abs(a3 - b3) <= EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) &&
532
- Math.abs(a4 - b4) <= EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) &&
533
- Math.abs(a5 - b5) <= EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5))
534
- );
535
- }
536
- /**
537
- * Alias for {@link multiply}
538
- * @function
539
- */
540
-
541
- export const mul = multiply;
542
- /**
543
- * Alias for {@link subtract}
544
- * @function
545
- */
546
-
547
- export const sub = subtract;