@woosh/meep-engine 2.109.0 → 2.109.1

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 (65) hide show
  1. package/build/meep.cjs +28 -13
  2. package/build/meep.min.js +1 -1
  3. package/build/meep.module.js +28 -13
  4. package/package.json +1 -1
  5. package/src/core/binary/BitSet.d.ts +6 -0
  6. package/src/core/binary/BitSet.d.ts.map +1 -1
  7. package/src/core/binary/BitSet.js +14 -42
  8. package/src/core/binary/align_32.d.ts +7 -0
  9. package/src/core/binary/align_32.d.ts.map +1 -0
  10. package/src/core/binary/align_32.js +8 -0
  11. package/src/core/binary/align_32.spec.d.ts +2 -0
  12. package/src/core/binary/align_32.spec.d.ts.map +1 -0
  13. package/src/core/binary/align_32.spec.js +11 -0
  14. package/src/core/binary/align_4.js +2 -1
  15. package/src/core/binary/lsb_32.d.ts +9 -0
  16. package/src/core/binary/lsb_32.d.ts.map +1 -0
  17. package/src/core/binary/lsb_32.js +12 -0
  18. package/src/core/binary/msb_32.d.ts +2 -0
  19. package/src/core/binary/msb_32.d.ts.map +1 -0
  20. package/src/core/binary/msb_32.js +20 -0
  21. package/src/core/binary/msb_lut_de_bruijn.d.ts +7 -0
  22. package/src/core/binary/msb_lut_de_bruijn.d.ts.map +1 -0
  23. package/src/core/binary/msb_lut_de_bruijn.js +9 -0
  24. package/src/core/geom/3d/sphere/harmonics/sh3_convolve_with_cosine_kernel.js +2 -1
  25. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.d.ts +12 -0
  26. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.d.ts.map +1 -0
  27. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.js +40 -0
  28. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.d.ts +2 -0
  29. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.d.ts.map +1 -0
  30. package/src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.js +27 -0
  31. package/src/core/geom/vec/vector_copy.d.ts +10 -0
  32. package/src/core/geom/vec/vector_copy.d.ts.map +1 -0
  33. package/src/core/geom/vec/vector_copy.js +13 -0
  34. package/src/core/{math/vector_nd_dot.d.ts → geom/vec/vector_dot.d.ts} +2 -2
  35. package/src/core/geom/vec/vector_dot.d.ts.map +1 -0
  36. package/src/core/{math/vector_nd_dot.js → geom/vec/vector_dot.js} +1 -1
  37. package/src/core/{math/vector_nd_normalize.d.ts → geom/vec/vector_normalize.d.ts} +2 -2
  38. package/src/core/geom/vec/vector_normalize.d.ts.map +1 -0
  39. package/src/core/{math/vector_nd_normalize.js → geom/vec/vector_normalize.js} +1 -1
  40. package/src/core/geom/vec/vector_normalize.spec.d.ts +2 -0
  41. package/src/core/geom/vec/vector_normalize.spec.d.ts.map +1 -0
  42. package/src/core/{math/vector_nd_normalize.spec.js → geom/vec/vector_normalize.spec.js} +3 -3
  43. package/src/core/geom/vec/vector_scale_array.d.ts +11 -0
  44. package/src/core/geom/vec/vector_scale_array.d.ts.map +1 -0
  45. package/src/core/geom/vec/vector_scale_array.js +31 -0
  46. package/src/core/geom/vec3/v3_dot_array_array.js +2 -0
  47. package/src/core/model/node-graph/node/NodeInstance.d.ts.map +1 -1
  48. package/src/core/model/node-graph/node/NodeInstance.js +18 -0
  49. package/src/engine/graphics/sh3/fromCubeRenderTarget.d.ts.map +1 -1
  50. package/src/engine/graphics/sh3/fromCubeRenderTarget.js +14 -17
  51. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts +3 -2
  52. package/src/engine/graphics/sh3/lpv/LightProbeVolume.d.ts.map +1 -1
  53. package/src/engine/graphics/sh3/lpv/LightProbeVolume.js +21 -11
  54. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.d.ts.map +1 -1
  55. package/src/engine/graphics/sh3/lpv/PathTracerProbeRenderer.js +8 -15
  56. package/src/engine/graphics/sh3/prototypeSH3Probe.js +19 -3
  57. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts +11 -1
  58. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.d.ts.map +1 -1
  59. package/src/engine/graphics/sh3/visualise_spherical_harmonic_sphere.js +33 -16
  60. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.d.ts.map +1 -1
  61. package/src/engine/sound/material/detector/terrain/TerrainSoundMaterialSurfaceDetector.js +6 -6
  62. package/src/core/math/vector_nd_dot.d.ts.map +0 -1
  63. package/src/core/math/vector_nd_normalize.d.ts.map +0 -1
  64. package/src/core/math/vector_nd_normalize.spec.d.ts +0 -2
  65. package/src/core/math/vector_nd_normalize.spec.d.ts.map +0 -1
