@draco-rust/decoder 0.1.1 → 0.2.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.
- package/README.md +83 -8
- package/index.d.ts +75 -3
- package/index.js +236 -4
- package/index_bg.wasm +0 -0
- package/index_bg.wasm.d.ts +5 -3
- package/legacy/index.d.ts +75 -3
- package/legacy/index.js +236 -4
- package/legacy/index_bg.wasm +0 -0
- package/legacy/index_bg.wasm.d.ts +5 -3
- package/legacy/pool.d.ts +45 -0
- package/legacy/pool.js +193 -0
- package/legacy/three.d.ts +19 -0
- package/legacy/three.js +82 -0
- package/legacy/worker.js +28 -0
- package/mesh/index.d.ts +75 -3
- package/mesh/index.js +236 -4
- package/mesh/index_bg.wasm +0 -0
- package/mesh/index_bg.wasm.d.ts +5 -3
- package/mesh/pool.d.ts +45 -0
- package/mesh/pool.js +193 -0
- package/mesh/three.d.ts +19 -0
- package/mesh/three.js +82 -0
- package/mesh/worker.js +28 -0
- package/package.json +29 -5
- package/point-cloud/index.d.ts +75 -3
- package/point-cloud/index.js +236 -4
- package/point-cloud/index_bg.wasm +0 -0
- package/point-cloud/index_bg.wasm.d.ts +5 -3
- package/point-cloud/pool.d.ts +45 -0
- package/point-cloud/pool.js +193 -0
- package/point-cloud/three.d.ts +19 -0
- package/point-cloud/three.js +82 -0
- package/point-cloud/worker.js +28 -0
- package/pool.d.ts +45 -0
- package/pool.js +193 -0
- package/three.d.ts +19 -0
- package/three.js +82 -0
- package/worker.js +28 -0
package/mesh/three.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// three.js's DRACOLoader, decoding on this entry's worker pool. Everything a
|
|
2
|
+
// caller sees -- load, parse, decodeDracoFile, GLTFLoader's use of it, the
|
|
3
|
+
// geometry it builds -- is three's own class; only the decode is replaced, so
|
|
4
|
+
// the result follows whichever three the application has.
|
|
5
|
+
import { REVISION } from 'three';
|
|
6
|
+
import { DRACOLoader as ThreeDRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
|
|
7
|
+
import { createDecoderPool } from './pool.js';
|
|
8
|
+
|
|
9
|
+
// From r181 DRACOLoader pads an attribute whose items are not a multiple of
|
|
10
|
+
// four bytes and builds it interleaved, from the stride its worker reports.
|
|
11
|
+
const PADS = Number.parseInt(REVISION, 10) >= 181;
|
|
12
|
+
|
|
13
|
+
function padded(array, itemSize) {
|
|
14
|
+
const bytes = array.BYTES_PER_ELEMENT;
|
|
15
|
+
const stride = (Math.ceil((itemSize * bytes) / 4) * 4) / bytes;
|
|
16
|
+
if (!PADS || stride === itemSize) return { array, stride: itemSize };
|
|
17
|
+
const count = array.length / itemSize;
|
|
18
|
+
const out = new array.constructor(count * stride);
|
|
19
|
+
for (let i = 0; i < count; i += 1) {
|
|
20
|
+
out.set(array.subarray(i * itemSize, (i + 1) * itemSize), i * stride);
|
|
21
|
+
}
|
|
22
|
+
return { array: out, stride };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class DRACOLoader extends ThreeDRACOLoader {
|
|
26
|
+
#tasks = new WeakMap();
|
|
27
|
+
|
|
28
|
+
constructor(manager, options = {}) {
|
|
29
|
+
super(manager);
|
|
30
|
+
this.pool = options.pool ?? createDecoderPool(options);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// The buffer goes to a worker by transfer, which leaves nothing here to
|
|
34
|
+
// decode again; a second request for it gets the first answer, as three's
|
|
35
|
+
// own task cache gives it.
|
|
36
|
+
decodeGeometry(buffer, taskConfig) {
|
|
37
|
+
const key = JSON.stringify(taskConfig);
|
|
38
|
+
const cached = this.#tasks.get(buffer);
|
|
39
|
+
if (cached?.key === key) return cached.promise;
|
|
40
|
+
if (cached && buffer.byteLength === 0) {
|
|
41
|
+
return Promise.reject(new Error('THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.'));
|
|
42
|
+
}
|
|
43
|
+
const { attributeIDs, attributeTypes, useUniqueIDs, vertexColorSpace } = taskConfig;
|
|
44
|
+
const requests = Object.keys(attributeIDs).map((name) => ({
|
|
45
|
+
name,
|
|
46
|
+
...(useUniqueIDs ? { id: attributeIDs[name] } : { semantic: attributeIDs[name] }),
|
|
47
|
+
type: attributeTypes[name],
|
|
48
|
+
}));
|
|
49
|
+
const promise = this.pool.decode(buffer, requests, { transfer: buffer instanceof ArrayBuffer }).then((result) => {
|
|
50
|
+
if (!result.success) throw new Error(`THREE.DRACOLoader: Decoding failed: ${result.error}`);
|
|
51
|
+
return this._createGeometry({
|
|
52
|
+
index: result.index ? { array: result.index, itemSize: 1 } : null,
|
|
53
|
+
attributes: result.attributes.map(({ name, array, itemSize }) => ({
|
|
54
|
+
name,
|
|
55
|
+
itemSize,
|
|
56
|
+
...padded(array, itemSize),
|
|
57
|
+
...(name === 'color' ? { vertexColorSpace } : {}),
|
|
58
|
+
})),
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
if (buffer instanceof ArrayBuffer) this.#tasks.set(buffer, { key, promise });
|
|
62
|
+
return promise;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
setWorkerLimit(workerLimit) {
|
|
66
|
+
super.setWorkerLimit(workerLimit);
|
|
67
|
+
this.pool.setWorkerLimit(workerLimit);
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
preload() {
|
|
72
|
+
// A failure shows again on the first decode, which is where it is handled.
|
|
73
|
+
this.pool.preload().catch(() => {});
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
dispose() {
|
|
78
|
+
super.dispose();
|
|
79
|
+
this.pool.dispose();
|
|
80
|
+
return this;
|
|
81
|
+
}
|
|
82
|
+
}
|
package/mesh/worker.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// A decoder worker. The pool sends it the compiled module once, then streams
|
|
2
|
+
// to decode; it answers each with its result, handing the arrays back by
|
|
3
|
+
// transfer. Runs as a Web Worker and as a Node worker thread.
|
|
4
|
+
import init, { decode_draco } from './index.js';
|
|
5
|
+
|
|
6
|
+
const web = typeof self !== 'undefined' && typeof self.postMessage === 'function';
|
|
7
|
+
const port = web ? self : process.getBuiltinModule('node:worker_threads').parentPort;
|
|
8
|
+
const listen = (handler) =>
|
|
9
|
+
web ? self.addEventListener('message', (event) => handler(event.data)) : port.on('message', handler);
|
|
10
|
+
|
|
11
|
+
let ready = null;
|
|
12
|
+
|
|
13
|
+
listen(async (message) => {
|
|
14
|
+
if (message.type === 'init') {
|
|
15
|
+
ready = init({ module_or_path: message.module });
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const { id, data, attributes } = message;
|
|
19
|
+
try {
|
|
20
|
+
await ready;
|
|
21
|
+
const result = decode_draco(data, attributes);
|
|
22
|
+
const transfer = result.attributes.map((attribute) => attribute.array.buffer);
|
|
23
|
+
if (result.index) transfer.push(result.index.buffer);
|
|
24
|
+
port.postMessage({ id, result }, transfer);
|
|
25
|
+
} catch (error) {
|
|
26
|
+
port.postMessage({ id, error: String(error?.message ?? error) });
|
|
27
|
+
}
|
|
28
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@draco-rust/decoder",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Draco geometry decoder in WebAssembly, a safe Rust port of Google Draco: meshes, point clouds and older bitstreams, each as its own small entry.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"draco",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"directory": "web/npm/decoder"
|
|
25
25
|
},
|
|
26
26
|
"draco-rust": {
|
|
27
|
-
"commit": "
|
|
28
|
-
"draco-core": "2.3.
|
|
29
|
-
"draco-io": "0.
|
|
30
|
-
"draco-gltf": "0.
|
|
27
|
+
"commit": "8650e1ca",
|
|
28
|
+
"draco-core": "2.3.2",
|
|
29
|
+
"draco-io": "0.6.0",
|
|
30
|
+
"draco-gltf": "0.7.0"
|
|
31
31
|
},
|
|
32
32
|
"type": "module",
|
|
33
33
|
"sideEffects": false,
|
|
@@ -48,6 +48,22 @@
|
|
|
48
48
|
"types": "./legacy/index.d.ts",
|
|
49
49
|
"default": "./legacy/index.js"
|
|
50
50
|
},
|
|
51
|
+
"./pool": {
|
|
52
|
+
"types": "./pool.d.ts",
|
|
53
|
+
"default": "./pool.js"
|
|
54
|
+
},
|
|
55
|
+
"./*/pool": {
|
|
56
|
+
"types": "./*/pool.d.ts",
|
|
57
|
+
"default": "./*/pool.js"
|
|
58
|
+
},
|
|
59
|
+
"./three": {
|
|
60
|
+
"types": "./three.d.ts",
|
|
61
|
+
"default": "./three.js"
|
|
62
|
+
},
|
|
63
|
+
"./*/three": {
|
|
64
|
+
"types": "./*/three.d.ts",
|
|
65
|
+
"default": "./*/three.js"
|
|
66
|
+
},
|
|
51
67
|
"./*.wasm": "./*.wasm",
|
|
52
68
|
"./package.json": "./package.json"
|
|
53
69
|
},
|
|
@@ -56,6 +72,14 @@
|
|
|
56
72
|
"**/*.d.ts",
|
|
57
73
|
"**/*.wasm"
|
|
58
74
|
],
|
|
75
|
+
"peerDependencies": {
|
|
76
|
+
"three": ">=0.150.0"
|
|
77
|
+
},
|
|
78
|
+
"peerDependenciesMeta": {
|
|
79
|
+
"three": {
|
|
80
|
+
"optional": true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
59
83
|
"publishConfig": {
|
|
60
84
|
"access": "public"
|
|
61
85
|
}
|
package/point-cloud/index.d.ts
CHANGED
|
@@ -1,6 +1,76 @@
|
|
|
1
1
|
/* tslint:disable */
|
|
2
2
|
/* eslint-disable */
|
|
3
3
|
|
|
4
|
+
/** The name of a typed array `decode_draco` can convert an attribute to. */
|
|
5
|
+
export type DracoArrayType =
|
|
6
|
+
| "Int8Array" | "Uint8Array" | "Int16Array" | "Uint16Array"
|
|
7
|
+
| "Int32Array" | "Uint32Array" | "Float32Array";
|
|
8
|
+
|
|
9
|
+
/** A Draco attribute type, as `semantic` names it. */
|
|
10
|
+
export type DracoSemantic = "POSITION" | "NORMAL" | "COLOR" | "TEX_COORD" | "GENERIC";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* One attribute to decode: by `id`, its unique id, or by `semantic`, the first
|
|
14
|
+
* attribute of that type. `name` is handed back unchanged.
|
|
15
|
+
*/
|
|
16
|
+
export interface DracoAttributeRequest {
|
|
17
|
+
name?: string;
|
|
18
|
+
id?: number;
|
|
19
|
+
semantic?: DracoSemantic;
|
|
20
|
+
type?: DracoArrayType;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** The typed arrays an attribute can come back in. */
|
|
24
|
+
export type DracoArray =
|
|
25
|
+
| Int8Array | Uint8Array | Int16Array | Uint16Array | Int32Array | Uint32Array
|
|
26
|
+
| Float32Array | Float64Array | BigInt64Array | BigUint64Array;
|
|
27
|
+
|
|
28
|
+
export interface DracoAttribute {
|
|
29
|
+
/** The request's `name`, or else the name the stream's metadata gives it. */
|
|
30
|
+
name?: string;
|
|
31
|
+
uniqueId: number;
|
|
32
|
+
semantic: DracoSemantic;
|
|
33
|
+
array: DracoArray;
|
|
34
|
+
itemSize: number;
|
|
35
|
+
normalized: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface DracoDecodeResult {
|
|
39
|
+
success: boolean;
|
|
40
|
+
error?: string;
|
|
41
|
+
warnings: string[];
|
|
42
|
+
geometry?: "mesh" | "point_cloud";
|
|
43
|
+
/** Triangle corners for a mesh, `null` for a point cloud. */
|
|
44
|
+
index: Uint32Array | null;
|
|
45
|
+
attributes: DracoAttribute[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Decodes a Draco stream and returns its attributes as typed arrays.
|
|
52
|
+
*
|
|
53
|
+
* `attributes` is `undefined` for every attribute in its own component type,
|
|
54
|
+
* or an array of requests `{ name, id, semantic, type }`:
|
|
55
|
+
*
|
|
56
|
+
* - `id`, a unique id, finds that attribute, as glTF's
|
|
57
|
+
* `KHR_draco_mesh_compression` names them; a missing one is an error.
|
|
58
|
+
* - `semantic` (`"POSITION"`, `"NORMAL"`, `"COLOR"`, `"TEX_COORD"` or
|
|
59
|
+
* `"GENERIC"`) finds the first attribute of that type instead, as a `.drc`
|
|
60
|
+
* file is read; a missing one is left out.
|
|
61
|
+
* - `type`, a typed array's name such as `"Float32Array"` or
|
|
62
|
+
* `"Uint16Array"`, converts the values the way upstream's
|
|
63
|
+
* `GetAttributeDataArrayForAllPoints` does; without it the values keep
|
|
64
|
+
* their own type. A value the type cannot hold is an error.
|
|
65
|
+
*
|
|
66
|
+
* The result is `{ success, error, warnings, geometry, index, attributes }`,
|
|
67
|
+
* where `geometry` is `"mesh"` or `"point_cloud"` as the stream's header says,
|
|
68
|
+
* `index` a `Uint32Array` of triangle corners for a mesh and `null` for a
|
|
69
|
+
* point cloud, and each attribute `{ name, uniqueId, semantic, array,
|
|
70
|
+
* itemSize, normalized }`.
|
|
71
|
+
*/
|
|
72
|
+
export function decode_draco(data: Uint8Array, attributes: DracoAttributeRequest[] | undefined): DracoDecodeResult;
|
|
73
|
+
|
|
4
74
|
/**
|
|
5
75
|
* Install the panic hook, so a panic reads as a message rather than a trap.
|
|
6
76
|
*/
|
|
@@ -25,14 +95,16 @@ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembl
|
|
|
25
95
|
|
|
26
96
|
export interface InitOutput {
|
|
27
97
|
readonly memory: WebAssembly.Memory;
|
|
98
|
+
readonly decode_draco: (a: number, b: number, c: number) => number;
|
|
28
99
|
readonly init: () => void;
|
|
29
100
|
readonly parse_drc_bytes: (a: number, b: number) => number;
|
|
30
101
|
readonly supported_extensions: (a: number) => void;
|
|
31
102
|
readonly version: (a: number) => void;
|
|
32
|
-
readonly __wbindgen_export: (a: number) =>
|
|
33
|
-
readonly __wbindgen_export2: (a: number, b: number) => number;
|
|
103
|
+
readonly __wbindgen_export: (a: number, b: number) => number;
|
|
104
|
+
readonly __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
|
|
105
|
+
readonly __wbindgen_export3: (a: number) => void;
|
|
34
106
|
readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
|
|
35
|
-
readonly
|
|
107
|
+
readonly __wbindgen_export4: (a: number, b: number, c: number) => void;
|
|
36
108
|
readonly __wbindgen_start: () => void;
|
|
37
109
|
}
|
|
38
110
|
|
package/point-cloud/index.js
CHANGED
|
@@ -1,5 +1,37 @@
|
|
|
1
1
|
/* @ts-self-types="./index.d.ts" */
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Decodes a Draco stream and returns its attributes as typed arrays.
|
|
5
|
+
*
|
|
6
|
+
* `attributes` is `undefined` for every attribute in its own component type,
|
|
7
|
+
* or an array of requests `{ name, id, semantic, type }`:
|
|
8
|
+
*
|
|
9
|
+
* - `id`, a unique id, finds that attribute, as glTF's
|
|
10
|
+
* `KHR_draco_mesh_compression` names them; a missing one is an error.
|
|
11
|
+
* - `semantic` (`"POSITION"`, `"NORMAL"`, `"COLOR"`, `"TEX_COORD"` or
|
|
12
|
+
* `"GENERIC"`) finds the first attribute of that type instead, as a `.drc`
|
|
13
|
+
* file is read; a missing one is left out.
|
|
14
|
+
* - `type`, a typed array's name such as `"Float32Array"` or
|
|
15
|
+
* `"Uint16Array"`, converts the values the way upstream's
|
|
16
|
+
* `GetAttributeDataArrayForAllPoints` does; without it the values keep
|
|
17
|
+
* their own type. A value the type cannot hold is an error.
|
|
18
|
+
*
|
|
19
|
+
* The result is `{ success, error, warnings, geometry, index, attributes }`,
|
|
20
|
+
* where `geometry` is `"mesh"` or `"point_cloud"` as the stream's header says,
|
|
21
|
+
* `index` a `Uint32Array` of triangle corners for a mesh and `null` for a
|
|
22
|
+
* point cloud, and each attribute `{ name, uniqueId, semantic, array,
|
|
23
|
+
* itemSize, normalized }`.
|
|
24
|
+
* @param {Uint8Array} data
|
|
25
|
+
* @param {DracoAttributeRequest[] | undefined} attributes
|
|
26
|
+
* @returns {DracoDecodeResult}
|
|
27
|
+
*/
|
|
28
|
+
export function decode_draco(data, attributes) {
|
|
29
|
+
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
|
|
30
|
+
const len0 = WASM_VECTOR_LEN;
|
|
31
|
+
const ret = wasm.decode_draco(ptr0, len0, addHeapObject(attributes));
|
|
32
|
+
return takeObject(ret);
|
|
33
|
+
}
|
|
34
|
+
|
|
3
35
|
/**
|
|
4
36
|
* Install the panic hook, so a panic reads as a message rather than a trap.
|
|
5
37
|
*/
|
|
@@ -13,7 +45,7 @@ export function init() {
|
|
|
13
45
|
* @returns {any}
|
|
14
46
|
*/
|
|
15
47
|
export function parse_drc_bytes(data) {
|
|
16
|
-
const ptr0 = passArray8ToWasm0(data, wasm.
|
|
48
|
+
const ptr0 = passArray8ToWasm0(data, wasm.__wbindgen_export);
|
|
17
49
|
const len0 = WASM_VECTOR_LEN;
|
|
18
50
|
const ret = wasm.parse_drc_bytes(ptr0, len0);
|
|
19
51
|
return takeObject(ret);
|
|
@@ -30,7 +62,7 @@ export function supported_extensions() {
|
|
|
30
62
|
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
31
63
|
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
32
64
|
var v1 = getArrayJsValueFromWasm0(r0, r1);
|
|
33
|
-
wasm.
|
|
65
|
+
wasm.__wbindgen_export4(r0, r1 * 4, 4);
|
|
34
66
|
return v1;
|
|
35
67
|
} finally {
|
|
36
68
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
@@ -54,15 +86,53 @@ export function version() {
|
|
|
54
86
|
return getStringFromWasm0(r0, r1);
|
|
55
87
|
} finally {
|
|
56
88
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
57
|
-
wasm.
|
|
89
|
+
wasm.__wbindgen_export4(deferred1_0, deferred1_1, 1);
|
|
58
90
|
}
|
|
59
91
|
}
|
|
60
92
|
function __wbg_get_imports() {
|
|
61
93
|
const import0 = {
|
|
62
94
|
__proto__: null,
|
|
95
|
+
__wbg___wbindgen_is_null_e343b7d08827ba72: function(arg0) {
|
|
96
|
+
const ret = getObject(arg0) === null;
|
|
97
|
+
return ret;
|
|
98
|
+
},
|
|
99
|
+
__wbg___wbindgen_is_undefined_8865fb403f8fe9d8: function(arg0) {
|
|
100
|
+
const ret = getObject(arg0) === undefined;
|
|
101
|
+
return ret;
|
|
102
|
+
},
|
|
103
|
+
__wbg___wbindgen_number_get_2e0e7dee9f701a71: function(arg0, arg1) {
|
|
104
|
+
const obj = getObject(arg1);
|
|
105
|
+
const ret = typeof(obj) === 'number' ? obj : undefined;
|
|
106
|
+
getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
|
|
107
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
|
|
108
|
+
},
|
|
109
|
+
__wbg___wbindgen_string_get_0380ccaa2f57f0d9: function(arg0, arg1) {
|
|
110
|
+
const obj = getObject(arg1);
|
|
111
|
+
const ret = typeof(obj) === 'string' ? obj : undefined;
|
|
112
|
+
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
113
|
+
var len1 = WASM_VECTOR_LEN;
|
|
114
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
115
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
116
|
+
},
|
|
63
117
|
__wbg___wbindgen_throw_41e9ee4f547fc59a: function(arg0, arg1) {
|
|
64
118
|
throw new Error(getStringFromWasm0(arg0, arg1));
|
|
65
119
|
},
|
|
120
|
+
__wbg_get_31af05bd4842a84f: function() { return handleError(function (arg0, arg1) {
|
|
121
|
+
const ret = Reflect.get(getObject(arg0), getObject(arg1));
|
|
122
|
+
return addHeapObject(ret);
|
|
123
|
+
}, arguments); },
|
|
124
|
+
__wbg_get_unchecked_288889d017702237: function(arg0, arg1) {
|
|
125
|
+
const ret = getObject(arg0)[arg1 >>> 0];
|
|
126
|
+
return addHeapObject(ret);
|
|
127
|
+
},
|
|
128
|
+
__wbg_isArray_e15a2ff68ffdbef2: function(arg0) {
|
|
129
|
+
const ret = Array.isArray(getObject(arg0));
|
|
130
|
+
return ret;
|
|
131
|
+
},
|
|
132
|
+
__wbg_length_d4bdea10311bd9cf: function(arg0) {
|
|
133
|
+
const ret = getObject(arg0).length;
|
|
134
|
+
return ret;
|
|
135
|
+
},
|
|
66
136
|
__wbg_new_617a8cdb8bb1130e: function() {
|
|
67
137
|
const ret = new Object();
|
|
68
138
|
return addHeapObject(ret);
|
|
@@ -71,14 +141,34 @@ function __wbg_get_imports() {
|
|
|
71
141
|
const ret = new Array();
|
|
72
142
|
return addHeapObject(ret);
|
|
73
143
|
},
|
|
144
|
+
__wbg_new_from_slice_23f60f47cde8d664: function(arg0, arg1) {
|
|
145
|
+
const ret = new Uint16Array(getArrayU16FromWasm0(arg0, arg1));
|
|
146
|
+
return addHeapObject(ret);
|
|
147
|
+
},
|
|
148
|
+
__wbg_new_from_slice_2443ca2017fac0fd: function(arg0, arg1) {
|
|
149
|
+
const ret = new Int16Array(getArrayI16FromWasm0(arg0, arg1));
|
|
150
|
+
return addHeapObject(ret);
|
|
151
|
+
},
|
|
152
|
+
__wbg_new_from_slice_36f6b4e63daa7f59: function(arg0, arg1) {
|
|
153
|
+
const ret = new Int8Array(getArrayI8FromWasm0(arg0, arg1));
|
|
154
|
+
return addHeapObject(ret);
|
|
155
|
+
},
|
|
74
156
|
__wbg_new_from_slice_37a3c3a194266cb8: function(arg0, arg1) {
|
|
75
157
|
const ret = new Uint32Array(getArrayU32FromWasm0(arg0, arg1));
|
|
76
158
|
return addHeapObject(ret);
|
|
77
159
|
},
|
|
160
|
+
__wbg_new_from_slice_911f717853b222c7: function(arg0, arg1) {
|
|
161
|
+
const ret = new Int32Array(getArrayI32FromWasm0(arg0, arg1));
|
|
162
|
+
return addHeapObject(ret);
|
|
163
|
+
},
|
|
78
164
|
__wbg_new_from_slice_9a868026ffa4208a: function(arg0, arg1) {
|
|
79
165
|
const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1));
|
|
80
166
|
return addHeapObject(ret);
|
|
81
167
|
},
|
|
168
|
+
__wbg_new_from_slice_aa8f37bd5e72dcc7: function(arg0, arg1) {
|
|
169
|
+
const ret = new BigInt64Array(getArrayI64FromWasm0(arg0, arg1));
|
|
170
|
+
return addHeapObject(ret);
|
|
171
|
+
},
|
|
82
172
|
__wbg_new_from_slice_ca6ad97db1f4779a: function(arg0, arg1) {
|
|
83
173
|
const ret = new Float32Array(getArrayF32FromWasm0(arg0, arg1));
|
|
84
174
|
return addHeapObject(ret);
|
|
@@ -87,6 +177,10 @@ function __wbg_get_imports() {
|
|
|
87
177
|
const ret = new Float64Array(getArrayF64FromWasm0(arg0, arg1));
|
|
88
178
|
return addHeapObject(ret);
|
|
89
179
|
},
|
|
180
|
+
__wbg_new_from_slice_f6cd96ab370a57b3: function(arg0, arg1) {
|
|
181
|
+
const ret = new BigUint64Array(getArrayU64FromWasm0(arg0, arg1));
|
|
182
|
+
return addHeapObject(ret);
|
|
183
|
+
},
|
|
90
184
|
__wbg_push_2baf45db356cf468: function(arg0, arg1) {
|
|
91
185
|
const ret = getObject(arg0).push(getObject(arg1));
|
|
92
186
|
return ret;
|
|
@@ -140,6 +234,26 @@ function getArrayF64FromWasm0(ptr, len) {
|
|
|
140
234
|
return getFloat64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);
|
|
141
235
|
}
|
|
142
236
|
|
|
237
|
+
function getArrayI16FromWasm0(ptr, len) {
|
|
238
|
+
ptr = ptr >>> 0;
|
|
239
|
+
return getInt16ArrayMemory0().subarray(ptr / 2, ptr / 2 + len);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
function getArrayI32FromWasm0(ptr, len) {
|
|
243
|
+
ptr = ptr >>> 0;
|
|
244
|
+
return getInt32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
function getArrayI64FromWasm0(ptr, len) {
|
|
248
|
+
ptr = ptr >>> 0;
|
|
249
|
+
return getBigInt64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
function getArrayI8FromWasm0(ptr, len) {
|
|
253
|
+
ptr = ptr >>> 0;
|
|
254
|
+
return getInt8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
|
|
255
|
+
}
|
|
256
|
+
|
|
143
257
|
function getArrayJsValueFromWasm0(ptr, len) {
|
|
144
258
|
ptr = ptr >>> 0;
|
|
145
259
|
const mem = getDataViewMemory0();
|
|
@@ -150,16 +264,42 @@ function getArrayJsValueFromWasm0(ptr, len) {
|
|
|
150
264
|
return result;
|
|
151
265
|
}
|
|
152
266
|
|
|
267
|
+
function getArrayU16FromWasm0(ptr, len) {
|
|
268
|
+
ptr = ptr >>> 0;
|
|
269
|
+
return getUint16ArrayMemory0().subarray(ptr / 2, ptr / 2 + len);
|
|
270
|
+
}
|
|
271
|
+
|
|
153
272
|
function getArrayU32FromWasm0(ptr, len) {
|
|
154
273
|
ptr = ptr >>> 0;
|
|
155
274
|
return getUint32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);
|
|
156
275
|
}
|
|
157
276
|
|
|
277
|
+
function getArrayU64FromWasm0(ptr, len) {
|
|
278
|
+
ptr = ptr >>> 0;
|
|
279
|
+
return getBigUint64ArrayMemory0().subarray(ptr / 8, ptr / 8 + len);
|
|
280
|
+
}
|
|
281
|
+
|
|
158
282
|
function getArrayU8FromWasm0(ptr, len) {
|
|
159
283
|
ptr = ptr >>> 0;
|
|
160
284
|
return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
|
|
161
285
|
}
|
|
162
286
|
|
|
287
|
+
let cachedBigInt64ArrayMemory0 = null;
|
|
288
|
+
function getBigInt64ArrayMemory0() {
|
|
289
|
+
if (cachedBigInt64ArrayMemory0 === null || cachedBigInt64ArrayMemory0.byteLength === 0) {
|
|
290
|
+
cachedBigInt64ArrayMemory0 = new BigInt64Array(wasm.memory.buffer);
|
|
291
|
+
}
|
|
292
|
+
return cachedBigInt64ArrayMemory0;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
let cachedBigUint64ArrayMemory0 = null;
|
|
296
|
+
function getBigUint64ArrayMemory0() {
|
|
297
|
+
if (cachedBigUint64ArrayMemory0 === null || cachedBigUint64ArrayMemory0.byteLength === 0) {
|
|
298
|
+
cachedBigUint64ArrayMemory0 = new BigUint64Array(wasm.memory.buffer);
|
|
299
|
+
}
|
|
300
|
+
return cachedBigUint64ArrayMemory0;
|
|
301
|
+
}
|
|
302
|
+
|
|
163
303
|
let cachedDataViewMemory0 = null;
|
|
164
304
|
function getDataViewMemory0() {
|
|
165
305
|
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
|
|
@@ -184,10 +324,42 @@ function getFloat64ArrayMemory0() {
|
|
|
184
324
|
return cachedFloat64ArrayMemory0;
|
|
185
325
|
}
|
|
186
326
|
|
|
327
|
+
let cachedInt16ArrayMemory0 = null;
|
|
328
|
+
function getInt16ArrayMemory0() {
|
|
329
|
+
if (cachedInt16ArrayMemory0 === null || cachedInt16ArrayMemory0.byteLength === 0) {
|
|
330
|
+
cachedInt16ArrayMemory0 = new Int16Array(wasm.memory.buffer);
|
|
331
|
+
}
|
|
332
|
+
return cachedInt16ArrayMemory0;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
let cachedInt32ArrayMemory0 = null;
|
|
336
|
+
function getInt32ArrayMemory0() {
|
|
337
|
+
if (cachedInt32ArrayMemory0 === null || cachedInt32ArrayMemory0.byteLength === 0) {
|
|
338
|
+
cachedInt32ArrayMemory0 = new Int32Array(wasm.memory.buffer);
|
|
339
|
+
}
|
|
340
|
+
return cachedInt32ArrayMemory0;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
let cachedInt8ArrayMemory0 = null;
|
|
344
|
+
function getInt8ArrayMemory0() {
|
|
345
|
+
if (cachedInt8ArrayMemory0 === null || cachedInt8ArrayMemory0.byteLength === 0) {
|
|
346
|
+
cachedInt8ArrayMemory0 = new Int8Array(wasm.memory.buffer);
|
|
347
|
+
}
|
|
348
|
+
return cachedInt8ArrayMemory0;
|
|
349
|
+
}
|
|
350
|
+
|
|
187
351
|
function getStringFromWasm0(ptr, len) {
|
|
188
352
|
return decodeText(ptr >>> 0, len);
|
|
189
353
|
}
|
|
190
354
|
|
|
355
|
+
let cachedUint16ArrayMemory0 = null;
|
|
356
|
+
function getUint16ArrayMemory0() {
|
|
357
|
+
if (cachedUint16ArrayMemory0 === null || cachedUint16ArrayMemory0.byteLength === 0) {
|
|
358
|
+
cachedUint16ArrayMemory0 = new Uint16Array(wasm.memory.buffer);
|
|
359
|
+
}
|
|
360
|
+
return cachedUint16ArrayMemory0;
|
|
361
|
+
}
|
|
362
|
+
|
|
191
363
|
let cachedUint32ArrayMemory0 = null;
|
|
192
364
|
function getUint32ArrayMemory0() {
|
|
193
365
|
if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {
|
|
@@ -210,7 +382,7 @@ function handleError(f, args) {
|
|
|
210
382
|
try {
|
|
211
383
|
return f.apply(this, args);
|
|
212
384
|
} catch (e) {
|
|
213
|
-
wasm.
|
|
385
|
+
wasm.__wbindgen_export3(addHeapObject(e));
|
|
214
386
|
}
|
|
215
387
|
}
|
|
216
388
|
|
|
@@ -219,6 +391,10 @@ heap.push(undefined, null, true, false);
|
|
|
219
391
|
|
|
220
392
|
let heap_next = heap.length;
|
|
221
393
|
|
|
394
|
+
function isLikeNone(x) {
|
|
395
|
+
return x === undefined || x === null;
|
|
396
|
+
}
|
|
397
|
+
|
|
222
398
|
function passArray8ToWasm0(arg, malloc) {
|
|
223
399
|
const ptr = malloc(arg.length * 1, 1) >>> 0;
|
|
224
400
|
getUint8ArrayMemory0().set(arg, ptr / 1);
|
|
@@ -226,6 +402,43 @@ function passArray8ToWasm0(arg, malloc) {
|
|
|
226
402
|
return ptr;
|
|
227
403
|
}
|
|
228
404
|
|
|
405
|
+
function passStringToWasm0(arg, malloc, realloc) {
|
|
406
|
+
if (realloc === undefined) {
|
|
407
|
+
const buf = cachedTextEncoder.encode(arg);
|
|
408
|
+
const ptr = malloc(buf.length, 1) >>> 0;
|
|
409
|
+
getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
|
|
410
|
+
WASM_VECTOR_LEN = buf.length;
|
|
411
|
+
return ptr;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
let len = arg.length;
|
|
415
|
+
let ptr = malloc(len, 1) >>> 0;
|
|
416
|
+
|
|
417
|
+
const mem = getUint8ArrayMemory0();
|
|
418
|
+
|
|
419
|
+
let offset = 0;
|
|
420
|
+
|
|
421
|
+
for (; offset < len; offset++) {
|
|
422
|
+
const code = arg.charCodeAt(offset);
|
|
423
|
+
if (code > 0x7F) break;
|
|
424
|
+
mem[ptr + offset] = code;
|
|
425
|
+
}
|
|
426
|
+
if (offset !== len) {
|
|
427
|
+
if (offset !== 0) {
|
|
428
|
+
arg = arg.slice(offset);
|
|
429
|
+
}
|
|
430
|
+
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
|
|
431
|
+
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
|
|
432
|
+
const ret = cachedTextEncoder.encodeInto(arg, view);
|
|
433
|
+
|
|
434
|
+
offset += ret.written;
|
|
435
|
+
ptr = realloc(ptr, len, offset, 1) >>> 0;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
WASM_VECTOR_LEN = offset;
|
|
439
|
+
return ptr;
|
|
440
|
+
}
|
|
441
|
+
|
|
229
442
|
function takeObject(idx) {
|
|
230
443
|
const ret = getObject(idx);
|
|
231
444
|
dropObject(idx);
|
|
@@ -246,6 +459,19 @@ function decodeText(ptr, len) {
|
|
|
246
459
|
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
|
|
247
460
|
}
|
|
248
461
|
|
|
462
|
+
const cachedTextEncoder = new TextEncoder();
|
|
463
|
+
|
|
464
|
+
if (!('encodeInto' in cachedTextEncoder)) {
|
|
465
|
+
cachedTextEncoder.encodeInto = function (arg, view) {
|
|
466
|
+
const buf = cachedTextEncoder.encode(arg);
|
|
467
|
+
view.set(buf);
|
|
468
|
+
return {
|
|
469
|
+
read: arg.length,
|
|
470
|
+
written: buf.length
|
|
471
|
+
};
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
|
|
249
475
|
let WASM_VECTOR_LEN = 0;
|
|
250
476
|
|
|
251
477
|
let wasmModule, wasmInstance, wasm;
|
|
@@ -253,9 +479,15 @@ function __wbg_finalize_init(instance, module) {
|
|
|
253
479
|
wasmInstance = instance;
|
|
254
480
|
wasm = instance.exports;
|
|
255
481
|
wasmModule = module;
|
|
482
|
+
cachedBigInt64ArrayMemory0 = null;
|
|
483
|
+
cachedBigUint64ArrayMemory0 = null;
|
|
256
484
|
cachedDataViewMemory0 = null;
|
|
257
485
|
cachedFloat32ArrayMemory0 = null;
|
|
258
486
|
cachedFloat64ArrayMemory0 = null;
|
|
487
|
+
cachedInt16ArrayMemory0 = null;
|
|
488
|
+
cachedInt32ArrayMemory0 = null;
|
|
489
|
+
cachedInt8ArrayMemory0 = null;
|
|
490
|
+
cachedUint16ArrayMemory0 = null;
|
|
259
491
|
cachedUint32ArrayMemory0 = null;
|
|
260
492
|
cachedUint8ArrayMemory0 = null;
|
|
261
493
|
wasm.__wbindgen_start();
|
|
Binary file
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/* tslint:disable */
|
|
2
2
|
/* eslint-disable */
|
|
3
3
|
export const memory: WebAssembly.Memory;
|
|
4
|
+
export const decode_draco: (a: number, b: number, c: number) => number;
|
|
4
5
|
export const init: () => void;
|
|
5
6
|
export const parse_drc_bytes: (a: number, b: number) => number;
|
|
6
7
|
export const supported_extensions: (a: number) => void;
|
|
7
8
|
export const version: (a: number) => void;
|
|
8
|
-
export const __wbindgen_export: (a: number) =>
|
|
9
|
-
export const __wbindgen_export2: (a: number, b: number) => number;
|
|
9
|
+
export const __wbindgen_export: (a: number, b: number) => number;
|
|
10
|
+
export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
|
|
11
|
+
export const __wbindgen_export3: (a: number) => void;
|
|
10
12
|
export const __wbindgen_add_to_stack_pointer: (a: number) => number;
|
|
11
|
-
export const
|
|
13
|
+
export const __wbindgen_export4: (a: number, b: number, c: number) => void;
|
|
12
14
|
export const __wbindgen_start: () => void;
|