@voluma/vlam 0.1.0 → 0.2.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.
- package/LICENSE +21 -0
- package/README.md +68 -0
- package/THIRD_PARTY_NOTICES.md +86 -0
- package/dist/budget-governor.d.ts +154 -0
- package/dist/camera-budget-governor.d.ts +234 -0
- package/dist/chunk-cache-budget.d.ts +156 -0
- package/dist/chunk-fetch-scheduler.d.ts +168 -0
- package/dist/chunk-loader.d.ts +85 -0
- package/dist/compute-sorter.d.ts +131 -0
- package/dist/create-splat-renderer.d.ts +99 -0
- package/dist/dataset-source.d.ts +55 -0
- package/dist/depth-of-field.d.ts +73 -0
- package/dist/effects.d.ts +337 -0
- package/dist/effects.js +180 -0
- package/dist/effects.js.map +1 -0
- package/dist/formats/ksplat/index.d.ts +8 -0
- package/dist/formats/ksplat/parse-ksplat.d.ts +9 -0
- package/dist/formats/ksplat.js +167 -0
- package/dist/formats/ksplat.js.map +1 -0
- package/dist/formats/lcc/collision-mesh.d.ts +37 -0
- package/dist/formats/lcc/collision-partition.d.ts +35 -0
- package/dist/formats/lcc/index.d.ts +16 -0
- package/dist/formats/lcc/lcc.d.ts +28 -0
- package/dist/formats/lcc/lcc2-transform.d.ts +18 -0
- package/dist/formats/lcc/lcc2.d.ts +4 -0
- package/dist/formats/lcc/parse-collision-lci.d.ts +28 -0
- package/dist/formats/lcc/parse-lcc.d.ts +177 -0
- package/dist/formats/lcc/parse-mesh-ply.d.ts +21 -0
- package/dist/formats/lcc.js +969 -0
- package/dist/formats/lcc.js.map +1 -0
- package/dist/formats/ply/index.d.ts +12 -0
- package/dist/formats/ply/parse-compressed-ply.d.ts +16 -0
- package/dist/formats/ply/parse-splat-ply.d.ts +46 -0
- package/dist/formats/ply.js +230 -0
- package/dist/formats/ply.js.map +1 -0
- package/dist/formats/rad/frontier-worker-protocol.d.ts +177 -0
- package/dist/formats/rad/index.d.ts +10 -0
- package/dist/formats/rad/parse-rad.d.ts +88 -0
- package/dist/formats/rad/rad-column-decoders.d.ts +15 -0
- package/dist/formats/rad/rad-foveated-source.d.ts +71 -0
- package/dist/formats/rad/rad-parent-sizes.d.ts +45 -0
- package/dist/formats/rad/rad.d.ts +132 -0
- package/dist/formats/rad.js +1098 -0
- package/dist/formats/rad.js.map +1 -0
- package/dist/formats/sog/index.d.ts +9 -0
- package/dist/formats/sog/parse-sog.d.ts +45 -0
- package/dist/formats/sog.js +257 -0
- package/dist/formats/sog.js.map +1 -0
- package/dist/formats/splat/index.d.ts +8 -0
- package/dist/formats/splat/parse-splat.d.ts +10 -0
- package/dist/formats/splat.js +39 -0
- package/dist/formats/splat.js.map +1 -0
- package/dist/formats/spz/index.d.ts +8 -0
- package/dist/formats/spz/parse-spz.d.ts +10 -0
- package/dist/formats/spz.js +218 -0
- package/dist/formats/spz.js.map +1 -0
- package/dist/frontier-worker-CAnK_Cmu.js +566 -0
- package/dist/frontier-worker-CAnK_Cmu.js.map +1 -0
- package/dist/half-float-Cs4FDq8Q.js +30 -0
- package/dist/half-float-Cs4FDq8Q.js.map +1 -0
- package/dist/half-float.d.ts +15 -0
- package/dist/index.d.ts +54 -0
- package/dist/index.js +9054 -0
- package/dist/index.js.map +1 -0
- package/dist/load-scene.d.ts +50 -0
- package/dist/load-worker-protocol.d.ts +82 -0
- package/dist/loading-wLo8vRbA.js +102 -0
- package/dist/loading-wLo8vRbA.js.map +1 -0
- package/dist/loading.d.ts +150 -0
- package/dist/lod-manifest.d.ts +61 -0
- package/dist/lod-scheduler.d.ts +229 -0
- package/dist/lod-source.d.ts +207 -0
- package/dist/logging-BfPdd7NJ.js +19 -0
- package/dist/logging-BfPdd7NJ.js.map +1 -0
- package/dist/logging.d.ts +37 -0
- package/dist/one-shot-worker-G80btnth.js +664 -0
- package/dist/one-shot-worker-G80btnth.js.map +1 -0
- package/dist/orientation.d.ts +35 -0
- package/dist/ply-header-BwgExCn-.js +125 -0
- package/dist/ply-header-BwgExCn-.js.map +1 -0
- package/dist/ply-header.d.ts +87 -0
- package/dist/radix-sort.d.ts +28 -0
- package/dist/radix-sorter.d.ts +46 -0
- package/dist/relighting.d.ts +50 -0
- package/dist/selection-volume.d.ts +87 -0
- package/dist/sh-pack-D5wAe5gg.js +54 -0
- package/dist/sh-pack-D5wAe5gg.js.map +1 -0
- package/dist/sh-pack.d.ts +49 -0
- package/dist/sort-scheduler.d.ts +62 -0
- package/dist/sort-worker-protocol.d.ts +37 -0
- package/dist/sorter.d.ts +31 -0
- package/dist/source-transform.d.ts +57 -0
- package/dist/splat-budget-PSojLJPO.js +157 -0
- package/dist/splat-budget-PSojLJPO.js.map +1 -0
- package/dist/splat-budget.d.ts +404 -0
- package/dist/splat-data-BZM5dhhx.js +10 -0
- package/dist/splat-data-BZM5dhhx.js.map +1 -0
- package/dist/splat-data.d.ts +150 -0
- package/dist/splat-depth-pack.d.ts +39 -0
- package/dist/splat-mesh-material.d.ts +255 -0
- package/dist/splat-mesh-picking.d.ts +87 -0
- package/dist/splat-mesh-pool.d.ts +241 -0
- package/dist/splat-mesh-types-8QDjTbZO.js +390 -0
- package/dist/splat-mesh-types-8QDjTbZO.js.map +1 -0
- package/dist/splat-mesh-types.d.ts +390 -0
- package/dist/splat-mesh.d.ts +737 -0
- package/dist/splat-modifier-stack.d.ts +38 -0
- package/dist/splat-modifier.d.ts +156 -0
- package/dist/splat-partition.d.ts +37 -0
- package/dist/splat-query.d.ts +51 -0
- package/dist/splat-scene.d.ts +127 -0
- package/dist/splat-sort-bounds.d.ts +11 -0
- package/dist/static-lod-splat-mesh.d.ts +53 -0
- package/dist/static-lod-worker-D2fyqQZO.js +474 -0
- package/dist/static-lod-worker-D2fyqQZO.js.map +1 -0
- package/dist/static-lod-worker-protocol.d.ts +37 -0
- package/dist/static-lod.d.ts +24 -0
- package/dist/storage-attribute-mirror.d.ts +103 -0
- package/dist/streamed-splat-mesh-utils.d.ts +146 -0
- package/dist/streamed-splat-mesh.d.ts +985 -0
- package/dist/unified-splat-renderer.d.ts +205 -0
- package/dist/webgpu-limits.d.ts +133 -0
- package/dist/work-buffer-gather.d.ts +119 -0
- package/dist/work-buffer-material.d.ts +42 -0
- package/dist/worker-sorter.d.ts +57 -0
- package/dist/xr-view.d.ts +92 -0
- package/package.json +135 -21
|
@@ -0,0 +1,664 @@
|
|
|
1
|
+
const Q = `var QA = Object.defineProperty;
|
|
2
|
+
var CA = (A, I, g) => I in A ? QA(A, I, { enumerable: !0, configurable: !0, writable: !0, value: g }) : A[I] = g;
|
|
3
|
+
var M = (A, I, g) => CA(A, typeof I != "symbol" ? I + "" : I, g);
|
|
4
|
+
let K, y, x;
|
|
5
|
+
const p = { env: { emscripten_notify_memory_growth: function(A) {
|
|
6
|
+
x = new Uint8Array(y.exports.memory.buffer);
|
|
7
|
+
} } };
|
|
8
|
+
class EA {
|
|
9
|
+
init() {
|
|
10
|
+
return K || (K = typeof fetch < "u" ? fetch("data:application/wasm;base64," + X).then((I) => I.arrayBuffer()).then((I) => WebAssembly.instantiate(I, p)).then(this._init) : WebAssembly.instantiate(Buffer.from(X, "base64"), p).then(this._init), K);
|
|
11
|
+
}
|
|
12
|
+
_init(I) {
|
|
13
|
+
y = I.instance, p.env.emscripten_notify_memory_growth(0);
|
|
14
|
+
}
|
|
15
|
+
decode(I, g = 0) {
|
|
16
|
+
if (!y) throw new Error("ZSTDDecoder: Await .init() before decoding.");
|
|
17
|
+
const B = I.byteLength, C = y.exports.malloc(B);
|
|
18
|
+
x.set(I, C), g = g || Number(y.exports.ZSTD_findDecompressedSize(C, B));
|
|
19
|
+
const Q = y.exports.malloc(g), E = y.exports.ZSTD_decompress(Q, g, C, B), o = x.slice(Q, Q + E);
|
|
20
|
+
return y.exports.free(C), y.exports.free(Q), o;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const X = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQhBSAGQQR2IQRBICAAdCIAQQFyIQkgASgCACEPQQAhAiADIQYCQANAIAlBAkggAiAPS3JFBEAgAiEHAkAgCARAA0AgBEH//wNxQf//A0YEQCAHQRhqIQcgBiAQSQR/IAZBAmoiBigAACAFdgUgBUEQaiEFIARBEHYLIQQMAQsLA0AgBEEDcSIIQQNGBEAgBUECaiEFIARBAnYhBCAHQQNqIQcMAQsLIAcgCGoiByAPSw0EIAVBAmohBQNAIAIgB0kEQCANIAJBAXRqQQA7AQAgAkEBaiECDAELCyAGIA5LQQAgBiAFQQN1aiIHIAxLG0UEQCAHKAAAIAVBB3EiBXYhBAwCCyAEQQJ2IQQLIAYhBwsCfyALQX9qIAQgAEF/anEiBiAAQQF0QX9qIgggCWsiEUkNABogBCAIcSIEQQAgESAEIABIG2shBiALCyEIIA0gAkEBdGogBkF/aiIEOwEAIAlBASAGayAEIAZBAUgbayEJA0AgCSAASARAIABBAXUhACALQX9qIQsMAQsLAn8gByAOS0EAIAcgBSAIaiIFQQN1aiIGIAxLG0UEQCAFQQdxDAELIAUgDCIGIAdrQQN0awshBSACQQFqIQIgBEUhCCAGKAAAIAVBH3F2IQQMAQsLQWwgCUEBRyAFQSBKcg0BGiABIAJBf2o2AgAgBiAFQQdqQQN1aiADawwBC0FQCyEAIApBEGokACAACwkAQQFBBSAAGwsMACAAIAEoAAA2AAALqgMBCn8jAEHwAGsiCiQAIAJBAWohDiAAQQhqIQtBgIAEIAVBf2p0QRB1IQxBACECQQEhBkEBIAV0IglBf2oiDyEIA0AgAiAORkUEQAJAIAEgAkEBdCINai8BACIHQf//A0YEQCALIAhBA3RqIAI2AgQgCEF/aiEIQQEhBwwBCyAGQQAgDCAHQRB0QRB1ShshBgsgCiANaiAHOwEAIAJBAWohAgwBCwsgACAFNgIEIAAgBjYCACAJQQN2IAlBAXZqQQNqIQxBACEAQQAhBkEAIQIDQCAGIA5GBEADQAJAIAAgCUYNACAKIAsgAEEDdGoiASgCBCIGQQF0aiICIAIvAQAiAkEBajsBACABIAUgAhAUayIIOgADIAEgAiAIQf8BcXQgCWs7AQAgASAEIAZBAnQiAmooAgA6AAIgASACIANqKAIANgIEIABBAWohAAwBCwsFIAEgBkEBdGouAQAhDUEAIQcDQCAHIA1ORQRAIAsgAkEDdGogBjYCBANAIAIgDGogD3EiAiAISw0ACyAHQQFqIQcMAQsLIAZBAWohBgwBCwsgCkHwAGokAAsjAEIAIAEQCSAAhUKHla+vmLbem55/fkLj3MqV/M7y9YV/fAsQACAAQn43AwggACABNgIACyQBAX8gAARAIAEoAgQiAgRAIAEoAgggACACEQEADwsgABAmCwsfACAAIAEgAi8BABAINgIAIAEQBBogACACQQRqNgIEC0oBAX9BoCAoAgAiASAAaiIAQX9MBEBBiCBBMDYCAEF/DwsCQCAAPwBBEHRNDQAgABBmDQBBiCBBMDYCAEF/DwtBoCAgADYCACABC9cBAQh/Qbp/IQoCQCACKAIEIgggAigCACIJaiIOIAEgAGtLDQBBbCEKIAkgBCADKAIAIgtrSw0AIAAgCWoiBCACKAIIIgxrIQ0gACABQWBqIg8gCyAJQQAQKSADIAkgC2o2AgACQAJAIAwgBCAFa00EQCANIQUMAQsgDCAEIAZrSw0CIAcgDSAFayIAaiIBIAhqIAdNBEAgBCABIAgQDxoMAgsgBCABQQAgAGsQDyEBIAIgACAIaiIINgIEIAEgAGshBAsgBCAPIAUgCEEBECkLIA4hCgsgCgubAgEBfyMAQYABayINJAAgDSADNgJ8AkAgAkEDSwRAQX8hCQwBCwJAAkACQAJAIAJBAWsOAwADAgELIAZFBEBBuH8hCQwEC0FsIQkgBS0AACICIANLDQMgACAHIAJBAnQiAmooAgAgAiAIaigCABA7IAEgADYCAEEBIQkMAwsgASAJNgIAQQAhCQwCCyAKRQRAQWwhCQwCC0EAIQkgC0UgDEEZSHINAUEIIAR0QQhqIQBBACECA0AgAiAATw0CIAJBQGshAgwAAAsAC0FsIQkgDSANQfwAaiANQfgAaiAFIAYQFSICEAMNACANKAJ4IgMgBEsNACAAIA0gDSgCfCAHIAggAxAYIAEgADYCACACIQkLIA1BgAFqJAAgCQsLACAAIAEgAhALGgsQACAALwAAIAAtAAJBEHRyCy8AAn9BuH8gAUEISQ0AGkFyIAAoAAQiAEF3Sw0AGkG4fyAAQQhqIgAgACABSxsLCwkAIAAgATsAAAsDAAELigYBBX8gACAAKAIAIgVBfnE2AgBBACAAIAVBAXZqQYQgKAIAIgQgAEYbIQECQAJAIAAoAgQiAkUNACACKAIAIgNBAXENACACQQhqIgUgA0EBdkF4aiIDQQggA0EISxtnQR9zQQJ0QYAfaiIDKAIARgRAIAMgAigCDDYCAAsgAigCCCIDBEAgAyACKAIMNgIECyACKAIMIgMEQCADIAIoAgg2AgALIAIgAigCACAAKAIAQX5xajYCAEGEICEAAkACQCABRQ0AIAEgAjYCBCABKAIAIgNBAXENASADQQF2QXhqIgNBCCADQQhLG2dBH3NBAnRBgB9qIgMoAgAgAUEIakYEQCADIAEoAgw2AgALIAEoAggiAwRAIAMgASgCDDYCBAsgASgCDCIDBEAgAyABKAIINgIAQYQgKAIAIQQLIAIgAigCACABKAIAQX5xajYCACABIARGDQAgASABKAIAQQF2akEEaiEACyAAIAI2AgALIAIoAgBBAXZBeGoiAEEIIABBCEsbZ0Efc0ECdEGAH2oiASgCACEAIAEgBTYCACACIAA2AgwgAkEANgIIIABFDQEgACAFNgIADwsCQCABRQ0AIAEoAgAiAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAigCACABQQhqRgRAIAIgASgCDDYCAAsgASgCCCICBEAgAiABKAIMNgIECyABKAIMIgIEQCACIAEoAgg2AgBBhCAoAgAhBAsgACAAKAIAIAEoAgBBfnFqIgI2AgACQCABIARHBEAgASABKAIAQQF2aiAANgIEIAAoAgAhAgwBC0GEICAANgIACyACQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgIoAgAhASACIABBCGoiAjYCACAAIAE2AgwgAEEANgIIIAFFDQEgASACNgIADwsgBUEBdkF4aiIBQQggAUEISxtnQR9zQQJ0QYAfaiICKAIAIQEgAiAAQQhqIgI2AgAgACABNgIMIABBADYCCCABRQ0AIAEgAjYCAAsLDgAgAARAIABBeGoQJQsLgAIBA38CQCAAQQ9qQXhxQYQgKAIAKAIAQQF2ayICEB1Bf0YNAAJAQYQgKAIAIgAoAgAiAUEBcQ0AIAFBAXZBeGoiAUEIIAFBCEsbZ0Efc0ECdEGAH2oiASgCACAAQQhqRgRAIAEgACgCDDYCAAsgACgCCCIBBEAgASAAKAIMNgIECyAAKAIMIgFFDQAgASAAKAIINgIAC0EBIQEgACAAKAIAIAJBAXRqIgI2AgAgAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAygCACECIAMgAEEIaiIDNgIAIAAgAjYCDCAAQQA2AgggAkUNACACIAM2AgALIAELtwIBA38CQAJAIABBASAAGyICEDgiAA0AAkACQEGEICgCACIARQ0AIAAoAgAiA0EBcQ0AIAAgA0EBcjYCACADQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgAgAEEIakYEQCABIAAoAgw2AgALIAAoAggiAQRAIAEgACgCDDYCBAsgACgCDCIBBEAgASAAKAIINgIACyACECchAkEAIQFBhCAoAgAhACACDQEgACAAKAIAQX5xNgIAQQAPCyACQQ9qQXhxIgMQHSICQX9GDQIgAkEHakF4cSIAIAJHBEAgACACaxAdQX9GDQMLAkBBhCAoAgAiAUUEQEGAICAANgIADAELIAAgATYCBAtBhCAgADYCACAAIANBAXRBAXI2AgAMAQsgAEUNAQsgAEEIaiEBCyABC7kDAQJ/IAAgA2ohBQJAIANBB0wEQANAIAAgBU8NAiAAIAItAAA6AAAgAEEBaiEAIAJBAWohAgwAAAsACyAEQQFGBEACQCAAIAJrIgZBB00EQCAAIAItAAA6AAAgACACLQABOgABIAAgAi0AAjoAAiAAIAItAAM6AAMgAEEEaiACIAZBAnQiBkHAHmooAgBqIgIQFyACIAZB4B5qKAIAayECDAELIAAgAhAMCyACQQhqIQIgAEEIaiEACwJAAkACQAJAIAUgAU0EQCAAIANqIQEgBEEBRyAAIAJrQQ9Kcg0BA0AgACACEAwgAkEIaiECIABBCGoiACABSQ0ACwwFCyAAIAFLBEAgACEBDAQLIARBAUcgACACa0EPSnINASAAIQMgAiEEA0AgAyAEEAwgBEEIaiEEIANBCGoiAyABSQ0ACwwCCwNAIAAgAhAHIAJBEGohAiAAQRBqIgAgAUkNAAsMAwsgACEDIAIhBANAIAMgBBAHIARBEGohBCADQRBqIgMgAUkNAAsLIAIgASAAa2ohAgsDQCABIAVPDQEgASACLQAAOgAAIAFBAWohASACQQFqIQIMAAALAAsLQQECfyAAIAAoArjgASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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";
|
|
24
|
+
function T(A) {
|
|
25
|
+
const I = A & 32768 ? -1 : 1, g = A >>> 10 & 31, B = A & 1023;
|
|
26
|
+
return g === 0 ? I * 2 ** -14 * (B / 1024) : g === 31 ? B === 0 ? I * (1 / 0) : Number.NaN : I * 2 ** (g - 15) * (1 + B / 1024);
|
|
27
|
+
}
|
|
28
|
+
const oA = new Float32Array(1);
|
|
29
|
+
new Uint32Array(oA.buffer);
|
|
30
|
+
function z(A) {
|
|
31
|
+
return [0, 3, 8, 15][A] ?? 0;
|
|
32
|
+
}
|
|
33
|
+
function $(A, I, g, B) {
|
|
34
|
+
const C = z(g);
|
|
35
|
+
let Q = 0;
|
|
36
|
+
for (const i of A) Q = Math.max(Q, Math.abs(i));
|
|
37
|
+
const E = {
|
|
38
|
+
min: [-Q, -Q, -Q],
|
|
39
|
+
max: [Q, Q, Q]
|
|
40
|
+
}, o = new Uint32Array(I * C), t = Q || 1;
|
|
41
|
+
for (let i = 0; i < o.length; i++) {
|
|
42
|
+
const e = i * 3, a = (c, G) => Math.min(G, Math.max(0, Math.round((c / t + 1) * 0.5 * G))), n = a(A[e], 2047), s = a(A[e + 1], 1023), D = a(A[e + 2], 2047);
|
|
43
|
+
o[i] = (n | s << 11 | D << 21) >>> 0;
|
|
44
|
+
}
|
|
45
|
+
return { bands: g, packed: o, range: E };
|
|
46
|
+
}
|
|
47
|
+
const iA = 0.28209479177387814;
|
|
48
|
+
function V(A, I, g, B, C, Q, E, o, t) {
|
|
49
|
+
const i = Math.hypot(Q, E, o, t) || 1, e = Q / i, a = E / i, n = o / i, s = t / i, D = (1 - 2 * (n * n + s * s)) * g, c = 2 * (a * n - e * s) * B, G = 2 * (a * s + e * n) * C, w = 2 * (a * n + e * s) * g, r = (1 - 2 * (a * a + s * s)) * B, h = 2 * (n * s - e * a) * C, F = 2 * (a * s - e * n) * g, L = 2 * (n * s + e * a) * B, S = (1 - 2 * (a * a + n * n)) * C;
|
|
50
|
+
A[I * 6 + 0] = D * D + c * c + G * G, A[I * 6 + 1] = D * w + c * r + G * h, A[I * 6 + 2] = D * F + c * L + G * S, A[I * 6 + 3] = w * w + r * r + h * h, A[I * 6 + 4] = w * F + r * L + h * S, A[I * 6 + 5] = F * F + L * L + S * S;
|
|
51
|
+
}
|
|
52
|
+
const _ = 1347635022, l = 16, m = 32, tA = 0.15, eA = Math.SQRT1_2, AA = 1 << 24, sA = l + 92 * AA, aA = 3;
|
|
53
|
+
async function nA(A) {
|
|
54
|
+
const I = new Uint8Array(A), g = I[0] === 31 && I[1] === 139 ? DA(await hA(I)) : await rA(I);
|
|
55
|
+
return cA(g);
|
|
56
|
+
}
|
|
57
|
+
async function rA(A) {
|
|
58
|
+
if (A.byteLength < m) throw new Error("Truncated SPZ v4 header.");
|
|
59
|
+
const I = new DataView(A.buffer, A.byteOffset, A.byteLength);
|
|
60
|
+
if (I.getUint32(0, !0) !== _) throw new Error("Not an SPZ file.");
|
|
61
|
+
const g = I.getUint32(4, !0);
|
|
62
|
+
if (g !== 4) throw new Error(\`Unsupported SPZ version \${g}.\`);
|
|
63
|
+
const B = I.getUint32(8, !0), C = I.getUint8(12), Q = I.getUint8(13), E = I.getUint8(14), o = I.getUint8(15), t = I.getUint32(16, !0);
|
|
64
|
+
IA(B, C, Q), (E & 2) !== 0 && gA(I, m, t);
|
|
65
|
+
const i = B * 4, e = [B * 9, B, B * 3, B * 3, i];
|
|
66
|
+
if (C > 0 && e.push(B * P(C) * 3), o !== e.length)
|
|
67
|
+
throw new Error(\`Invalid SPZ stream count \${o}; expected \${e.length}.\`);
|
|
68
|
+
const a = t + o * 16;
|
|
69
|
+
if (t < m || a > A.byteLength)
|
|
70
|
+
throw new Error("Invalid SPZ table of contents.");
|
|
71
|
+
const n = new EA();
|
|
72
|
+
await n.init();
|
|
73
|
+
const s = [];
|
|
74
|
+
let D = a;
|
|
75
|
+
for (let c = 0; c < o; c++) {
|
|
76
|
+
const G = t + c * 16, w = W(I, G), r = W(I, G + 8);
|
|
77
|
+
if (r !== e[c])
|
|
78
|
+
throw new Error(
|
|
79
|
+
\`Invalid SPZ stream \${c} size \${r}; expected \${e[c]}.\`
|
|
80
|
+
);
|
|
81
|
+
if (D + w > A.byteLength)
|
|
82
|
+
throw new Error(\`Truncated SPZ stream \${c}.\`);
|
|
83
|
+
const h = A.subarray(D, D + w), F = n.decode(h, r);
|
|
84
|
+
if (F.byteLength !== r)
|
|
85
|
+
throw new Error(\`SPZ stream \${c} decompressed to an unexpected size.\`);
|
|
86
|
+
s.push(F), D += w;
|
|
87
|
+
}
|
|
88
|
+
if (D !== A.byteLength) throw new Error("Unexpected trailing SPZ data.");
|
|
89
|
+
return {
|
|
90
|
+
version: g,
|
|
91
|
+
count: B,
|
|
92
|
+
shDegree: C,
|
|
93
|
+
fractionalBits: Q,
|
|
94
|
+
positions: s[0],
|
|
95
|
+
alphas: s[1],
|
|
96
|
+
colors: s[2],
|
|
97
|
+
scales: s[3],
|
|
98
|
+
rotations: s[4],
|
|
99
|
+
sh: C > 0 ? s[5] : null
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function DA(A) {
|
|
103
|
+
if (A.byteLength < l) throw new Error("Truncated SPZ header.");
|
|
104
|
+
const I = new DataView(A.buffer, A.byteOffset, A.byteLength);
|
|
105
|
+
if (I.getUint32(0, !0) !== _) throw new Error("Not an SPZ file.");
|
|
106
|
+
const g = I.getUint32(4, !0);
|
|
107
|
+
if (g < 1 || g > 3) throw new Error(\`Unsupported SPZ version \${g}.\`);
|
|
108
|
+
const B = I.getUint32(8, !0), C = I.getUint8(12), Q = I.getUint8(13), E = I.getUint8(14);
|
|
109
|
+
IA(B, C, Q);
|
|
110
|
+
const o = B * 3 * (g === 1 ? 2 : 3), t = B * (g >= 3 ? 4 : 3), i = B * P(C) * 3, e = l + o + B + B * 3 + B * 3 + t + i;
|
|
111
|
+
if (A.byteLength < e || (E & 2) === 0 && A.byteLength !== e)
|
|
112
|
+
throw new Error(\`Invalid SPZ payload size \${A.byteLength}; expected \${e}.\`);
|
|
113
|
+
(E & 2) !== 0 && gA(I, e, A.byteLength);
|
|
114
|
+
let a = l;
|
|
115
|
+
const n = (s) => {
|
|
116
|
+
const D = A.subarray(a, a + s);
|
|
117
|
+
return a += s, D;
|
|
118
|
+
};
|
|
119
|
+
return {
|
|
120
|
+
version: g,
|
|
121
|
+
count: B,
|
|
122
|
+
shDegree: C,
|
|
123
|
+
fractionalBits: Q,
|
|
124
|
+
positions: n(o),
|
|
125
|
+
alphas: n(B),
|
|
126
|
+
colors: n(B * 3),
|
|
127
|
+
scales: n(B * 3),
|
|
128
|
+
rotations: n(t),
|
|
129
|
+
sh: C > 0 ? n(i) : null
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
function cA(A) {
|
|
133
|
+
const I = new Float32Array(A.count * 3), g = new Uint8Array(A.count * 4), B = new Float32Array(A.count * 6), C = new DataView(
|
|
134
|
+
A.positions.buffer,
|
|
135
|
+
A.positions.byteOffset,
|
|
136
|
+
A.positions.byteLength
|
|
137
|
+
), Q = A.version >= 3 ? 4 : 3;
|
|
138
|
+
for (let o = 0; o < A.count; o++) {
|
|
139
|
+
for (let i = 0; i < 3; i++)
|
|
140
|
+
I[o * 3 + i] = A.version === 1 ? T(C.getUint16((o * 3 + i) * 2, !0)) : GA(A.positions, (o * 3 + i) * 3) / 2 ** A.fractionalBits;
|
|
141
|
+
for (let i = 0; i < 3; i++) {
|
|
142
|
+
const a = (A.colors[o * 3 + i] / 255 - 0.5) / tA * iA + 0.5;
|
|
143
|
+
g[o * 4 + i] = yA(Math.round(a * 255));
|
|
144
|
+
}
|
|
145
|
+
g[o * 4 + 3] = A.alphas[o];
|
|
146
|
+
const t = A.version >= 3 ? SA(A.rotations, o * Q) : FA(A.rotations, o * Q);
|
|
147
|
+
V(
|
|
148
|
+
B,
|
|
149
|
+
o,
|
|
150
|
+
Math.exp(A.scales[o * 3 + 0] / 16 - 10),
|
|
151
|
+
Math.exp(A.scales[o * 3 + 1] / 16 - 10),
|
|
152
|
+
Math.exp(A.scales[o * 3 + 2] / 16 - 10),
|
|
153
|
+
t[3],
|
|
154
|
+
t[0],
|
|
155
|
+
t[1],
|
|
156
|
+
t[2]
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
const E = wA(A);
|
|
160
|
+
return {
|
|
161
|
+
count: A.count,
|
|
162
|
+
positions: I,
|
|
163
|
+
colors: g,
|
|
164
|
+
covariances: B,
|
|
165
|
+
...E ? { shPacked: E } : {}
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function wA(A) {
|
|
169
|
+
if (!A.sh || A.shDegree === 0) return;
|
|
170
|
+
const I = Math.min(A.shDegree, aA), B = z(I) * 3, C = new Float32Array(A.count * B);
|
|
171
|
+
for (let Q = 0; Q < A.count; Q++) {
|
|
172
|
+
const E = Q * P(A.shDegree) * 3, o = Q * B;
|
|
173
|
+
for (let t = 0; t < B; t++) {
|
|
174
|
+
const i = A.sh[E + t];
|
|
175
|
+
C[o + t] = (i - 128) / 128;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return $(C, A.count, I);
|
|
179
|
+
}
|
|
180
|
+
async function hA(A) {
|
|
181
|
+
if (typeof DecompressionStream > "u")
|
|
182
|
+
throw new Error(
|
|
183
|
+
"This runtime does not provide gzip decompression required for legacy SPZ files."
|
|
184
|
+
);
|
|
185
|
+
const I = new Uint8Array(A.byteLength);
|
|
186
|
+
I.set(A);
|
|
187
|
+
const B = new Blob([I.buffer]).stream().pipeThrough(new DecompressionStream("gzip")).getReader(), C = [];
|
|
188
|
+
let Q = 0;
|
|
189
|
+
for (; ; ) {
|
|
190
|
+
const { done: t, value: i } = await B.read();
|
|
191
|
+
if (t) break;
|
|
192
|
+
if (Q += i.byteLength, Q > sA)
|
|
193
|
+
throw await B.cancel().catch(() => {
|
|
194
|
+
}), new Error("SPZ gzip payload expands past the supported maximum size.");
|
|
195
|
+
C.push(i);
|
|
196
|
+
}
|
|
197
|
+
const E = new Uint8Array(Q);
|
|
198
|
+
let o = 0;
|
|
199
|
+
for (const t of C)
|
|
200
|
+
E.set(t, o), o += t.byteLength;
|
|
201
|
+
return E;
|
|
202
|
+
}
|
|
203
|
+
function IA(A, I, g) {
|
|
204
|
+
if (A === 0 || A > AA) throw new Error(\`Invalid SPZ point count \${A}.\`);
|
|
205
|
+
if (I < 0 || I > 4) throw new Error(\`Unsupported SPZ SH degree \${I}.\`);
|
|
206
|
+
if (g > 24) throw new Error(\`Invalid SPZ fractional bit count \${g}.\`);
|
|
207
|
+
}
|
|
208
|
+
function P(A) {
|
|
209
|
+
return A === 0 ? 0 : A === 1 ? 3 : A === 2 ? 8 : A === 3 ? 15 : 24;
|
|
210
|
+
}
|
|
211
|
+
function W(A, I) {
|
|
212
|
+
const g = A.getBigUint64(I, !0);
|
|
213
|
+
if (g > BigInt(Number.MAX_SAFE_INTEGER))
|
|
214
|
+
throw new Error("SPZ stream size exceeds JavaScript limits.");
|
|
215
|
+
return Number(g);
|
|
216
|
+
}
|
|
217
|
+
function gA(A, I, g) {
|
|
218
|
+
if (I > g || g > A.byteLength) throw new Error("Invalid SPZ extension block.");
|
|
219
|
+
let B = I;
|
|
220
|
+
for (; B < g; ) {
|
|
221
|
+
if (B + 8 > g) throw new Error("Truncated SPZ extension header.");
|
|
222
|
+
const C = A.getUint32(B, !0), Q = A.getUint32(B + 4, !0);
|
|
223
|
+
if (B += 8, B + Q > g) throw new Error("Truncated SPZ extension payload.");
|
|
224
|
+
if (C === 2914910211) {
|
|
225
|
+
if (Q !== 4) throw new Error("Invalid SPZ coordinate-system extension.");
|
|
226
|
+
const E = A.getUint32(B, !0);
|
|
227
|
+
if (E !== 4)
|
|
228
|
+
throw new Error(
|
|
229
|
+
\`SPZ coordinate system \${E} is not supported; expected RUB (4).\`
|
|
230
|
+
);
|
|
231
|
+
}
|
|
232
|
+
B += Q;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
function GA(A, I) {
|
|
236
|
+
const g = A[I] | A[I + 1] << 8 | A[I + 2] << 16;
|
|
237
|
+
return g & 8388608 ? g | 4278190080 : g;
|
|
238
|
+
}
|
|
239
|
+
function FA(A, I) {
|
|
240
|
+
const g = A[I] / 127.5 - 1, B = A[I + 1] / 127.5 - 1, C = A[I + 2] / 127.5 - 1;
|
|
241
|
+
return [g, B, C, Math.sqrt(Math.max(0, 1 - g * g - B * B - C * C))];
|
|
242
|
+
}
|
|
243
|
+
function SA(A, I) {
|
|
244
|
+
let g = (A[I] | A[I + 1] << 8 | A[I + 2] << 16 | A[I + 3] << 24) >>> 0;
|
|
245
|
+
const B = g >>> 30, C = [0, 0, 0, 0];
|
|
246
|
+
let Q = 0;
|
|
247
|
+
for (let E = 3; E >= 0; E--) {
|
|
248
|
+
if (E === B) continue;
|
|
249
|
+
const o = g & 511, i = (g >>> 9 & 1 ? -1 : 1) * eA * (o / 511);
|
|
250
|
+
C[E] = i, Q += i * i, g >>>= 10;
|
|
251
|
+
}
|
|
252
|
+
return C[B] = Math.sqrt(Math.max(0, 1 - Q)), [
|
|
253
|
+
C[0],
|
|
254
|
+
C[1],
|
|
255
|
+
C[2],
|
|
256
|
+
C[3]
|
|
257
|
+
];
|
|
258
|
+
}
|
|
259
|
+
function yA(A) {
|
|
260
|
+
return Math.max(0, Math.min(255, A));
|
|
261
|
+
}
|
|
262
|
+
const u = 32, Z = 1 << 24;
|
|
263
|
+
function LA(A) {
|
|
264
|
+
if (A.byteLength % u !== 0)
|
|
265
|
+
throw new Error(
|
|
266
|
+
\`Invalid SPLAT file size: \${A.byteLength} bytes is not divisible by \${u}.\`
|
|
267
|
+
);
|
|
268
|
+
const I = A.byteLength / u;
|
|
269
|
+
if (I > Z)
|
|
270
|
+
throw new Error(
|
|
271
|
+
\`SPLAT file declares \${I} splats, above the supported maximum of \${Z}.\`
|
|
272
|
+
);
|
|
273
|
+
const g = new DataView(A);
|
|
274
|
+
if (I > 0 && (!Number.isFinite(g.getFloat32(0, !0)) || !Number.isFinite(g.getFloat32(4, !0)) || !Number.isFinite(g.getFloat32(8, !0))))
|
|
275
|
+
throw new Error("Not a SPLAT file: the first record has a non-finite position.");
|
|
276
|
+
const B = new Uint8Array(A), C = new Float32Array(I * 3), Q = new Uint8Array(I * 4), E = new Float32Array(I * 6);
|
|
277
|
+
for (let o = 0; o < I; o++) {
|
|
278
|
+
const t = o * u, i = o * 3, e = o * 4;
|
|
279
|
+
C[i + 0] = g.getFloat32(t + 0, !0), C[i + 1] = g.getFloat32(t + 4, !0), C[i + 2] = g.getFloat32(t + 8, !0), Q[e + 0] = B[t + 24], Q[e + 1] = B[t + 25], Q[e + 2] = B[t + 26], Q[e + 3] = B[t + 27], V(
|
|
280
|
+
E,
|
|
281
|
+
o,
|
|
282
|
+
g.getFloat32(t + 12, !0),
|
|
283
|
+
g.getFloat32(t + 16, !0),
|
|
284
|
+
g.getFloat32(t + 20, !0),
|
|
285
|
+
Y(B[t + 28]),
|
|
286
|
+
Y(B[t + 29]),
|
|
287
|
+
Y(B[t + 30]),
|
|
288
|
+
Y(B[t + 31])
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
return { count: I, positions: C, colors: Q, covariances: E };
|
|
292
|
+
}
|
|
293
|
+
function Y(A) {
|
|
294
|
+
return (A - 128) / 128;
|
|
295
|
+
}
|
|
296
|
+
const H = 4096, b = 1024, RA = 12, v = 1.5;
|
|
297
|
+
function UA(A) {
|
|
298
|
+
const I = new DataView(A), g = fA(I), B = kA(I, g), C = B.reduce((s, D) => s + D.count, 0);
|
|
299
|
+
if (C !== g.splatCount)
|
|
300
|
+
throw new Error(
|
|
301
|
+
\`Invalid KSPLAT counts: header declares \${g.splatCount}, sections contain \${C}.\`
|
|
302
|
+
);
|
|
303
|
+
const Q = new Float32Array(g.splatCount * 3), E = new Uint8Array(g.splatCount * 4), o = new Float32Array(g.splatCount * 6), t = B.reduce((s, D) => Math.max(s, D.shDegree), 0), i = O(t), e = i > 0 ? new Float32Array(g.splatCount * i) : null;
|
|
304
|
+
let a = 0;
|
|
305
|
+
for (const s of B) {
|
|
306
|
+
const D = JA(I, s), c = O(s.shDegree), G = g.compressionLevel === 0 ? 44 : 24;
|
|
307
|
+
for (let w = 0; w < s.count; w++, a++) {
|
|
308
|
+
const r = s.dataBase + w * s.bytesPerSplat, h = a * 3, F = a * 4, L = g.compressionLevel === 0 ? 12 : 6, S = g.compressionLevel === 0 ? 24 : 12, d = g.compressionLevel === 0 ? 40 : 20;
|
|
309
|
+
if (g.compressionLevel === 0)
|
|
310
|
+
Q[h + 0] = I.getFloat32(r + 0, !0), Q[h + 1] = I.getFloat32(r + 4, !0), Q[h + 2] = I.getFloat32(r + 8, !0);
|
|
311
|
+
else {
|
|
312
|
+
const f = qA(w, s, D), R = s.bucketsBase + f * s.bucketStorageBytes, k = s.bucketBlockSize * 0.5 / s.compressionRange;
|
|
313
|
+
Q[h + 0] = (I.getUint16(r + 0, !0) - s.compressionRange) * k + I.getFloat32(R + 0, !0), Q[h + 1] = (I.getUint16(r + 2, !0) - s.compressionRange) * k + I.getFloat32(R + 4, !0), Q[h + 2] = (I.getUint16(r + 4, !0) - s.compressionRange) * k + I.getFloat32(R + 8, !0);
|
|
314
|
+
}
|
|
315
|
+
E[F + 0] = I.getUint8(r + d + 0), E[F + 1] = I.getUint8(r + d + 1), E[F + 2] = I.getUint8(r + d + 2), E[F + 3] = I.getUint8(r + d + 3);
|
|
316
|
+
const U = (f) => g.compressionLevel === 0 ? I.getFloat32(r + f, !0) : T(I.getUint16(r + f, !0)), N = g.compressionLevel === 0 ? 4 : 2;
|
|
317
|
+
if (V(
|
|
318
|
+
o,
|
|
319
|
+
a,
|
|
320
|
+
U(L + 0 * N),
|
|
321
|
+
U(L + 1 * N),
|
|
322
|
+
U(L + 2 * N),
|
|
323
|
+
U(S + 0 * N),
|
|
324
|
+
U(S + 1 * N),
|
|
325
|
+
U(S + 2 * N),
|
|
326
|
+
U(S + 3 * N)
|
|
327
|
+
), e && c > 0) {
|
|
328
|
+
const f = a * i;
|
|
329
|
+
for (let R = 0; R < c; R++) {
|
|
330
|
+
const k = G + R * BA(g.compressionLevel);
|
|
331
|
+
e[f + R] = NA(
|
|
332
|
+
I,
|
|
333
|
+
r + k,
|
|
334
|
+
g.compressionLevel,
|
|
335
|
+
g.shCoeffMin,
|
|
336
|
+
g.shCoeffMax
|
|
337
|
+
);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
const n = e && t > 0 ? $(e, g.splatCount, t) : void 0;
|
|
343
|
+
return {
|
|
344
|
+
count: g.splatCount,
|
|
345
|
+
positions: Q,
|
|
346
|
+
colors: E,
|
|
347
|
+
covariances: o,
|
|
348
|
+
...n ? { shPacked: n } : {}
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function BA(A) {
|
|
352
|
+
return A === 0 ? 4 : A === 1 ? 2 : 1;
|
|
353
|
+
}
|
|
354
|
+
function NA(A, I, g, B, C) {
|
|
355
|
+
return g === 0 ? A.getFloat32(I, !0) : g === 1 ? T(A.getUint16(I, !0)) : A.getUint8(I) / 255 * (C - B) + B;
|
|
356
|
+
}
|
|
357
|
+
function O(A) {
|
|
358
|
+
if (A === 0) return 0;
|
|
359
|
+
if (A === 1) return 9;
|
|
360
|
+
if (A === 2) return 24;
|
|
361
|
+
throw new Error(\`Unsupported KSPLAT SH degree \${A}.\`);
|
|
362
|
+
}
|
|
363
|
+
function fA(A) {
|
|
364
|
+
if (A.byteLength < H) throw new Error("Truncated KSPLAT header.");
|
|
365
|
+
const I = A.getUint8(0), g = A.getUint8(1), B = A.getUint32(4, !0), C = A.getUint32(8, !0), Q = A.getUint32(12, !0), E = A.getUint32(16, !0), o = A.getUint16(20, !0), t = A.getFloat32(36, !0) || -v, i = A.getFloat32(40, !0) || v;
|
|
366
|
+
if (I !== 0 || g < 1)
|
|
367
|
+
throw new Error(
|
|
368
|
+
\`Unsupported KSPLAT version \${I}.\${g}; expected 0.1 or newer.\`
|
|
369
|
+
);
|
|
370
|
+
if (o < 0 || o > 2)
|
|
371
|
+
throw new Error(\`Unsupported KSPLAT compression level \${o}.\`);
|
|
372
|
+
if (!Number.isSafeInteger(B) || C > B || C === 0)
|
|
373
|
+
throw new Error(\`Invalid KSPLAT section count \${C}/\${B}.\`);
|
|
374
|
+
if (E > Q)
|
|
375
|
+
throw new Error(\`Invalid KSPLAT splat count \${E}/\${Q}.\`);
|
|
376
|
+
const e = H + B * b;
|
|
377
|
+
if (!Number.isSafeInteger(e) || e > A.byteLength)
|
|
378
|
+
throw new Error("Truncated KSPLAT section headers.");
|
|
379
|
+
return {
|
|
380
|
+
versionMajor: I,
|
|
381
|
+
versionMinor: g,
|
|
382
|
+
sectionCount: C,
|
|
383
|
+
splatCount: E,
|
|
384
|
+
compressionLevel: o,
|
|
385
|
+
shCoeffMin: t,
|
|
386
|
+
shCoeffMax: i
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
function kA(A, I) {
|
|
390
|
+
const g = A.getUint32(4, !0);
|
|
391
|
+
let B = H + g * b;
|
|
392
|
+
const C = [];
|
|
393
|
+
for (let Q = 0; Q < g; Q++) {
|
|
394
|
+
const E = H + Q * b, o = A.getUint32(E + 0, !0), t = A.getUint32(E + 4, !0), i = A.getUint32(E + 8, !0), e = A.getUint32(E + 12, !0), a = A.getFloat32(E + 16, !0), n = A.getUint16(E + 20, !0), s = A.getUint32(E + 24, !0) || 32767, D = A.getUint32(E + 32, !0), c = A.getUint32(E + 36, !0), G = A.getUint16(E + 40, !0), w = MA(I.compressionLevel, G), r = c * 4, h = e * n, F = r + h + t * w;
|
|
395
|
+
if (Q < I.sectionCount) {
|
|
396
|
+
if (o > t)
|
|
397
|
+
throw new Error(\`Invalid KSPLAT section \${Q} count \${o}/\${t}.\`);
|
|
398
|
+
if (I.compressionLevel > 0) {
|
|
399
|
+
if (i === 0 || e === 0 || n < RA)
|
|
400
|
+
throw new Error(\`Invalid KSPLAT bucket layout in section \${Q}.\`);
|
|
401
|
+
if (!Number.isFinite(a) || a <= 0 || s === 0)
|
|
402
|
+
throw new Error(\`Invalid KSPLAT compression parameters in section \${Q}.\`);
|
|
403
|
+
if (D + c > e)
|
|
404
|
+
throw new Error(
|
|
405
|
+
\`Invalid KSPLAT section \${Q}: \${D} full + \${c} partial buckets exceed the \${e} declared.\`
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
if (B + F > A.byteLength)
|
|
409
|
+
throw new Error(\`Truncated KSPLAT data in section \${Q}.\`);
|
|
410
|
+
C.push({
|
|
411
|
+
count: o,
|
|
412
|
+
maxCount: t,
|
|
413
|
+
bucketSize: i,
|
|
414
|
+
bucketCount: e,
|
|
415
|
+
bucketBlockSize: a,
|
|
416
|
+
bucketStorageBytes: n,
|
|
417
|
+
compressionRange: s,
|
|
418
|
+
fullBucketCount: D,
|
|
419
|
+
partialBucketCount: c,
|
|
420
|
+
shDegree: G,
|
|
421
|
+
bytesPerSplat: w,
|
|
422
|
+
base: B,
|
|
423
|
+
bucketsBase: B + r,
|
|
424
|
+
dataBase: B + r + h
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
B += F;
|
|
428
|
+
}
|
|
429
|
+
return C;
|
|
430
|
+
}
|
|
431
|
+
function MA(A, I) {
|
|
432
|
+
if (I < 0 || I > 2) throw new Error(\`Unsupported KSPLAT SH degree \${I}.\`);
|
|
433
|
+
const g = O(I);
|
|
434
|
+
return A === 0 ? 44 + g * 4 : 24 + g * BA(A);
|
|
435
|
+
}
|
|
436
|
+
function JA(A, I) {
|
|
437
|
+
const g = new Uint32Array(I.partialBucketCount);
|
|
438
|
+
for (let B = 0; B < g.length; B++) g[B] = A.getUint32(I.base + B * 4, !0);
|
|
439
|
+
return g;
|
|
440
|
+
}
|
|
441
|
+
function qA(A, I, g) {
|
|
442
|
+
const B = I.fullBucketCount * I.bucketSize, C = (E) => {
|
|
443
|
+
if (E >= I.bucketCount)
|
|
444
|
+
throw new Error(\`KSPLAT splat \${A} maps to out-of-range bucket \${E}.\`);
|
|
445
|
+
return E;
|
|
446
|
+
};
|
|
447
|
+
if (A < B) return C(Math.floor(A / I.bucketSize));
|
|
448
|
+
let Q = B;
|
|
449
|
+
for (let E = 0; E < g.length; E++) {
|
|
450
|
+
const o = g[E];
|
|
451
|
+
if (A < Q + o) return C(I.fullBucketCount + E);
|
|
452
|
+
Q += o;
|
|
453
|
+
}
|
|
454
|
+
throw new Error(\`KSPLAT splat \${A} does not belong to a bucket.\`);
|
|
455
|
+
}
|
|
456
|
+
const dA = 100;
|
|
457
|
+
function uA(A, I = dA) {
|
|
458
|
+
let g = -1 / 0;
|
|
459
|
+
return (B, C) => {
|
|
460
|
+
const Q = C > 0 && B >= C, E = mA();
|
|
461
|
+
!Q && E - g < I || (g = E, A(B, C));
|
|
462
|
+
};
|
|
463
|
+
}
|
|
464
|
+
class j extends Error {
|
|
465
|
+
constructor(g, B) {
|
|
466
|
+
super(g, { cause: B.cause });
|
|
467
|
+
M(this, "phase");
|
|
468
|
+
M(this, "url");
|
|
469
|
+
M(this, "status");
|
|
470
|
+
M(this, "retryable");
|
|
471
|
+
this.name = "SplatLoadError", this.phase = B.phase, this.url = B.url, this.status = B.status, this.retryable = B.retryable;
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
function YA(A, I) {
|
|
475
|
+
return {
|
|
476
|
+
...A != null && A.headers ? { headers: { ...A.headers } } : {},
|
|
477
|
+
...A != null && A.credentials ? { credentials: A.credentials } : {},
|
|
478
|
+
...A != null && A.mode ? { mode: A.mode } : {},
|
|
479
|
+
...A != null && A.cache ? { cache: A.cache } : {},
|
|
480
|
+
...I ? { signal: I } : {}
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
const lA = 2 ** 31;
|
|
484
|
+
function HA(A) {
|
|
485
|
+
return \`\${(A / 1e9).toFixed(1)} GB\`;
|
|
486
|
+
}
|
|
487
|
+
async function KA(A) {
|
|
488
|
+
if (A.size > lA)
|
|
489
|
+
throw new Error(
|
|
490
|
+
\`\${A.name} is \${HA(A.size)}. A browser cannot read more than 2 GB of a file at once, and this format has to be decoded in one piece. Convert it to SOG (npx @playcanvas/splat-transform in.ply out.sog) or a compressed .ply.\`
|
|
491
|
+
);
|
|
492
|
+
try {
|
|
493
|
+
return await A.arrayBuffer();
|
|
494
|
+
} catch (I) {
|
|
495
|
+
throw q(I) ? I : I instanceof Error && I.name === "NotReadableError" ? new Error(
|
|
496
|
+
\`\${A.name} could not be read. It may have been moved, renamed or changed since it was dropped, or it may be on a drive the browser cannot reach.\`,
|
|
497
|
+
{ cause: I }
|
|
498
|
+
) : I;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
function q(A) {
|
|
502
|
+
return A instanceof Error && A.name === "AbortError";
|
|
503
|
+
}
|
|
504
|
+
function J(A, I) {
|
|
505
|
+
if (A instanceof j) return A;
|
|
506
|
+
const g = A instanceof Error ? A.message : String(A);
|
|
507
|
+
return new j(g, {
|
|
508
|
+
...I,
|
|
509
|
+
retryable: xA(I.status, I.phase),
|
|
510
|
+
cause: A
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
function pA(A) {
|
|
514
|
+
return {
|
|
515
|
+
name: A.name,
|
|
516
|
+
message: A.message,
|
|
517
|
+
phase: A.phase,
|
|
518
|
+
url: A.url,
|
|
519
|
+
...A.status === void 0 ? {} : { status: A.status },
|
|
520
|
+
retryable: A.retryable
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
function mA() {
|
|
524
|
+
var A;
|
|
525
|
+
return ((A = globalThis.performance) == null ? void 0 : A.now()) ?? Date.now();
|
|
526
|
+
}
|
|
527
|
+
function xA(A, I) {
|
|
528
|
+
return A !== void 0 ? A === 408 || A === 425 || A === 429 || A >= 500 : I === "fetch" || I === "manifest" || I === "worker";
|
|
529
|
+
}
|
|
530
|
+
async function bA(A, I, g, B) {
|
|
531
|
+
let C;
|
|
532
|
+
try {
|
|
533
|
+
C = await fetch(A, YA(I, g));
|
|
534
|
+
} catch (Q) {
|
|
535
|
+
throw q(Q) ? Q : J(Q, { phase: "fetch", url: A });
|
|
536
|
+
}
|
|
537
|
+
if (!C.ok)
|
|
538
|
+
throw J(new Error(\`Failed to load \${A}: HTTP \${C.status}\`), {
|
|
539
|
+
phase: "fetch",
|
|
540
|
+
url: A,
|
|
541
|
+
status: C.status
|
|
542
|
+
});
|
|
543
|
+
try {
|
|
544
|
+
return !B || !C.body ? await C.arrayBuffer() : await OA(C, B);
|
|
545
|
+
} catch (Q) {
|
|
546
|
+
throw q(Q) ? Q : J(Q, { phase: "fetch", url: A });
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
async function OA(A, I) {
|
|
550
|
+
const g = Number(A.headers.get("Content-Length")), B = Number.isSafeInteger(g) && g > 0 ? g : 0, C = A.body.getReader(), Q = [], E = B > 0 ? new Uint8Array(B) : null;
|
|
551
|
+
let o = 0;
|
|
552
|
+
for (I(0, B); ; ) {
|
|
553
|
+
const { done: e, value: a } = await C.read();
|
|
554
|
+
if (e) break;
|
|
555
|
+
if (E) {
|
|
556
|
+
if (o + a.byteLength > B)
|
|
557
|
+
throw new Error(\`Response body is longer than its Content-Length of \${B} bytes.\`);
|
|
558
|
+
E.set(a, o);
|
|
559
|
+
} else
|
|
560
|
+
Q.push(a);
|
|
561
|
+
o += a.byteLength, I(o, B);
|
|
562
|
+
}
|
|
563
|
+
if (E) {
|
|
564
|
+
if (o !== B)
|
|
565
|
+
throw new Error(\`Response body ended at \${o} bytes, short of its \${B}-byte length.\`);
|
|
566
|
+
return E.buffer;
|
|
567
|
+
}
|
|
568
|
+
const t = new Uint8Array(o);
|
|
569
|
+
let i = 0;
|
|
570
|
+
for (const e of Q)
|
|
571
|
+
t.set(e, i), i += e.byteLength;
|
|
572
|
+
return t.buffer;
|
|
573
|
+
}
|
|
574
|
+
function TA(A) {
|
|
575
|
+
const I = /* @__PURE__ */ new Map();
|
|
576
|
+
self.onmessage = async (g) => {
|
|
577
|
+
var t;
|
|
578
|
+
const B = self, C = g.data;
|
|
579
|
+
if (C.type === "cancel") {
|
|
580
|
+
(t = I.get(C.id)) == null || t.abort();
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
583
|
+
const Q = new AbortController();
|
|
584
|
+
I.set(C.id, Q);
|
|
585
|
+
const E = C.source.from === "url" ? C.source.url : C.source.file.name, o = C.progress ? uA((i, e) => {
|
|
586
|
+
const a = { type: "progress", id: C.id, loaded: i, total: e };
|
|
587
|
+
B.postMessage(a);
|
|
588
|
+
}) : void 0;
|
|
589
|
+
try {
|
|
590
|
+
const i = await A(C, Q.signal, o), e = [i.positions.buffer, i.colors.buffer, i.covariances.buffer];
|
|
591
|
+
i.sh && e.push(i.sh.labels.buffer, i.sh.palette.buffer), i.shPacked && e.push(i.shPacked.packed.buffer), i.radTree && e.push(
|
|
592
|
+
i.radTree.childCount.buffer,
|
|
593
|
+
i.radTree.childStart.buffer,
|
|
594
|
+
i.radTree.size.buffer
|
|
595
|
+
);
|
|
596
|
+
const a = { type: "result", id: C.id, ok: !0, data: i };
|
|
597
|
+
B.postMessage(a, e);
|
|
598
|
+
} catch (i) {
|
|
599
|
+
const e = {
|
|
600
|
+
type: "result",
|
|
601
|
+
id: C.id,
|
|
602
|
+
ok: !1,
|
|
603
|
+
error: pA(J(i, { phase: "worker", url: E })),
|
|
604
|
+
cancelled: Q.signal.aborted || q(i)
|
|
605
|
+
};
|
|
606
|
+
B.postMessage(e);
|
|
607
|
+
} finally {
|
|
608
|
+
I.delete(C.id);
|
|
609
|
+
}
|
|
610
|
+
};
|
|
611
|
+
}
|
|
612
|
+
TA(
|
|
613
|
+
(A, I, g) => VA(A.source, A.format, I, g)
|
|
614
|
+
);
|
|
615
|
+
async function VA(A, I, g, B) {
|
|
616
|
+
const C = A.from === "url" ? A.url : A.file.name, Q = A.from === "url" ? await bA(A.url, A.request, g, B) : await KA(A.file);
|
|
617
|
+
try {
|
|
618
|
+
switch (I) {
|
|
619
|
+
// Not awaited, matching the streaming worker's \`rad\` case: an async
|
|
620
|
+
// parser's rejection is wrapped by the message loop as \`phase: 'worker'\`
|
|
621
|
+
// rather than \`phase: 'decode'\`. Adding \`await\` here would quietly change
|
|
622
|
+
// the phase consumers already see for a malformed \`.spz\`.
|
|
623
|
+
case "spz":
|
|
624
|
+
return nA(Q);
|
|
625
|
+
case "splat":
|
|
626
|
+
return LA(Q);
|
|
627
|
+
case "ksplat":
|
|
628
|
+
return UA(Q);
|
|
629
|
+
// \`ChunkLoader\` routes only the three formats above here; anything else
|
|
630
|
+
// means the routing table and this switch disagree.
|
|
631
|
+
default:
|
|
632
|
+
throw new Error(\`The one-shot worker does not decode \${I}.\`);
|
|
633
|
+
}
|
|
634
|
+
} catch (E) {
|
|
635
|
+
throw q(E) ? E : J(E, { phase: "decode", url: C });
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
//# sourceMappingURL=one-shot-worker-CGm7qSbv.js.map
|
|
639
|
+
`, B = typeof self < "u" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", Q], { type: "text/javascript;charset=utf-8" });
|
|
640
|
+
function C(A) {
|
|
641
|
+
let I;
|
|
642
|
+
try {
|
|
643
|
+
if (I = B && (self.URL || self.webkitURL).createObjectURL(B), !I) throw "";
|
|
644
|
+
const g = new Worker(I, {
|
|
645
|
+
type: "module",
|
|
646
|
+
name: A == null ? void 0 : A.name
|
|
647
|
+
});
|
|
648
|
+
return g.addEventListener("error", () => {
|
|
649
|
+
(self.URL || self.webkitURL).revokeObjectURL(I);
|
|
650
|
+
}), g;
|
|
651
|
+
} catch {
|
|
652
|
+
return new Worker(
|
|
653
|
+
"data:text/javascript;charset=utf-8," + encodeURIComponent(Q),
|
|
654
|
+
{
|
|
655
|
+
type: "module",
|
|
656
|
+
name: A == null ? void 0 : A.name
|
|
657
|
+
}
|
|
658
|
+
);
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
export {
|
|
662
|
+
C as default
|
|
663
|
+
};
|
|
664
|
+
//# sourceMappingURL=one-shot-worker-G80btnth.js.map
|