@@ -59953,7 +59953,7 @@ const DEFAULT_INITIAL_CAPACITY_POWER = 4;
59953
59953
  * @readonly
59954
59954
  * @type {number}
59955
59955
  */
59956
- const DEFAULT_INITIAL_CAPACITY = 2 ** DEFAULT_INITIAL_CAPACITY_POWER;
59956
+ const DEFAULT_INITIAL_CAPACITY$1 = 2 ** DEFAULT_INITIAL_CAPACITY_POWER;
59957
59957
 
59958
59958
  /**
59959
59959
  * @readonly
@@ -60082,7 +60082,7 @@ class HashMap {
60082
60082
  constructor({
60083
60083
  keyHashFunction = invokeObjectHash,
60084
60084
  keyEqualityFunction = invokeObjectEquals,
60085
- capacity = DEFAULT_INITIAL_CAPACITY,
60085
+ capacity = DEFAULT_INITIAL_CAPACITY$1,
60086
60086
  loadFactor = DEFAULT_LOAD_FACTOR
60087
60087
  } = {}) {
60088
60088
 
@@ -70775,16 +70775,25 @@ const EntityFlags = {
70775
70775
  WatchDestruction: 4
70776
70776
  };
70777
70777
 
70778
+ /**
70779
+ * Align to the nearest number divisible by 32, rounding up
70780
+ * @param {number} n
70781
+ * @returns {number}
70782
+ */
70783
+ function align_32(n) {
70784
+ return ((n + 31) >>> 5) << 5
70785
+ }
70786
+
70778
70787
  /**
70779
70788
  * de Bruijn sequence
70780
70789
  * @see https://graphics.stanford.edu/~seander/bithacks.html
70781
70790
  * @type {Uint8Array}
70782
70791
  */
70783
- const msb_lut = new Uint8Array([
70792
+ const msb_lut_de_bruijn = new Uint8Array([
70784
70793
  0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
70785
70794
  31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
70786
- ]);
70787
-
70795
+ ]);
70796
+
70788
70797
  /**
70789
70798
  * Get index of the least significant set bit
70790
70799
  * Also known as ctz32 or "count trailing zeroes"
@@ -70793,9 +70802,9 @@ const msb_lut = new Uint8Array([
70793
70802
  * @returns {number}
70794
70803
  */
70795
70804
  function lsb_32(v) {
70796
- return msb_lut[((v & -v) * 0x077CB531) >>> 27];
70797
- }
70798
-
70805
+ return msb_lut_de_bruijn[((v & -v) * 0x077CB531) >>> 27];
70806
+ }
70807
+
70799
70808
  /**
70800
70809
  * Used for overallocating space when bit set needs to grow
70801
70810
  * @constant
@@ -70816,12 +70825,20 @@ const SHRINK_FACTOR$1 = 0.5;
70816
70825
  */
70817
70826
  const RESIZE_COUNT_THRESHOLD = 128;
70818
70827
 
