@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.
- package/build/meep.cjs +109 -78
- package/build/meep.min.js +1 -1
- package/build/meep.module.js +109 -78
- package/package.json +1 -1
- package/src/core/binary/downloadUrlAsFile.d.ts.map +1 -1
- package/src/core/binary/downloadUrlAsFile.js +3 -1
- package/src/core/color/oklab/Okhsv.spec.d.ts +2 -0
- package/src/core/color/oklab/Okhsv.spec.d.ts.map +1 -0
- package/src/core/color/oklab/Okhsv.spec.js +17 -0
- package/src/core/color/oklab/XYZ.spec.js +2 -2
- package/src/core/color/oklab/compute_max_saturation.d.ts +11 -0
- package/src/core/color/oklab/compute_max_saturation.d.ts.map +1 -0
- package/src/core/color/oklab/compute_max_saturation.js +84 -0
- package/src/core/color/oklab/find_cusp.d.ts +10 -0
- package/src/core/color/oklab/find_cusp.d.ts.map +1 -0
- package/src/core/color/oklab/find_cusp.js +27 -0
- package/src/core/color/oklab/find_gamut_intersection.d.ts +15 -0
- package/src/core/color/oklab/find_gamut_intersection.d.ts.map +1 -0
- package/src/core/color/oklab/find_gamut_intersection.js +101 -0
- package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts +9 -0
- package/src/core/color/oklab/linear_srgb_to_okhsv.d.ts.map +1 -0
- package/src/core/color/oklab/linear_srgb_to_okhsv.js +74 -0
- package/src/core/color/oklab/linear_srgb_to_oklab.d.ts +9 -0
- package/src/core/color/oklab/linear_srgb_to_oklab.d.ts.map +1 -0
- package/src/core/color/oklab/linear_srgb_to_oklab.js +20 -0
- package/src/core/color/oklab/okhsv_to_linear_srgb.d.ts +9 -0
- package/src/core/color/oklab/okhsv_to_linear_srgb.d.ts.map +1 -0
- package/src/core/color/oklab/okhsv_to_linear_srgb.js +59 -0
- package/src/core/color/oklab/oklab_to_linear_srgb.d.ts +10 -0
- package/src/core/color/oklab/oklab_to_linear_srgb.d.ts.map +1 -0
- package/src/core/color/oklab/oklab_to_linear_srgb.js +21 -0
- package/src/core/color/oklab/oklab_to_xyz.d.ts +5 -2
- package/src/core/color/oklab/oklab_to_xyz.d.ts.map +1 -1
- package/src/core/color/oklab/oklab_to_xyz.js +5 -5
- package/src/core/color/oklab/oklab_to_xyz.spec.js +4 -4
- package/src/core/color/oklab/toe.d.ts +13 -0
- package/src/core/color/oklab/toe.d.ts.map +1 -0
- package/src/core/color/oklab/toe.js +22 -0
- package/src/core/color/oklab/xyz_to_oklab.d.ts +5 -2
- package/src/core/color/oklab/xyz_to_oklab.d.ts.map +1 -1
- package/src/core/color/oklab/xyz_to_oklab.js +5 -5
- package/src/core/color/oklab/xyz_to_oklab.spec.js +4 -4
- package/src/engine/asset/AssetManager.d.ts.map +1 -1
- package/src/engine/asset/AssetManager.js +6 -1
- package/src/engine/asset/loaders/ArrayBufferLoader.d.ts +2 -1
- package/src/engine/asset/loaders/ArrayBufferLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/ArrayBufferLoader.js +107 -79
- package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.d.ts +1 -1
- package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/HarmonicDiffusionGrid.js +4 -4
- package/src/engine/graphics/texture/sampler/Sampler2D2Canvas.d.ts +1 -2
- package/src/engine/graphics/texture/sampler/Sampler2D2Canvas.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D2Canvas.js +1 -2
- package/src/engine/graphics/texture/sampler/sampler2d_to_uint8_RGBA.d.ts.map +1 -1
- 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
|
-
* @
|
|
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(
|
|
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
|
|
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
|
-
* @
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
* @
|
|
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(
|
|
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
|
|
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
|
-
* @
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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;
|
|
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):
|
|
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":"
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
135
|
+
if (response.status === 0) {
|
|
72
136
|
|
|
73
|
-
|
|
137
|
+
console.warn('HTTP Status 0 received.');
|
|
74
138
|
|
|
75
|
-
|
|
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
|
-
|
|
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;
|
|
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.
|
|
13
|
-
assert.
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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"}
|