@woosh/meep-engine 2.100.1 → 2.100.3

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 (55) hide show
  1. package/build/meep.cjs +109 -78
  2. package/build/meep.min.js +1 -1
  3. package/build/meep.module.js +109 -78
  4. package/package.json +1 -1
  5. package/src/core/binary/downloadUrlAsFile.d.ts.map +1 -1
  6. package/src/core/binary/downloadUrlAsFile.js +3 -1
  7. package/src/core/color/oklab/Okhsv.spec.d.ts +2 -0
  8. package/src/core/color/oklab/Okhsv.spec.d.ts.map +1 -0
  9. package/src/core/color/oklab/Okhsv.spec.js +17 -0
  10. package/src/core/color/oklab/XYZ.spec.js +2 -2
  11. package/src/core/color/oklab/compute_max_saturation.d.ts +11 -0
  12. package/src/core/color/oklab/compute_max_saturation.d.ts.map +1 -0
  13. package/src/core/color/oklab/compute_max_saturation.js +84 -0
  14. package/src/core/color/oklab/find_cusp.d.ts +10 -0
  15. package/src/core/color/oklab/find_cusp.d.ts.map +1 -0
  16. package/src/core/color/oklab/find_cusp.js +27 -0
  17. package/src/core/color/oklab/find_gamut_intersection.d.ts +15 -0
  18. package/src/core/color/oklab/find_gamut_intersection.d.ts.map +1 -0
  19. package/src/core/color/oklab/find_gamut_intersection.js +101 -0
  20. package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts +9 -0
  21. package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts.map +1 -0
  22. package/src/core/color/oklab/linear_srgb_to_okhsv.js +74 -0
  23. package/src/core/color/oklab/linear_srgb_to_oklab.d.ts +9 -0
  24. package/src/core/color/oklab/linear_srgb_to_oklab.d.ts.map +1 -0
  25. package/src/core/color/oklab/linear_srgb_to_oklab.js +20 -0
  26. package/src/core/color/oklab/okhsv_to_linear_srgb.d.ts +9 -0
  27. package/src/core/color/oklab/okhsv_to_linear_srgb.d.ts.map +1 -0
  28. package/src/core/color/oklab/okhsv_to_linear_srgb.js +59 -0
  29. package/src/core/color/oklab/oklab_to_linear_srgb.d.ts +10 -0
  30. package/src/core/color/oklab/oklab_to_linear_srgb.d.ts.map +1 -0
  31. package/src/core/color/oklab/oklab_to_linear_srgb.js +21 -0
  32. package/src/core/color/oklab/oklab_to_xyz.d.ts +5 -2
  33. package/src/core/color/oklab/oklab_to_xyz.d.ts.map +1 -1
  34. package/src/core/color/oklab/oklab_to_xyz.js +5 -5
  35. package/src/core/color/oklab/oklab_to_xyz.spec.js +4 -4
  36. package/src/core/color/oklab/toe.d.ts +13 -0
  37. package/src/core/color/oklab/toe.d.ts.map +1 -0
  38. package/src/core/color/oklab/toe.js +22 -0
  39. package/src/core/color/oklab/xyz_to_oklab.d.ts +5 -2
  40. package/src/core/color/oklab/xyz_to_oklab.d.ts.map +1 -1
  41. package/src/core/color/oklab/xyz_to_oklab.js +5 -5
  42. package/src/core/color/oklab/xyz_to_oklab.spec.js +4 -4
  43. package/src/engine/asset/AssetManager.d.ts.map +1 -1
  44. package/src/engine/asset/AssetManager.js +6 -1
  45. package/src/engine/asset/loaders/ArrayBufferLoader.d.ts +2 -1
  46. package/src/engine/asset/loaders/ArrayBufferLoader.d.ts.map +1 -1
  47. package/src/engine/asset/loaders/ArrayBufferLoader.js +107 -79
  48. package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.d.ts +1 -1
  49. package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.d.ts.map +1 -1
  50. package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.js +4 -4
  51. package/src/engine/graphics/texture/sampler/Sampler2D2Canvas.d.ts +1 -2
  52. package/src/engine/graphics/texture/sampler/Sampler2D2Canvas.d.ts.map +1 -1
  53. package/src/engine/graphics/texture/sampler/Sampler2D2Canvas.js +1 -2
  54. package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.d.ts.map +1 -1
  55. package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.js +8 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @copyright "Company Named Limited" 2023