70828
+ /**
70829
+ * @readonly
70830
+ * @type {number}
70831
+ */
70832
+ const DEFAULT_INITIAL_CAPACITY = 64;
70833
+
70819
70834
  class BitSet {
70820
70835
  /**
70821
70836
  * Dynamically sized bit field
70822
70837
  * @constructor
70838
+ * @param {number} [initial_capacity]
70823
70839
  */
70824
- constructor() {
70840
+ constructor(initial_capacity = DEFAULT_INITIAL_CAPACITY) {
70841
+
70825
70842
  /**
70826
70843
  * Number of bits currently in use
70827
70844
  * @private
@@ -70834,7 +70851,7 @@ class BitSet {
70834
70851
  * @private
70835
70852
  * @type {number}
70836
70853
  */
70837
- this.__capacity = 64;
70854
+ this.__capacity = align_32(initial_capacity);
70838
70855
 
70839
70856
  /**
70840
70857
  * Uint32-backed storage
@@ -71360,9 +71377,7 @@ class BitSet {
71360
71377
  * @returns {BitSet}
71361
71378
  */
71362
71379
  static fixedSize(x) {
71363
- const r = new BitSet();
71364
-
71365
- r.setCapacity(x);
71380
+ const r = new BitSet(x);
71366
71381
 
71367
71382
  //prevent resizing
71368
71383
  r.__shrinkFactor = 0;
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.109.0",
8
+ "version": "2.109.1",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -5,6 +5,12 @@ export class BitSet {
5
5
  * @returns {BitSet}
6
6
  */
7
7
  static fixedSize(x: number): BitSet;
8
+ /**
9
+ * Dynamically sized bit field
10
+ * @constructor
11
+ * @param {number} [initial_capacity]
12
+ */
13
+ constructor(initial_capacity?: number);
8
14
  /**
9
15
  * Number of bits currently in use
10
16
  * @private
@@ -1 +1 @@
1
- {"version":3,"file":"BitSet.d.ts","sourceRoot":"","sources":["../../../../src/core/binary/BitSet.js"],"names":[],"mappings":"AA6DA;IAsiBI;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAWlB;IA9iBG;;;;OAIG;IACH,iBAAiB;IAEjB;;;;OAIG;IACH,mBAAoB;IAEpB;;;;OAIG;IACH,sBAA0D;IAE1D;;OAEG;IACH,gBAFU,MAAM,CAEmB;IAGvC,sBAEC;IAED;;;OAGG;IACH,mBAFW,MAAM,QAOhB;IAED;;;OAGG;IACH,uBAFW,MAAM,QAUhB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,YAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,iBAsBC;IAED,uBAMC;IAED;;;;OAIG;IACH,oBAyBC;IAED;;;;OAIG;IACH,oCAqCC;IAED;;;;OAIG;IACH,4BAFa,MAAM,CAuDlB;IAED;;;;OAIG;IACH,8BAFa,MAAM,CAkDlB;IAED;;;;OAIG;IACH,0BAFW,OAAO,QAmCjB;IAED;;;OAGG;IACH,2BAEC;IAED;;;;OAIG;IACH,qBAHW,MAAM,YACN,MAAM,QAWhB;IAED;;;;OAIG;IACH,uBAHW,MAAM,YACN,MAAM,QAShB;IAED;;;OAGG;IACH,SAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAFa,OAAO,CAkBnB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,OAAO,CAUnB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,OAAO,CAUnB;IAED;;;;;OAKG;IACH,sBAJW,MAAM,eACN,MAAM,aACN,MAAM,QAShB;IAED;;;;;OAKG;IACH,qBAJW,MAAM,eACN,MAAM,aACN,MAAM,QAShB;IAED;;;;;OAKG;IACH,gBAJW,MAAM,eACN,MAAM,aACN,MAAM,QAQhB;IAED;;OAEG;IACH,cAgBC;IAED;;;OAGG;IACH,YAFW,MAAM,QAoChB;CAiBJ"}
1
+ {"version":3,"file":"BitSet.d.ts","sourceRoot":"","sources":["../../../../src/core/binary/BitSet.js"],"names":[],"mappings":"AAgCA;IAyiBI;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CASlB;IApjBD;;;;OAIG;IACH,+BAFW,MAAM,EA8BhB;IAzBG;;;;OAIG;IACH,iBAAiB;IAEjB;;;;OAIG;IACH,mBAA4C;IAE5C;;;;OAIG;IACH,sBAA0D;IAE1D;;OAEG;IACH,gBAFU,MAAM,CAEmB;IAGvC,sBAEC;IAED;;;OAGG;IACH,mBAFW,MAAM,QAOhB;IAED;;;OAGG;IACH,uBAFW,MAAM,QAUhB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;IAED;;;OAGG;IACH,YAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,iBAsBC;IAED,uBAMC;IAED;;;;OAIG;IACH,oBAyBC;IAED;;;;OAIG;IACH,oCAqCC;IAED;;;;OAIG;IACH,4BAFa,MAAM,CAuDlB;IAED;;;;OAIG;IACH,8BAFa,MAAM,CAkDlB;IAED;;;;OAIG;IACH,0BAFW,OAAO,QAmCjB;IAED;;;OAGG;IACH,2BAEC;IAED;;;;OAIG;IACH,qBAHW,MAAM,YACN,MAAM,QAWhB;IAED;;;;OAIG;IACH,uBAHW,MAAM,YACN,MAAM,QAShB;IAED;;;OAGG;IACH,SAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAFa,OAAO,CAkBnB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,OAAO,CAUnB;IAED;;;;OAIG;IACH,mBAHW,MAAM,GACJ,OAAO,CAUnB;IAED;;;;;OAKG;IACH,sBAJW,MAAM,eACN,MAAM,aACN,MAAM,QAShB;IAED;;;;;OAKG;IACH,qBAJW,MAAM,eACN,MAAM,aACN,MAAM,QAShB;IAED;;;;;OAKG;IACH,gBAJW,MAAM,eACN,MAAM,aACN,MAAM,QAQhB;IAED;;OAEG;IACH,cAgBC;IAED;;;OAGG;IACH,YAFW,MAAM,QAoChB;CAeJ"}
@@ -1,43 +1,8 @@
1
1
  import { assert } from "../assert.js";
2
2
  import { max3 } from "../math/max3.js";
3
3
  import { min2 } from "../math/min2.js";
4
-
5
- /**
6
- * de Bruijn sequence
7
- * @see https://graphics.stanford.edu/~seander/bithacks.html
8
- * @type {Uint8Array}
9
- */
10
- const msb_lut = new Uint8Array([
11
- 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
12
- 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
13
- ]);
14
-
15
- /**
16
- * get most significant set bit
17
- * @see https://graphics.stanford.edu/~seander/bithacks.html
18
- * @param {number} v 32 bit integer
19
- * @returns {number} integer position of most significant bit
20
- */
21
- function msb_32(v) {
22
- v |= v >>> 1;
23
- v |= v >>> 2;
24
- v |= v >>> 4;
25
- v |= v >>> 8;
26
- v |= v >>> 16;
27
- v = (v >>> 1) + 1;
28
- return msb_lut[(v * 0x077CB531) >>> 27];
29
- }
30
-
31
- /**
32
- * Get index of the least significant set bit
33
- * Also known as ctz32 or "count trailing zeroes"
34
- * @see https://graphics.stanford.edu/~seander/bithacks.html
35
- * @param {number} v
36
- * @returns {number}
37
- */
38
- function lsb_32(v) {
39
- return msb_lut[((v & -v) * 0x077CB531) >>> 27];
40
- }
4
+ import { align_32 } from "./align_32.js";
5
+ import { lsb_32 } from "./lsb_32.js";
41
6
 
42
7
  /**
43
8
  * Used for overallocating space when bit set needs to grow
@@ -59,12 +24,21 @@ const SHRINK_FACTOR = 0.5;
59
24
  */
60
25
  const RESIZE_COUNT_THRESHOLD = 128;
61
26
 
27
+ /**
28
+ * @readonly
29
+ * @type {number}
30
+ */
31
+ const DEFAULT_INITIAL_CAPACITY = 64;
32
+
62
33
  export class BitSet {
63
34
  /**
64
35
  * Dynamically sized bit field
65
36
  * @constructor
37
+ * @param {number} [initial_capacity]
66
38
  */
67
- constructor() {
39
+ constructor(initial_capacity = DEFAULT_INITIAL_CAPACITY) {
40
+ assert.isNonNegativeInteger(initial_capacity, 'initial_capacity');
41
+
68
42
  /**
69
43
  * Number of bits currently in use
70
44
  * @private
@@ -77,7 +51,7 @@ export class BitSet {
77
51
  * @private
78
52
  * @type {number}
79
53
  */
80
- this.__capacity = 64;
54
+ this.__capacity = align_32(initial_capacity);
81
55
 
82
56
  /**
83
57
  * Uint32-backed storage
@@ -615,9 +589,7 @@ export class BitSet {
615
589
  * @returns {BitSet}
616
590
  */
617
591
  static fixedSize(x) {
618
- const r = new BitSet();
619
-
620
- r.setCapacity(x);
592
+ const r = new BitSet(x);
621
593
 
622
594
  //prevent resizing
623
595
  r.__shrinkFactor = 0;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Align to the nearest number divisible by 32, rounding up
3
+ * @param {number} n
4
+ * @returns {number}
5
+ */
6
+ export function align_32(n: number): number;
7
+ //# sourceMappingURL=align_32.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"align_32.d.ts","sourceRoot":"","sources":["../../../../src/core/binary/align_32.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,4BAHW,MAAM,GACJ,MAAM,CAIlB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Align to the nearest number divisible by 32, rounding up
3
+ * @param {number} n
4
+ * @returns {number}
5
+ */
6
+ export function align_32(n) {
7
+ return ((n + 31) >>> 5) << 5
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=align_32.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"align_32.spec.d.ts","sourceRoot":"","sources":["../../../../src/core/binary/align_32.spec.js"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { align_32 } from "./align_32.js";
2
+
3
+ test("basics", () => {
4
+ expect(align_32(0)).toBe(0);
5
+ expect(align_32(1)).toBe(32);
6
+ expect(align_32(31)).toBe(32);
7
+ expect(align_32(32)).toBe(32);
8
+ expect(align_32(33)).toBe(64);
9
+ expect(align_32(63)).toBe(64);
10
+ expect(align_32(64)).toBe(64);
11
+ });
@@ -11,4 +11,5 @@ export function align_4(n) {
11
11
  assert.greaterThanOrEqual(result, n, 'aligned result must be >= input');
12
12
 
13
13
  return result;
14
- }
14
+ }
15
+
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Get index of the least significant set bit
3
+ * Also known as ctz32 or "count trailing zeroes"
4
+ * @see https://graphics.stanford.edu/~seander/bithacks.html
5
+ * @param {number} v
6
+ * @returns {number}
7
+ */
8
+ export function lsb_32(v: number): number;
9
+ //# sourceMappingURL=lsb_32.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsb_32.d.ts","sourceRoot":"","sources":["../../../../src/core/binary/lsb_32.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,0BAHW,MAAM,GACJ,MAAM,CAIlB"}
@@ -0,0 +1,12 @@
1
+ import { msb_lut_de_bruijn } from "./msb_lut_de_bruijn.js";
2
+
3
+ /**
4
+ * Get index of the least significant set bit
5
+ * Also known as ctz32 or "count trailing zeroes"
6
+ * @see https://graphics.stanford.edu/~seander/bithacks.html
7
+ * @param {number} v
8
+ * @returns {number}
9
+ */
10
+ export function lsb_32(v) {
11
+ return msb_lut_de_bruijn[((v & -v) * 0x077CB531) >>> 27];
12
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=msb_32.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msb_32.d.ts","sourceRoot":"","sources":["../../../../src/core/binary/msb_32.js"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { msb_lut_de_bruijn } from "./msb_lut_de_bruijn.js";
2
+
3
+ /**
4
+ * get most significant set bit
5
+ * @see https://graphics.stanford.edu/~seander/bithacks.html
6
+ * @param {number} x 32 bit integer
7
+ * @returns {number} integer position of most significant bit
8
+ */
9
+ function msb_32(x) {
10
+ let v = x;
11
+
12
+ v |= v >>> 1;
13
+ v |= v >>> 2;
14
+ v |= v >>> 4;
15
+ v |= v >>> 8;
16
+ v |= v >>> 16;
17
+ v = (v >>> 1) + 1;
18
+
19
+ return msb_lut_de_bruijn[(v * 0x077CB531) >>> 27];
20
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * de Bruijn sequence
3
+ * @see https://graphics.stanford.edu/~seander/bithacks.html
4
+ * @type {Uint8Array}
5
+ */
6
+ export const msb_lut_de_bruijn: Uint8Array;
7
+ //# sourceMappingURL=msb_lut_de_bruijn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msb_lut_de_bruijn.d.ts","sourceRoot":"","sources":["../../../../src/core/binary/msb_lut_de_bruijn.js"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,gCAFU,UAAU,CAKjB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * de Bruijn sequence
3
+ * @see https://graphics.stanford.edu/~seander/bithacks.html
4
+ * @type {Uint8Array}
5
+ */
6
+ export const msb_lut_de_bruijn = new Uint8Array([
7
+ 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
8
+ 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
9
+ ]);
@@ -22,4 +22,5 @@ export function sh3_convolve_with_cosine_kernel(out, out_offset, input, input_of
22
22
  out[out_offset + 6] = input[input_offset + 6] * CosineA2;
23
23
  out[out_offset + 7] = input[input_offset + 7] * CosineA2;
24
24
  out[out_offset + 8] = input[input_offset + 8] * CosineA2;
25
- }
25
+ }
26
+
@@ -0,0 +1,12 @@
1
+ /**
2
+ *
3
+ * @param {number[]|Float32Array|Float64Array} out
4
+ * @param {number} out_offset
5
+ * @param {number[]|Float32Array|Float64Array} basis
6
+ * @param {number} basis_offset
7
+ * @param {number[]|Float32Array|Float64Array} vector
8
+ * @param {number} vector_offset
9
+ * @param {number} dimensions
10
+ */
11
+ export function sh3_vector_accumulate(out: number[] | Float32Array | Float64Array, out_offset: number, basis: number[] | Float32Array | Float64Array, basis_offset: number, vector: number[] | Float32Array | Float64Array, vector_offset: number, dimensions: number): void;
12
+ //# sourceMappingURL=sh3_vector_accumulate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sh3_vector_accumulate.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,2CARW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,iBAClC,MAAM,cACN,MAAM,QA6BhB"}
@@ -0,0 +1,40 @@
1
+ import { assert } from "../../../../assert.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number[]|Float32Array|Float64Array} out
6
+ * @param {number} out_offset
7
+ * @param {number[]|Float32Array|Float64Array} basis
8
+ * @param {number} basis_offset
9
+ * @param {number[]|Float32Array|Float64Array} vector
10
+ * @param {number} vector_offset
11
+ * @param {number} dimensions
12
+ */
13
+ export function sh3_vector_accumulate(
14
+ out, out_offset,
15
+ basis, basis_offset,
16
+ vector, vector_offset, dimensions
17
+ ) {
18
+
19
+ assert.isArrayLike(out, 'out');
20
+ assert.isNonNegativeInteger(out_offset, 'out_offset');
21
+
22
+ assert.isArrayLike(basis, 'basis');
23
+ assert.isNonNegativeInteger(basis_offset, 'basis_offset');
24
+
25
+ assert.isNonNegativeInteger(dimensions, 'dimensions');
26
+
27
+ for (let j = 0; j < 9; j++) {
28
+
29
+ const out_coefficient_offset = out_offset + j * dimensions;
30
+
31
+ const basis_value = basis[basis_offset + j];
32
+
33
+ for (let i = 0; i < dimensions; i++) {
34
+ const scalar = vector[vector_offset + i];
35
+
36
+ out[out_coefficient_offset + i] += basis_value * scalar;
37
+ }
38
+
39
+ }
40
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sh3_vector_accumulate.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sh3_vector_accumulate.spec.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/geom/3d/sphere/harmonics/sh3_vector_accumulate.spec.js"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ import { sh3_vector_accumulate } from "./sh3_vector_accumulate.js";
2
+
3
+ test("basics", () => {
4
+ const out = [
5
+ 1, 2,
6
+ 3,4, 5,6,7,8,
7
+ 9,10, 11,12, 13,14, 15,16, 17,18
8
+ ];
9
+ const basis = [
10
+ 2,
11
+ 3, 5, 7,
12
+ 11, 13, 17, 19, 23
13
+ ];
14
+
15
+ sh3_vector_accumulate(
16
+ out, 0,
17
+ basis, 0,
18
+ [-3, 5], 0,
19
+ 2
20
+ );
21
+
22
+ expect(out).toEqual([
23
+ -5, 12,
24
+ -6, 19, -10, 31, -14, 43,
25
+ -24, 65, -28, 77, -38, 99, -42, 111, -52, 133
26
+ ]);
27
+ });
@@ -0,0 +1,10 @@
1
+ /**
2
+ *
3
+ * @param {number[]} out
4
+ * @param {number} out_offset
5
+ * @param {number[]} input
6
+ * @param {number} input_offset
7
+ * @param {number} length
8
+ */
9
+ export function vector_copy(out: number[], out_offset: number, input: number[], input_offset: number, length: number): void;
10
+ //# sourceMappingURL=vector_copy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector_copy.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec/vector_copy.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,iCANW,MAAM,EAAE,cACR,MAAM,SACN,MAAM,EAAE,gBACR,MAAM,UACN,MAAM,QAIhB"}
@@ -0,0 +1,13 @@
1
+ import { array_copy } from "../../collection/array/array_copy.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number[]} out
6
+ * @param {number} out_offset
7
+ * @param {number[]} input
8
+ * @param {number} input_offset
9
+ * @param {number} length
10
+ */
11
+ export function vector_copy(out, out_offset, input, input_offset, length) {
12
+ array_copy(input, input_offset, out, out_offset, length);
13
+ }
@@ -5,5 +5,5 @@
5
5
  * @param {number} n number of dimensions
6
6
  * @return {number}
7
7
  */
8
- export function vector_nd_dot(a: number[] | Float32Array | Float64Array, b: number[] | Float32Array | Float64Array, n: number): number;
9
- //# sourceMappingURL=vector_nd_dot.d.ts.map
8
+ export function vector_dot(a: number[] | Float32Array | Float64Array, b: number[] | Float32Array | Float64Array, n: number): number;
9
+ //# sourceMappingURL=vector_dot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector_dot.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec/vector_dot.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,8BALW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,KAClC,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,KAClC,MAAM,GACL,MAAM,CAUjB"}
@@ -5,7 +5,7 @@
5
5
  * @param {number} n number of dimensions
6
6
  * @return {number}
7
7
  */
8
- export function vector_nd_dot(a, b, n) {
8
+ export function vector_dot(a, b, n) {
9
9
  let result = 0;
10
10
 
11
11
  for (let i = 0; i < n; i++) {
@@ -4,5 +4,5 @@
4
4
  * @param {number[]|Float32Array|Float64Array} data
5
5
  * @param {number} [length] number of dimensions
6
6
  */
7
- export function vector_nd_normalize(result: number[] | Float32Array | Float64Array, data: number[] | Float32Array | Float64Array, length?: number): void;
8
- //# sourceMappingURL=vector_nd_normalize.d.ts.map
7
+ export function vector_normalize(result: number[] | Float32Array | Float64Array, data: number[] | Float32Array | Float64Array, length?: number): void;
8
+ //# sourceMappingURL=vector_normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector_normalize.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec/vector_normalize.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,yCAJW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,QAClC,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,WAClC,MAAM,QAoBhB"}
@@ -4,7 +4,7 @@
4
4
  * @param {number[]|Float32Array|Float64Array} data
5
5
  * @param {number} [length] number of dimensions
6
6
  */
7
- export function vector_nd_normalize(result, data, length = data.length) {
7
+ export function vector_normalize(result, data, length = data.length) {
8
8
 
9
9
  let magnitude2 = 0;
10
10
 
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=vector_normalize.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector_normalize.spec.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec/vector_normalize.spec.js"],"names":[],"mappings":""}
@@ -1,15 +1,15 @@
1
- import { vector_nd_normalize } from "./vector_nd_normalize.js";
1
+ import { vector_normalize } from "./vector_normalize.js";
2
2
 
3
3
  test("1d vector normalization", () => {
4
4
  const v = [7];
5
5
 
6
- vector_nd_normalize(v, v, 1);
6
+ vector_normalize(v, v, 1);
7
7
 
8
8
  expect(v[0]).toBeCloseTo(1);
9
9
 
10
10
  v[0] = -13;
11
11
 
12
- vector_nd_normalize(v, v, 1);
12
+ vector_normalize(v, v, 1);
13
13
 
14
14
  expect(v[0]).toBeCloseTo(-1);
15
15
  });
@@ -0,0 +1,11 @@
1
+ /**
2
+ *
3
+ * @param {number[]|Float32Array|Float64Array} out
4
+ * @param {number} out_offset
5
+ * @param {number[]|Float32Array|Float64Array} input
6
+ * @param {number} input_offset
7
+ * @param {number} dimensions
8
+ * @param {number} scale
9
+ */
10
+ export function vector_scale_array(out: number[] | Float32Array | Float64Array, out_offset: number, input: number[] | Float32Array | Float64Array, input_offset: number, dimensions: number, scale: number): void;
11
+ //# sourceMappingURL=vector_scale_array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector_scale_array.d.ts","sourceRoot":"","sources":["../../../../../src/core/geom/vec/vector_scale_array.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wCAPW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,cAClC,MAAM,SACN,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,gBAClC,MAAM,cACN,MAAM,SACN,MAAM,QAqBhB"}
@@ -0,0 +1,31 @@
1
+ import { assert } from "../../assert.js";
2
+
3
+ /**
4
+ *
5
+ * @param {number[]|Float32Array|Float64Array} out
6
+ * @param {number} out_offset
7
+ * @param {number[]|Float32Array|Float64Array} input
8
+ * @param {number} input_offset
9
+ * @param {number} dimensions
10
+ * @param {number} scale
11
+ */
12
+ export function vector_scale_array(
13
+ out, out_offset,
14
+ input, input_offset,
15
+ dimensions,
16
+ scale) {
17
+
18
+ assert.isArrayLike(out, 'out');
19
+ assert.isNonNegativeInteger(out_offset, 'out_offset');
20
+
21
+ assert.isArrayLike(input, 'input');
22
+ assert.isNonNegativeInteger(input_offset, 'input_offset');
23
+
24
+ assert.isNonNegativeInteger(dimensions, 'dimensions');
25
+ assert.isNumber(scale, 'scale');
26
+
27
+ for (let i = 0; i < dimensions; i++) {
28
+ out[out_offset + i] = input[input_offset + i] * scale;
29
+ }
30
+
31
+ }
@@ -18,3 +18,5 @@ export function v3_dot_array_array(a, a_offset, b, b_offset) {
18
18
 
19
19
  return a_x * b_x + a_y * b_y + a_z * b_z;
20
20
  }
21
+
22
+
@@ -1 +1 @@
1
- {"version":3,"file":"NodeInstance.d.ts","sourceRoot":"","sources":["../../../../../../src/core/model/node-graph/node/NodeInstance.js"],"names":[],"mappings":"AAcA;;;;GAIG;AACH;IAEI;;;;OAIG;IACH,aAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,6BAAmB;IAEnB;;;OAGG;IACH,WAFU,yBAAyB,EAAE,CAEtB;IAEf;;;OAGG;IACH,gBAAgB;IAEhB;;;OAGG;IACH,qBAAmB;IAEnB;;;OAGG;IACH,aAFU,gBAAgB,CAED;IAEzB;;;;;;OAMG;IACH,wBAFU,MAAM,CAEE;IAElB;;OAEG;IACH;QACI;;;WAGG;mCADO,OAAO,MAAM,WAAO;QAG9B;;;WAGG;iCADO,OAAO,MAAM,MAAI;QAG3B;;;WAGG;mCADO,OAAO,MAAM,MAAI;QAI3B;;;;WAIG;qCADO,yCAAyC,YAAY,CAAC;MAGlE;IAEF;;;;;;OAMG;IACH,yBALW,MAAM,aACN,aAAa,UACb,YAAY,GACV,MAAM,CAsBlB;IAED;;;OAGG;IACH,gDAEC;IAED;;;OAGG;IACH,+CAEC;IAGD;;;OAGG;IACH,mCAEC;IAED;;;;OAIG;IACH,kCAEC;IAED;;;;OAIG;IACH,mBAHW,MAAM,oBAKhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,OAKhB;IAED;;;;OAIG;IACH,yBAHW,MAAM,KAOhB;IAED;;;;OAIG;IACH,2BAHW,MAAM,oBAmChB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,OAAO,CAkBnB;IAED;;;OAGG;IACH,uCAQC;IAED,wBAIC;IAED;;;OAGG;IACH,mDA+BC;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,yBAAyB,GAAC,SAAS,CAoB/C;IAED,eAEC;IAED;;;;OAIG;IACH,cAHW,YAAY,GACV,OAAO,CAQnB;IAED,mBAEC;IAIL;;;OAGG;IACH,yBAFU,OAAO,CAEoB;CAPpC;0CA1VyC,gCAAgC;iBAHzD,kCAAkC;mBAChC,kCAAkC;8BAGvB,oBAAoB"}
1
+ {"version":3,"file":"NodeInstance.d.ts","sourceRoot":"","sources":["../../../../../../src/core/model/node-graph/node/NodeInstance.js"],"names":[],"mappings":"AAcA;;;;GAIG;AACH;IAEI;;;;OAIG;IACH,aAFU,MAAM,CAEE;IAElB;;;OAGG;IACH,6BAAmB;IAEnB;;;OAGG;IACH,WAFU,yBAAyB,EAAE,CAEtB;IAEf;;;OAGG;IACH,gBAAgB;IAEhB;;;OAGG;IACH,qBAAmB;IAEnB;;;OAGG;IACH,aAFU,gBAAgB,CAED;IAEzB;;;;;;OAMG;IACH,wBAFU,MAAM,CAEE;IAElB;;OAEG;IACH;QACI;;;WAGG;mCADO,OAAO,MAAM,WAAO;QAG9B;;;WAGG;iCADO,OAAO,MAAM,MAAI;QAG3B;;;WAGG;mCADO,OAAO,MAAM,MAAI;QAI3B;;;;WAIG;qCADO,yCAAyC,YAAY,CAAC;MAGlE;IAEF;;;;;;OAMG;IACH,yBALW,MAAM,aACN,aAAa,UACb,YAAY,GACV,MAAM,CAsBlB;IAED;;;OAGG;IACH,gDAEC;IAED;;;OAGG;IACH,+CAEC;IAGD;;;OAGG;IACH,mCAEC;IAED;;;;OAIG;IACH,kCAEC;IAED;;;;OAIG;IACH,mBAHW,MAAM,oBAKhB;IAED;;;;OAIG;IACH,mBAHW,MAAM,OAKhB;IAED;;;;OAIG;IACH,yBAHW,MAAM,KAOhB;IAED;;;;OAIG;IACH,2BAHW,MAAM,oBAmChB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,OAAO,CAkBnB;IAED;;;OAGG;IACH,uCAQC;IAED,wBAIC;IAED;;;OAGG;IACH,mDA+BC;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACJ,yBAAyB,GAAC,SAAS,CAoB/C;IAED;;;;OAIG;IACH,6BAHW,MAAM,GACJ,SAAS,GAAC,yBAAyB,CAa/C;IAED,eAEC;IAED;;;;OAIG;IACH,cAHW,YAAY,GACV,OAAO,CAQnB;IAED,mBAEC;IAIL;;;OAGG;IACH,yBAFU,OAAO,CAEoB;CAPpC;0CA5WyC,gCAAgC;iBAHzD,kCAAkC;mBAChC,kCAAkC;8BAGvB,oBAAoB"}
@@ -329,6 +329,24 @@ export class NodeInstance {
329
329
  return undefined;
330
330
  }
331
331
 
332
+ /**
333
+ *
334
+ * @param {string} name
335
+ * @returns {undefined|NodeInstancePortReference}
336
+ */
337
+ getFirstEndpointByName(name) {
338
+ assert.isString(name, 'name');
339
+
340
+ const ports = this.description.getPortsByName(name);
341
+
342
+ if (ports.length === 0) {
343
+ return undefined;
344
+ }
345
+
346
+ return this.getEndpoint(ports[0].id);
347
+
348
+ }
349
+
332
350
  hash() {
333
351
  return this.id;
334
352
  }