3
+ * @param {number[]} output
4
+ * @param {number} h
5
+ * @param {number} s
6
+ * @param {number} v
7
+ */
8
+ export function okhsv_to_linear_srgb(output: number[], h: number, s: number, v: number): void;
9
+ //# sourceMappingURL=okhsv_to_linear_srgb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"okhsv_to_linear_srgb.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/okhsv_to_linear_srgb.js"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH,6CALW,MAAM,EAAE,KACR,MAAM,KACN,MAAM,KACN,MAAM,QAsChB"}
@@ -0,0 +1,59 @@
1
+ import { find_cusp } from "./find_cusp.js";
2
+ import { oklab_to_linear_srgb } from "./oklab_to_linear_srgb.js";
3
+ import { toe_inv } from "./toe.js";
4
+
5
+ /**
6
+ *
7
+ * @type {number[]}
8
+ */
9
+ const cusp = [0, 0];
10
+ /**
11
+ *
12
+ * @type {number[]}
13
+ */
14
+ const rgb_scale = [0, 0, 0];
15
+
16
+ /**
17
+ * @copyright "Company Named Limited" 2023
18
+ * @param {number[]} output
19
+ * @param {number} h
20
+ * @param {number} s
21
+ * @param {number} v
22
+ */
23
+ export function okhsv_to_linear_srgb(output, h, s, v) {
24
+
25
+ const a_ = Math.cos(2 * Math.PI * h);
26
+ const b_ = Math.sin(2 * Math.PI * h);
27
+
28
+ find_cusp(cusp, a_, b_);
29
+
30
+ const S_max = cusp[1] / cusp[0];
31
+ const T_max = cusp[1] / (1 - cusp[0]);
32
+ const S_0 = 0.5;
33
+ const k = 1 - S_0 / S_max;
34
+
35
+ // first we compute L and V as if the gamut is a perfect triangle:
36
+
37
+ // L, C when v==1:
38
+ const L_v = 1 - s * S_0 / (S_0 + T_max - T_max * k * s);
39
+ const C_v = s * T_max * S_0 / (S_0 + T_max - T_max * k * s);
40
+
41
+ let L = v * L_v;
42
+ let C = v * C_v;
43
+
44
+ // then we compensate for both toe and the curved top part of the triangle:
45
+ const L_vt = toe_inv(L_v);
46
+ const C_vt = C_v * L_vt / L_v;
47
+
48
+ const L_new = toe_inv(L);
49
+ C = C * L_new / L;
50
+ L = L_new;
51
+
52
+ oklab_to_linear_srgb(rgb_scale, L_vt, a_ * C_vt, b_ * C_vt);
53
+ const scale_L = Math.cbrt(1. / Math.max(rgb_scale[0], rgb_scale[1], rgb_scale[2], 0));
54
+
55
+ L = L * scale_L;
56
+ C = C * scale_L;
57
+
58
+ oklab_to_linear_srgb(output, L, C * a_, C * b_);
59
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ *
3
+ * @copyright "Company Named Limited" 2023
4
+ * @param {number[]} output
5
+ * @param {number} L
6
+ * @param {number} a
7
+ * @param {number} b
8
+ */
9
+ export function oklab_to_linear_srgb(output: number[], L: number, a: number, b: number): void;
10
+ //# sourceMappingURL=oklab_to_linear_srgb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oklab_to_linear_srgb.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/oklab_to_linear_srgb.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,6CALW,MAAM,EAAE,KACR,MAAM,KACN,MAAM,KACN,MAAM,QAchB"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ *
3
+ * @copyright "Company Named Limited" 2023
4
+ * @param {number[]} output
5
+ * @param {number} L
6
+ * @param {number} a
7
+ * @param {number} b
8
+ */
9
+ export function oklab_to_linear_srgb(output, L, a, b) {
10
+ const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
11
+ const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
12
+ const s_ = L - 0.0894841775 * a - 1.2914855480 * b;
13
+
14
+ const l = l_ * l_ * l_;
15
+ const m = m_ * m_ * m_;
16
+ const s = s_ * s_ * s_;
17
+
18
+ output[0] = +4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s;
19
+ output[1] = -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s;
20
+ output[2] = -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s;
21
+ }
@@ -2,8 +2,11 @@
2
2
  *
3
3
  * Converts Oklab color space to CIE XYZ.
4
4
  * Oklab as defined by Björn Ottosson
5
- * @param {number[]} input Oklab
5
+ * @copyright "Company Named Limited" 2023
6
6
  * @param {number[]} output XYZ
7
+ * @param {number} L
8
+ * @param {number} a
9
+ * @param {number} b
7
10
  */
8
- export function oklab_to_xyz(input: number[], output: number[]): void;
11
+ export function oklab_to_xyz(output: number[], L: number, a: number, b: number): void;
9
12
  //# sourceMappingURL=oklab_to_xyz.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oklab_to_xyz.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/oklab_to_xyz.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,oCAHW,MAAM,EAAE,UACR,MAAM,EAAE,QA0BlB"}
1
+ {"version":3,"file":"oklab_to_xyz.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/oklab_to_xyz.js"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,qCALW,MAAM,EAAE,KACR,MAAM,KACN,MAAM,KACN,MAAM,QAuBhB"}
@@ -2,13 +2,13 @@
2
2
  *
3
3
  * Converts Oklab color space to CIE XYZ.
4
4
  * Oklab as defined by Björn Ottosson
5
- * @param {number[]} input Oklab
5
+ * @copyright "Company Named Limited" 2023
6
6
  * @param {number[]} output XYZ
7
+ * @param {number} L
8
+ * @param {number} a
9
+ * @param {number} b
7
10
  */
8
- export function oklab_to_xyz(input, output) {
9
- const L = input[0];
10
- const a = input[1];
11
- const b = input[2];
11
+ export function oklab_to_xyz(output, L, a, b) {
12
12
 
13
13
  // apply M2 inverse
14
14
 
@@ -4,25 +4,25 @@ test("known samples", () => {
4
4
 
5
5
  const out = [];
6
6
 
7
- oklab_to_xyz([1, 0, 0], out);
7
+ oklab_to_xyz(out, 1, 0, 0);
8
8
 
9
9
  expect(out[0]).toBeCloseTo(0.950);
10
10
  expect(out[1]).toBeCloseTo(1.000);
11
11
  expect(out[2]).toBeCloseTo(1.089);
12
12
 
13
- oklab_to_xyz([0.450, 1.236, -0.019], out);
13
+ oklab_to_xyz(out, 0.450, 1.236, -0.019);
14
14
 
15
15
  expect(out[0]).toBeCloseTo(1);
16
16
  expect(out[1]).toBeCloseTo(0);
17
17
  expect(out[2]).toBeCloseTo(0);
18
18
 
19
- oklab_to_xyz([0.922, -0.671, 0.263], out);
19
+ oklab_to_xyz(out, 0.922, -0.671, 0.263);
20
20
 
21
21
  expect(out[0]).toBeCloseTo(0);
22
22
  expect(out[1]).toBeCloseTo(1);
23
23
  expect(out[2]).toBeCloseTo(0);
24
24
 
25
- oklab_to_xyz([0.153, -1.415, -0.449], out);
25
+ oklab_to_xyz(out, 0.153, -1.415, -0.449);
26
26
 
27
27
  expect(out[0]).toBeCloseTo(0);
28
28
  expect(out[1]).toBeCloseTo(0);
@@ -0,0 +1,13 @@
1
+ /**
2
+ * toe function for L_r
3
+ * @param {number} x
4
+ * @return {number}
5
+ */
6
+ export function toe(x: number): number;
7
+ /**
8
+ * inverse toe function for L_r
9
+ * @param {number} x
10
+ * @return {number}
11
+ */
12
+ export function toe_inv(x: number): number;
13
+ //# sourceMappingURL=toe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toe.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/toe.js"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,uBAHW,MAAM,GACL,MAAM,CAIjB;AAED;;;;GAIG;AACH,2BAHW,MAAM,GACL,MAAM,CAIjB"}
@@ -0,0 +1,22 @@
1
+
2
+ const k_1 = 0.206;
3
+ const k_2 = 0.03;
4
+ const k_3 = (1. + k_1) / (1. + k_2);
5
+
6
+ /**
7
+ * toe function for L_r
8
+ * @param {number} x
9
+ * @return {number}
10
+ */
11
+ export function toe(x){
12
+ return 0.5 * (k_3 * x - k_1 + Math.sqrt((k_3 * x - k_1) * (k_3 * x - k_1) + 4 * k_2 * k_3 * x));
13
+ }
14
+
15
+ /**
16
+ * inverse toe function for L_r
17
+ * @param {number} x
18
+ * @return {number}
19
+ */
20
+ export function toe_inv(x){
21
+ return (x * x + k_1 * x) / (k_3 * (x + k_2));
22
+ }
@@ -1,8 +1,11 @@
1
1
  /**
2
2
  * Converts CIE XYZ color space to Oklab.
3
3
  * Oklab as defined by Björn Ottosson
4
- * @param {number[]} input XYZ
4
+ * @copyright "Company Named Limited" 2023
5
5
  * @param {number[]} output Lab
6
+ * @param {number} x
7
+ * @param {number} y
8
+ * @param {number} z
6
9
  */
7
- export function xyz_to_oklab(input: number[], output: number[]): void;
10
+ export function xyz_to_oklab(output: number[], x: number, y: number, z: number): void;
8
11
  //# sourceMappingURL=xyz_to_oklab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"xyz_to_oklab.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/xyz_to_oklab.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,oCAHW,MAAM,EAAE,UACR,MAAM,EAAE,QAwBlB"}
1
+ {"version":3,"file":"xyz_to_oklab.d.ts","sourceRoot":"","sources":["../../../../../src/core/color/oklab/xyz_to_oklab.js"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qCALW,MAAM,EAAE,KACR,MAAM,KACN,MAAM,KACN,MAAM,QAqBhB"}
@@ -1,13 +1,13 @@
1
1
  /**
2
2
  * Converts CIE XYZ color space to Oklab.
3
3
  * Oklab as defined by Björn Ottosson
4
- * @param {number[]} input XYZ
4
+ * @copyright "Company Named Limited" 2023
5
5
  * @param {number[]} output Lab
6
+ * @param {number} x
7
+ * @param {number} y
8
+ * @param {number} z
6
9
  */
7
- export function xyz_to_oklab(input, output) {
8
- const x = input[0];
9
- const y = input[1];
10
- const z = input[2];
10
+ export function xyz_to_oklab(output, x, y, z) {
11
11
 
12
12
  // M1 * (X Y Z)
13
13
  const l = 0.8189330101 * x + 0.3618667424 * y - 0.1288597137 * z;
@@ -4,25 +4,25 @@ test("known samples", () => {
4
4
 
5
5
  const out = [];
6
6
 
7
- xyz_to_oklab([0.950, 1.000, 1.089], out);
7
+ xyz_to_oklab(out, 0.950, 1.000, 1.089);
8
8
 
9
9
  expect(out[0]).toBeCloseTo(1);
10
10
  expect(out[1]).toBeCloseTo(0);
11
11
  expect(out[2]).toBeCloseTo(0);
12
12
 
13
- xyz_to_oklab([1, 0, 0], out);
13
+ xyz_to_oklab(out, 1, 0, 0);
14
14
 
15
15
  expect(out[0]).toBeCloseTo(0.450);
16
16
  expect(out[1]).toBeCloseTo(1.236);
17
17
  expect(out[2]).toBeCloseTo(-0.019);
18
18
 
19
- xyz_to_oklab([0, 1, 0], out);
19
+ xyz_to_oklab(out, 0, 1, 0);
20
20
 
21
21
  expect(out[0]).toBeCloseTo(0.922);
22
22
  expect(out[1]).toBeCloseTo(-0.671);
23
23
  expect(out[2]).toBeCloseTo(0.263);
24
24
 
25
- xyz_to_oklab([0, 0, 1], out);
25
+ xyz_to_oklab(out, 0, 0, 1);
26
26
 
27
27
  expect(out[0]).toBeCloseTo(0.153);
28
28
  expect(out[1]).toBeCloseTo(-1.415);
@@ -1 +1 @@
1
- {"version":3,"file":"AssetManager.d.ts","sourceRoot":"","sources":["../../../../src/engine/asset/AssetManager.js"],"names":[],"mappings":"AAiDA;;;;GAIG;AACH;IAgII;;;;;OAKG;IACH,oCAJW,GAAG,EAYb;IA7ID;;;;OAIG;IACH,eAEG;IAEH;;;OAGG;IACH,aAFU,YAAY,gBAAgB,EAAE,YAAY,CAAC,CAER;IAe7C;;;;;;OAMG;IACH,kBAFU,MAAM,CAEY;IAyB5B;;;;OAIG;IACH,iBAAc;IAEd;;;OAGG;IACH,mBAFU,iBAAiB,CAEiB;IAwE5C,gBAQC;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACL,QAAQ,IAAI,CAAC,CAexB;IAED;;;;;OAKG;IACH,oCAFa,OAAO,CAOnB;IAED;;OAEG;IACH,cAEC;IAED,8BAEC;IAED;;;;;;OAMG;IACH,4DAJW,iBAAiB,GAEf,cAAc,CAY1B;IAED;;;;;;;;;OASG;IACH,qFAsCC;IAED;;;;;OAKG;IACH,aAJW,MAAM,QACN,MAAM,sBAehB;IAsQD;;;;;OAKG;IACH,sBA2BC;IAGD;;;;OAIG;IACH,uBAHW,MAAM,GACL,OAAO,CAIlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACJ,wBAAY,SAAS,CAMjC;IAaD;;;;OAIG;IACH,+BAHW,MAAM,4CAqBhB;IAED;;;;OAIG;IACH,iCAHW,MAAM,+CAyBhB;IAED;;;;;;OAMG;IACH,6BAJW,MAAM,kCAEJ,QAAQ,OAAO,CAAC,CAU5B;IAED;;;;;OAKG;IACH,0BAJW,MAAM,iEAwChB;IAED;;;OAGG;IACH,uBAFW,MAAM,iBAkBhB;IAED;;;;;;OAMG;IACH,yCAFa,aAAS,IAAI,CAYzB;IAED;;;;;OAKG;IACH,eAJW,MAAM,QACN,MAAM,GACJ,OAAO,CAMnB;IAED;;;;OAIG;IACH,2BAHW,MAAM,GACL,mBAAiB,CAa5B;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACL,gBAAgB,GAAC,SAAS,CAQrC;IAED;;;;;OAKG;IACH,mBAJW,MAAM,QACN,MAAM,QACN,MAAM,QAUhB;IAGL;;;OAGG;IACH,yBAFU,OAAO,CAEoB;;CANpC;4BAx2B2B,0CAA0C;iCAOrC,uBAAuB;6BAM3B,mBAAmB;kCAFd,6BAA6B;kCAD7B,wBAAwB;4BAE9B,0BAA0B"}
1
+ {"version":3,"file":"AssetManager.d.ts","sourceRoot":"","sources":["../../../../src/engine/asset/AssetManager.js"],"names":[],"mappings":"AAiDA;;;;GAIG;AACH;IAgII;;;;;OAKG;IACH,oCAJW,GAAG,EAYb;IA7ID;;;;OAIG;IACH,eAEG;IAEH;;;OAGG;IACH,aAFU,YAAY,gBAAgB,EAAE,YAAY,CAAC,CAER;IAe7C;;;;;;OAMG;IACH,kBAFU,MAAM,CAEY;IAyB5B;;;;OAIG;IACH,iBAAc;IAEd;;;OAGG;IACH,mBAFU,iBAAiB,CAEiB;IAwE5C,gBAQC;IAED;;;;OAIG;IACH,qBAHW,MAAM,GACL,QAAQ,IAAI,CAAC,CAexB;IAED;;;;;OAKG;IACH,oCAFa,OAAO,CAOnB;IAED;;OAEG;IACH,cAEC;IAED,8BAEC;IAED;;;;;;OAMG;IACH,4DAJW,iBAAiB,GAEf,cAAc,CAY1B;IAED;;;;;;;;;OASG;IACH,qFAsCC;IAED;;;;;OAKG;IACH,aAJW,MAAM,QACN,MAAM,sBAehB;IA2QD;;;;;OAKG;IACH,sBA2BC;IAGD;;;;OAIG;IACH,uBAHW,MAAM,GACL,OAAO,CAIlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,GACJ,wBAAY,SAAS,CAMjC;IAaD;;;;OAIG;IACH,+BAHW,MAAM,4CAqBhB;IAED;;;;OAIG;IACH,iCAHW,MAAM,+CAyBhB;IAED;;;;;;OAMG;IACH,6BAJW,MAAM,kCAEJ,QAAQ,OAAO,CAAC,CAU5B;IAED;;;;;OAKG;IACH,0BAJW,MAAM,iEAwChB;IAED;;;OAGG;IACH,uBAFW,MAAM,iBAkBhB;IAED;;;;;;OAMG;IACH,yCAFa,aAAS,IAAI,CAYzB;IAED;;;;;OAKG;IACH,eAJW,MAAM,QACN,MAAM,GACJ,OAAO,CAMnB;IAED;;;;OAIG;IACH,2BAHW,MAAM,GACL,mBAAiB,CAa5B;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACL,gBAAgB,GAAC,SAAS,CAQrC;IAED;;;;;OAKG;IACH,mBAJW,MAAM,QACN,MAAM,QACN,MAAM,QAUhB;IAGL;;;OAGG;IACH,yBAFU,OAAO,CAEoB;;CANpC;4BA72B2B,0CAA0C;iCAOrC,uBAAuB;6BAM3B,mBAAmB;kCAFd,6BAA6B;kCAD7B,wBAAwB;4BAE9B,0BAA0B"}
@@ -591,7 +591,12 @@ export class AssetManager {
591
591
  try {
592
592
 
593
593
 
594
- loader.load(scope, full_path, success, failure, progress);
594
+ const result = loader.load(scope, full_path, success, failure, progress);
595
+
596
+ if (result instanceof Promise) {
597
+ // allow promise responses
598
+ result.catch(failure);
599
+ }
595
600
 
596
601
  } catch (e) {
597
602
  console.error(`Loader failed on invocation. path=${path}, type=${type}`, 'Loader exception: ', e);
@@ -13,8 +13,9 @@ export class ArrayBufferLoader extends AssetLoader<any, any> {
13
13
  load(scope: any, path: any, success: any, failure?: {
14
14
  (...data: any[]): void;
15
15
  (message?: any, ...optionalParams: any[]): void;
16
- }, progress?: typeof noop): void;
16
+ }, progress?: typeof noop): Promise<Asset<any>>;
17
17
  }
18
18
  import { AssetLoader } from "./AssetLoader.js";
19
19
  import { noop } from "../../../core/function/noop.js";
20
+ import { Asset } from "../Asset.js";
20
21
  //# sourceMappingURL=ArrayBufferLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayBufferLoader.d.ts","sourceRoot":"","sources":["../../../../../src/engine/asset/loaders/ArrayBufferLoader.js"],"names":[],"mappings":"AAMA;IACI;;;OAGG;IACH,iCAFW,MAAM,GAAC,KAAK,GAAC,MAAM,EAa7B;IANG;;;;OAIG;IACH,yBAAsC;IAG1C;;;qCA0GC;CACJ;4BA/H2B,kBAAkB;qBAJzB,gCAAgC"}
1
+ {"version":3,"file":"ArrayBufferLoader.d.ts","sourceRoot":"","sources":["../../../../../src/engine/asset/loaders/ArrayBufferLoader.js"],"names":[],"mappings":"AAoFA;IACI;;;OAGG;IACH,iCAFW,MAAM,GAAC,KAAK,GAAC,MAAM,EAa7B;IANG;;;;OAIG;IACH,yBAAsC;IAG1C;;;oDAwDC;CACJ;4BA3J2B,kBAAkB;qBAJzB,gCAAgC;sBAC/B,aAAa"}
@@ -4,6 +4,84 @@ import { CrossOriginConfig } from "../CORS/CrossOriginConfig.js";
4
4
  import { CrossOriginKind } from "../CORS/CrossOriginKind.js";
5
5
  import { AssetLoader } from "./AssetLoader.js";
6
6
 
7
+ /**
8
+ *
9
+ * @param {Response} input
10
+ * @param {function} progress
11
+ * @return {Response}
12
+ */
13
+ function observeResponseProgress(input, progress) {
14
+ let response = input
15
+
16
+
17
+ if (typeof ReadableStream === 'undefined' || response.body.getReader === undefined) {
18
+
19
+ return response;
20
+
21
+ }
22
+
23
+ /**
24
+ * @type {ReadableStreamDefaultReader<Uint8Array>}
25
+ */
26
+ const reader = response.body.getReader();
27
+
28
+ const contentLength = response.headers.get('Content-Length');
29
+ const total = contentLength ? parseInt(contentLength) : 0;
30
+ let loaded = 0;
31
+
32
+ // periodically read data into the new stream tracking while download progress
33
+ const stream_prototype = {
34
+ type: "bytes",
35
+ start(controller) {
36
+
37
+ pump();
38
+
39
+ function pump() {
40
+
41
+ reader.read().then(({ done, value }) => {
42
+
43
+ if (done) {
44
+ // no more data, we're done
45
+ controller.close();
46
+ return;
47
+ }
48
+
49
+ loaded += value.byteLength;
50
+
51
+ progress(loaded, total);
52
+
53
+ controller.enqueue(value);
54
+ pump();
55
+
56
+ });
57
+
58
+ }
59
+
60
+ }
61
+
62
+ };
63
+
64
+ /**
65
+ * @type {ReadableStream}
66
+ */
67
+ let stream;
68
+
69
+ try {
70
+ stream = new ReadableStream(stream_prototype);
71
+
72
+ response = new Response(stream);
73
+ } catch (e) {
74
+ /*
75
+ Workaround for Safari bug: "TypeError: ReadableByteStreamController is not implemented"
76
+ By not wrapping the response we lose the ability to track progress, but that's not a critical issue in most cases
77
+ */
78
+ console.warn(e);
79
+ }
80
+
81
+ return response;
82
+
83
+ }
84
+
7
85
  export class ArrayBufferLoader extends AssetLoader {
8
86
  /**
9
87
  *
@@ -22,7 +100,13 @@ export class ArrayBufferLoader extends AssetLoader {
22
100
  this.__fetch_priority = fetch_priority;
23
101
  }
24
102
 
25
- load(scope, path, success, failure = console.error, progress = noop) {
103
+ async load(
104
+ scope,
105
+ path,
106
+ success,
107
+ failure = console.error,
108
+ progress = noop
109
+ ) {
26
110
  const coc = this.assetManager !== null ? this.assetManager.crossOriginConfig : CrossOriginConfig.default;
27
111
 
28
112
  const headers = new Headers();
@@ -37,96 +121,40 @@ export class ArrayBufferLoader extends AssetLoader {
37
121
  request.priority = this.__fetch_priority;
38
122
  }
39
123
 
40
- fetch(request)
41
- .then(handle_response)
42
- .then(response_to_asset)
43
- .catch(failure);
124
+ let response = await fetch(request);
44
125
 
45
- /**
46
- *
47
- * @param {Response} response
48
- * @return {Promise<void>}
49
- */
50
- async function response_to_asset(response) {
51
- const arrayBuffer = await response.arrayBuffer();
126
+ if (!(response.status === 200 || response.status === 0)) {
52
127
 
53
- const asset = new Asset(
54
- function () {
55
- return arrayBuffer;
56
- },
57
- arrayBuffer.byteSize
58
- );
128
+ throw Error(`fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`);
59
129
 
60
- success(asset);
61
130
  }
62
131
 
63
- /**
64
- *
65
- * @param {Response} response
66
- * @return {Response}
67
- */
68
- function handle_response(response) {
69
- if (!(response.status === 200 || response.status === 0)) {
132
+ // Some browsers return HTTP Status 0 when using non-http protocol
133
+ // e.g. 'file://' or 'data://'. Handle as success.
70
134
 
71
- throw Error(`fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`);
135
+ if (response.status === 0) {
72
136
 
73
- }
137
+ console.warn('HTTP Status 0 received.');
74
138
 
75
- // Some browsers return HTTP Status 0 when using non-http protocol
76
- // e.g. 'file://' or 'data://'. Handle as success.
77
-
78
- if (response.status === 0) {
79
-
80
- console.warn('HTTP Status 0 received.');
81
-
82
- }
83
-
84
- if (typeof ReadableStream === 'undefined' || response.body.getReader === undefined) {
85
-
86
- return response;
87
-
88
- }
89
-
90
- const reader = response.body.getReader();
91
- const contentLength = response.headers.get('Content-Length');
92
- const total = contentLength ? parseInt(contentLength) : 0;
93
- let loaded = 0;
94
-
95
- // periodically read data into the new stream tracking while download progress
96
- const stream = new ReadableStream({
97
- type: "bytes",
98
- start(controller) {
99
-
100
- pump();
101
-
102
- function pump() {
103
-
104
- reader.read().then(({ done, value }) => {
105
-
106
- if (done) {
107
- // no more data, we're done
108
- controller.close();
109
- return;
110
- }
111
-
112
- loaded += value.byteLength;
113
-
114
- progress(loaded, total);
115
-
116
- controller.enqueue(value);
117
- pump();
118
-
119
- });
120
-
121
- }
139
+ }
122
140
 
123
- }
141
+ try {
142
+ response = observeResponseProgress(response, progress);
143
+ } catch (e) {
144
+ console.warn('Failed to wrap response');
145
+ }
124
146
 
125
- });
147
+ const arrayBuffer = await response.arrayBuffer();
126
148
 
127
- return new Response(stream);
128
- }
149
+ const asset = new Asset(
150
+ function () {
151
+ return arrayBuffer;
152
+ },
153
+ arrayBuffer.byteSize
154
+ );
129
155
 
156
+ success(asset);
130
157
 
158
+ return asset;
131
159
  }
132
160
  }
@@ -22,7 +22,7 @@ export class HarmonicDiffusionGrid {
22
22
  */
23
23
  height: number;
24
24
  /**
25
- * Maps which indices are assigned with values
25
+ * Maps which indices are assigned with values. Assigned cells retain their original values
26
26
  * @type {BitSet}
27
27
  */
28
28
  assignment: BitSet;
@@ -1 +1 @@
1
- {"version":3,"file":"HarmonicDiffusionGrid.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.js"],"names":[],"mappings":"AAGA;IACI;;;;;OAKG;IACH,kBAJW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,SAClC,MAAM,UACN,MAAM,EA6BhB;IArBG;;;OAGG;IACH,MAFU,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,CAE5B;IAChB;;;OAGG;IACH,OAFU,MAAM,CAEE;IAClB;;;OAGG;IACH,QAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,YAFU,MAAM,CAEc;IAGlC;;OAEG;IACH,cAGC;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,SACN,MAAM,QAyBhB;IAED;;OAEG;IACH,aA8DC;CACJ;uBAhJsB,mCAAmC"}
1
+ {"version":3,"file":"HarmonicDiffusionGrid.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.js"],"names":[],"mappings":"AAGA;IACI;;;;;OAKG;IACH,kBAJW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,SAClC,MAAM,UACN,MAAM,EA6BhB;IArBG;;;OAGG;IACH,MAFU,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,CAE5B;IAChB;;;OAGG;IACH,OAFU,MAAM,CAEE;IAClB;;;OAGG;IACH,QAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,YAFU,MAAM,CAEc;IAGlC;;OAEG;IACH,cAGC;IAED;;;;;OAKG;IACH,UAJW,MAAM,KACN,MAAM,SACN,MAAM,QAyBhB;IAED;;OAEG;IACH,aA8DC;CACJ;uBA/IsB,mCAAmC"}
@@ -1,5 +1,5 @@
1
- import { BitSet } from "../../../../core/binary/BitSet.js";
2
1
  import { assert } from "../../../../core/assert.js";
2
+ import { BitSet } from "../../../../core/binary/BitSet.js";
3
3
 
4
4
  export class HarmonicDiffusionGrid {
5
5
  /**
@@ -9,8 +9,8 @@ export class HarmonicDiffusionGrid {
9
9
  * @param {number} height
10
10
  */
11
11
  constructor(data, width, height) {
12
- assert.typeOf(width, 'number', 'width');
13
- assert.typeOf(height, 'number', 'height');
12
+ assert.isNonNegativeInteger(width, 'width');
13
+ assert.isNonNegativeInteger(height, 'height');
14
14
 
15
15
  assert.equal(data.length, width * height, `data.length(=${data.length}) is not equal to product of width(=${width})*height(=${height})`);
16
16
 
@@ -31,7 +31,7 @@ export class HarmonicDiffusionGrid {
31
31
  this.height = height;
32
32
 
33
33
  /**
34
- * Maps which indices are assigned with values
34
+ * Maps which indices are assigned with values. Assigned cells retain their original values
35
35
  * @type {BitSet}
36
36
  */
37
37
  this.assignment = new BitSet();
@@ -5,9 +5,8 @@ export default convertSampler2D2Canvas;
5
5
  * @param {Number} [scale]
6
6
  * @param {Number} [offset]
7
7
  * @param {HTMLCanvasElement} [canvas] if no canvas is supplied, a new one will be created
8
- * @param {function(index:int, array:ArrayLike<number>, x:int, y:int)} [fillDD] allows you to supply mapping function, if none is given - one will be created from sampler
9
8
  * @returns {HTMLCanvasElement} canvas
10
9
  */
11
- declare function convertSampler2D2Canvas(sampler: Sampler2D, scale?: number, offset?: number, canvas?: HTMLCanvasElement, fillDD: any): HTMLCanvasElement;
10
+ declare function convertSampler2D2Canvas(sampler: Sampler2D, scale?: number, offset?: number, canvas?: HTMLCanvasElement): HTMLCanvasElement;
12
11
  import { Sampler2D } from "./Sampler2D.js";
13
12
  //# sourceMappingURL=Sampler2D2Canvas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Sampler2D2Canvas.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/sampler/Sampler2D2Canvas.js"],"names":[],"mappings":";AAQA;;;;;;;;GAQG;AACH,kDAPW,SAAS,4CAGT,iBAAiB,gBAEf,iBAAiB,CA2E7B;0BArFyB,gBAAgB"}
1
+ {"version":3,"file":"Sampler2D2Canvas.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/sampler/Sampler2D2Canvas.js"],"names":[],"mappings":";AAQA;;;;;;;GAOG;AACH,kDANW,SAAS,4CAGT,iBAAiB,GACf,iBAAiB,CA2E7B;0BApFyB,gBAAgB"}
@@ -12,10 +12,9 @@ import { sampler2d_write_to_canvas_raw } from "./sampler2d_write_to_canvas_raw.j
12
12
  * @param {Number} [scale]
13
13
  * @param {Number} [offset]
14
14
  * @param {HTMLCanvasElement} [canvas] if no canvas is supplied, a new one will be created
15
- * @param {function(index:int, array:ArrayLike<number>, x:int, y:int)} [fillDD] allows you to supply mapping function, if none is given - one will be created from sampler
16
15
  * @returns {HTMLCanvasElement} canvas
17
16
  */
18
- function convertSampler2D2Canvas(sampler, scale = 255, offset = 0, canvas, fillDD) {
17
+ function convertSampler2D2Canvas(sampler, scale = 255, offset = 0, canvas) {
19
18
  const source_data = sampler.data;
20
19
 
21
20
  //generate canvas
@@ -1 +1 @@
1
- {"version":3,"file":"sampler2d_to_uint8_RGBA.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.js"],"names":[],"mappings":"AAsCA;;;;GAIG;AACH,mFAqDC"}
1
+ {"version":3,"file":"sampler2d_to_uint8_RGBA.d.ts","sourceRoot":"","sources":["../../../../../../src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.js"],"names":[],"mappings":"AAsCA;;;;GAIG;AACH,mFA6DC"}