@drawcall/lod 0.3.0 → 0.4.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 +5 -8
- package/dist/bake.d.ts +16 -2
- package/dist/bake.js +92 -4
- package/dist/bake.js.map +1 -1
- package/dist/baked/index.d.ts +2 -2
- package/dist/baked/index.js +2 -2
- package/dist/baked/interior/faces.js +4 -2
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.js +1 -1
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.d.ts +1 -1
- package/dist/baked/interior/rooms.js +1 -1
- package/dist/dispose.d.ts +3 -3
- package/dist/dispose.js +6 -6
- package/dist/dispose.js.map +1 -1
- package/dist/foliage.d.ts +32 -0
- package/dist/foliage.js +137 -0
- package/dist/foliage.js.map +1 -0
- package/dist/impostor/bake/index.d.ts +3 -3
- package/dist/impostor/bake/index.js +12 -3
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/source.d.ts +2 -1
- package/dist/impostor/bake/source.js +2 -2
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/impostor.d.ts +1 -1
- package/dist/impostor/impostor.js +1 -1
- package/dist/impostor/ktx2/encode.js +5 -2
- package/dist/impostor/ktx2/encode.js.map +1 -1
- package/dist/impostor/ktx2/uastc.js +3 -2
- package/dist/impostor/ktx2/uastc.js.map +1 -1
- package/dist/impostor/ktx2/worker.js +0 -2
- package/dist/impostor/ktx2/worker.js.map +1 -1
- package/dist/impostor/mesh/card.d.ts +1 -1
- package/dist/impostor/mesh/index.d.ts +2 -2
- package/dist/impostor/mesh/index.js +3 -3
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +3 -6
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.d.ts +13 -25
- package/dist/instanced/camera.js +17 -42
- package/dist/instanced/camera.js.map +1 -1
- package/dist/instanced/clusters.d.ts +54 -0
- package/dist/instanced/clusters.js +151 -0
- package/dist/instanced/clusters.js.map +1 -0
- package/dist/instanced/cull.d.ts +3 -3
- package/dist/instanced/cull.js +2 -2
- package/dist/instanced/cull.js.map +1 -1
- package/dist/instanced/instances.d.ts +39 -0
- package/dist/instanced/instances.js +104 -0
- package/dist/instanced/instances.js.map +1 -0
- package/dist/instanced/key.d.ts +1 -1
- package/dist/instanced/key.js +1 -1
- package/dist/instanced/key.js.map +1 -1
- package/dist/instanced/levels.d.ts +9 -9
- package/dist/instanced/levels.js +7 -6
- package/dist/instanced/levels.js.map +1 -1
- package/dist/instanced/lists.d.ts +26 -39
- package/dist/instanced/lists.js +42 -61
- package/dist/instanced/lists.js.map +1 -1
- package/dist/instanced/measure.d.ts +2 -2
- package/dist/instanced/measure.js +2 -2
- package/dist/instanced/meshes.d.ts +11 -9
- package/dist/instanced/meshes.js +26 -16
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.d.ts +16 -12
- package/dist/instanced/mirror.js +51 -12
- package/dist/instanced/mirror.js.map +1 -1
- package/dist/instanced/raycast.d.ts +6 -9
- package/dist/instanced/raycast.js +15 -18
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +15 -73
- package/dist/instanced/rows.js +16 -189
- package/dist/instanced/rows.js.map +1 -1
- package/dist/instanced/shape.d.ts +3 -1
- package/dist/instanced/shape.js +6 -3
- package/dist/instanced/shape.js.map +1 -1
- package/dist/instanced/sort.d.ts +32 -34
- package/dist/instanced/sort.js +162 -132
- package/dist/instanced/sort.js.map +1 -1
- package/dist/instanced/update.d.ts +16 -12
- package/dist/instanced/update.js +57 -84
- package/dist/instanced/update.js.map +1 -1
- package/dist/levels/compile/index.d.ts +4 -2
- package/dist/levels/compile/index.js +10 -2
- package/dist/levels/compile/index.js.map +1 -1
- package/dist/levels/compile/pipelines.d.ts +1 -1
- package/dist/levels/compile/pipelines.js +1 -6
- package/dist/levels/compile/pipelines.js.map +1 -1
- package/dist/levels/draw.d.ts +1 -1
- package/dist/levels/draw.js +3 -3
- package/dist/levels/fade.d.ts +13 -22
- package/dist/levels/fade.js +17 -38
- package/dist/levels/fade.js.map +1 -1
- package/dist/levels/index.d.ts +7 -7
- package/dist/levels/index.js +1 -1
- package/dist/levels/item.d.ts +10 -10
- package/dist/levels/item.js +15 -23
- package/dist/levels/item.js.map +1 -1
- package/dist/levels/load.d.ts +1 -1
- package/dist/levels/load.js +5 -3
- package/dist/levels/load.js.map +1 -1
- package/dist/levels/manager.d.ts +30 -31
- package/dist/levels/manager.js +75 -62
- package/dist/levels/manager.js.map +1 -1
- package/dist/levels/material.d.ts +2 -2
- package/dist/levels/material.js +2 -2
- package/dist/levels/renderer.d.ts +8 -5
- package/dist/levels/renderer.js +20 -4
- package/dist/levels/renderer.js.map +1 -1
- package/dist/levels/requests.d.ts +4 -1
- package/dist/levels/requests.js +3 -1
- package/dist/levels/requests.js.map +1 -1
- package/dist/loader/context.d.ts +9 -11
- package/dist/loader/context.js +12 -7
- package/dist/loader/context.js.map +1 -1
- package/dist/loader/entry.d.ts +4 -0
- package/dist/loader/entry.js +43 -0
- package/dist/loader/entry.js.map +1 -0
- package/dist/loader/index.d.ts +49 -35
- package/dist/loader/index.js +123 -135
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/level.js +5 -5
- package/dist/loader/level.js.map +1 -1
- package/dist/loader/node.d.ts +26 -0
- package/dist/loader/node.js +199 -0
- package/dist/loader/node.js.map +1 -0
- package/dist/loader/request.d.ts +11 -44
- package/dist/loader/request.js +7 -47
- package/dist/loader/request.js.map +1 -1
- package/dist/loader/url.d.ts +10 -9
- package/dist/loader/url.js +21 -17
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.d.ts +122 -62
- package/dist/lod.js +331 -187
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.d.ts +1 -1
- package/dist/meshopt.js +3 -2
- package/dist/meshopt.js.map +1 -1
- package/dist/node-process.d.ts +5 -0
- package/dist/node-process.js +6 -0
- package/dist/node-process.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.js +5 -0
- package/dist/node.js.map +1 -0
- package/dist/simplify/index.d.ts +2 -2
- package/dist/simplify/index.js +7 -7
- package/dist/simplify/index.js.map +1 -1
- package/dist/source/detail.d.ts +7 -2
- package/dist/source/detail.js +24 -22
- package/dist/source/detail.js.map +1 -1
- package/dist/source/sampler.js +5 -2
- package/dist/source/sampler.js.map +1 -1
- package/dist/three.d.ts +7 -7
- package/dist/three.js +4 -4
- package/dist/three.js.map +1 -1
- package/dist/wind/bounds.js +1 -1
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.d.ts +1 -1
- package/dist/wind/hooks.js +1 -1
- package/dist/wind/index.d.ts +3 -3
- package/dist/wind/index.js +11 -9
- package/dist/wind/index.js.map +1 -1
- package/package.json +10 -6
- package/skills/lod/SKILL.md +65 -54
- package/dist/gpu.d.ts +0 -39
- package/dist/gpu.js +0 -41
- package/dist/gpu.js.map +0 -1
- package/dist/instanced/chunk.d.ts +0 -97
- package/dist/instanced/chunk.js +0 -156
- package/dist/instanced/chunk.js.map +0 -1
- package/dist/instanced/chunks.d.ts +0 -60
- package/dist/instanced/chunks.js +0 -208
- package/dist/instanced/chunks.js.map +0 -1
- package/dist/instanced/index.d.ts +0 -120
- package/dist/instanced/index.js +0 -290
- package/dist/instanced/index.js.map +0 -1
- package/dist/instanced/pages/buffers.d.ts +0 -37
- package/dist/instanced/pages/buffers.js +0 -15
- package/dist/instanced/pages/buffers.js.map +0 -1
- package/dist/instanced/pages/chunk.d.ts +0 -51
- package/dist/instanced/pages/chunk.js +0 -81
- package/dist/instanced/pages/chunk.js.map +0 -1
- package/dist/instanced/pages/index.d.ts +0 -74
- package/dist/instanced/pages/index.js +0 -269
- package/dist/instanced/pages/index.js.map +0 -1
- package/dist/instanced/pages/passes.d.ts +0 -21
- package/dist/instanced/pages/passes.js +0 -52
- package/dist/instanced/pages/passes.js.map +0 -1
- package/dist/instanced/pages/slots.d.ts +0 -11
- package/dist/instanced/pages/slots.js +0 -90
- package/dist/instanced/pages/slots.js.map +0 -1
- package/dist/instanced/pages/workgroup.d.ts +0 -14
- package/dist/instanced/pages/workgroup.js +0 -38
- package/dist/instanced/pages/workgroup.js.map +0 -1
- package/dist/levels/wait.d.ts +0 -27
- package/dist/levels/wait.js +0 -61
- package/dist/levels/wait.js.map +0 -1
- package/dist/loader/cache.d.ts +0 -12
- package/dist/loader/cache.js +0 -68
- package/dist/loader/cache.js.map +0 -1
- package/dist/loader/dependencies.d.ts +0 -32
- package/dist/loader/dependencies.js +0 -113
- package/dist/loader/dependencies.js.map +0 -1
package/dist/levels/wait.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Renders a change of an InstancedLod's chunks rests for before their status is read back (see `ChunkWait`): chunks
|
|
3
|
-
* change for many frames while an app loads them in, and every read is a submission of its own.
|
|
4
|
-
*/
|
|
5
|
-
const CHUNK_REST = 4;
|
|
6
|
-
/**
|
|
7
|
-
* Whether an InstancedLod's chunks wait to be shown taken in on the GPU: from a change until, a few renders later, a
|
|
8
|
-
* read of their status shows each taken in, so that its manager holds its item until a host sees them drawn.
|
|
9
|
-
*/
|
|
10
|
-
export class ChunkWait {
|
|
11
|
-
read;
|
|
12
|
-
taken;
|
|
13
|
-
failed;
|
|
14
|
-
/** While chunks wait, the renders left before their status is read, and whether a read is under way. */
|
|
15
|
-
rest = null;
|
|
16
|
-
constructor(
|
|
17
|
-
/** Whether the GPU shows every chunk taken in, read back; it throws if a chunk lacks room. */
|
|
18
|
-
read,
|
|
19
|
-
/** Called once a read shows every chunk taken in. */
|
|
20
|
-
taken,
|
|
21
|
-
/** Called with what a read throws. */
|
|
22
|
-
failed) {
|
|
23
|
-
this.read = read;
|
|
24
|
-
this.taken = taken;
|
|
25
|
-
this.failed = failed;
|
|
26
|
-
}
|
|
27
|
-
/** Whether chunks wait to be shown taken in. */
|
|
28
|
-
get waiting() {
|
|
29
|
-
return this.rest !== null;
|
|
30
|
-
}
|
|
31
|
-
/** The chunks were added or removed: wait for them again. */
|
|
32
|
-
changed() {
|
|
33
|
-
if (this.rest)
|
|
34
|
-
this.rest.renders = CHUNK_REST;
|
|
35
|
-
else
|
|
36
|
-
this.rest = { renders: CHUNK_REST, reading: false };
|
|
37
|
-
}
|
|
38
|
-
/** A render updated the InstancedLod: read the chunks' status once their change has rested. */
|
|
39
|
-
render() {
|
|
40
|
-
const { rest } = this;
|
|
41
|
-
if (!rest || rest.reading)
|
|
42
|
-
return;
|
|
43
|
-
if (rest.renders > 0) {
|
|
44
|
-
rest.renders--;
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
rest.reading = true;
|
|
48
|
-
this.read().then((taken) => {
|
|
49
|
-
rest.reading = false;
|
|
50
|
-
if (this.rest !== rest)
|
|
51
|
-
return;
|
|
52
|
-
if (!taken || rest.renders > 0) {
|
|
53
|
-
rest.renders = CHUNK_REST;
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
56
|
-
this.rest = null;
|
|
57
|
-
this.taken();
|
|
58
|
-
}, (error) => this.failed(error));
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=wait.js.map
|
package/dist/levels/wait.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../src/levels/wait.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,CAAC;AAErB;;;GAGG;AACH,MAAM,OAAO,SAAS;IAMD;IAEA;IAEA;IATnB,wGAAwG;IAChG,IAAI,GAAiD,IAAI,CAAC;IAElE;IACE,8FAA8F;IAC7E,IAA4B;IAC7C,qDAAqD;IACpC,KAAiB;IAClC,sCAAsC;IACrB,MAAgC;QAJhC,SAAI,GAAJ,IAAI,CAAwB;QAE5B,UAAK,GAAL,KAAK,CAAY;QAEjB,WAAM,GAAN,MAAM,CAA0B;IAChD,CAAC;IAEJ,gDAAgD;IAChD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IAC5B,CAAC;IAED,6DAA6D;IAC7D,OAAO;QACL,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;;YACzC,IAAI,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC3D,CAAC;IAED,+FAA+F;IAC/F,MAAM;QACJ,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QAClC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CACd,CAAC,KAAK,EAAE,EAAE;YACR,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;YACrB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;gBAAE,OAAO;YAC/B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;gBAC1B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,EACD,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CACvC,CAAC;IACJ,CAAC;CACF"}
|
package/dist/loader/cache.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { CacheEntry, type CacheEntryOptions, type Dependencies } from "vitecache";
|
|
2
|
-
import type { Derived } from "./level.js";
|
|
3
|
-
/** Persistent cache location. Generator packages are discovered from GLTS source provenance. */
|
|
4
|
-
export type LodCacheOptions = Pick<CacheEntryOptions, "basePath" | "root">;
|
|
5
|
-
/**
|
|
6
|
-
* One derived level, or the source's shape: keyed by the URLs it is built from, its request and their bundled modules,
|
|
7
|
-
* and saved with what loading them revealed, so vitecache rechecks those without loading the sources. Each level has
|
|
8
|
-
* its own entry, so a level is built and saved only when it is first needed; the shape's describes the ladder before
|
|
9
|
-
* any level is.
|
|
10
|
-
*/
|
|
11
|
-
export declare function ladderEntry(inputs: Dependencies, of: Derived | "shape", modules: Readonly<Record<string, string>>, options?: LodCacheOptions): CacheEntry;
|
|
12
|
-
export declare function sha256(bytes: Uint8Array): Promise<string>;
|
package/dist/loader/cache.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { CacheEntry } from "vitecache";
|
|
2
|
-
import { urlQuery } from "./url.js";
|
|
3
|
-
/**
|
|
4
|
-
* What builds and lays out a cached level, and so what identifies it beside its inputs: bump it with any change to
|
|
5
|
-
* the bytes a level or shape entry holds. Not this package's files, which change with every rebuild, whether a level
|
|
6
|
-
* would or not.
|
|
7
|
-
*/
|
|
8
|
-
const version = "lod-level@23";
|
|
9
|
-
/**
|
|
10
|
-
* One derived level, or the source's shape: keyed by the URLs it is built from, its request and their bundled modules,
|
|
11
|
-
* and saved with what loading them revealed, so vitecache rechecks those without loading the sources. Each level has
|
|
12
|
-
* its own entry, so a level is built and saved only when it is first needed; the shape's describes the ladder before
|
|
13
|
-
* any level is.
|
|
14
|
-
*/
|
|
15
|
-
export function ladderEntry(inputs, of, modules, options) {
|
|
16
|
-
// vitecache resolves URLs to file paths; generation parameters go in the key.
|
|
17
|
-
const queries = {};
|
|
18
|
-
for (const [name, dependency] of Object.entries(inputs)) {
|
|
19
|
-
const query = dependency.url === undefined ? "" : urlQuery(dependency.url);
|
|
20
|
-
if (query)
|
|
21
|
-
queries[name] = query;
|
|
22
|
-
}
|
|
23
|
-
return new CacheEntry({
|
|
24
|
-
basePath: options?.basePath,
|
|
25
|
-
root: options?.root,
|
|
26
|
-
version,
|
|
27
|
-
dependencies: {
|
|
28
|
-
...inputs,
|
|
29
|
-
"lod:level": { value: of === "shape" ? { type: of } : parameters(of) },
|
|
30
|
-
"lod:modules": { value: modules },
|
|
31
|
-
"lod:queries": { value: queries },
|
|
32
|
-
// Only packages the app installs resolve from its root; this package's own dependencies are covered by `version` above.
|
|
33
|
-
"lod:three": { package: "three" },
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
export async function sha256(bytes) {
|
|
38
|
-
const hash = await crypto.subtle.digest("SHA-256", new Uint8Array(bytes));
|
|
39
|
-
return Array.from(new Uint8Array(hash), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
40
|
-
}
|
|
41
|
-
/** What derives a level's content. Switch thresholds and impostor draw options apply at decode, so changing one reuses the cache. */
|
|
42
|
-
function parameters(level) {
|
|
43
|
-
switch (level.type) {
|
|
44
|
-
case "simplify":
|
|
45
|
-
// Alpha-tested cards are thinned whole since lod-level@23; keyed here so other kinds' levels stay cached.
|
|
46
|
-
return { type: level.type, ratio: level.ratio ?? null, cards: "thin" };
|
|
47
|
-
case "baked":
|
|
48
|
-
return {
|
|
49
|
-
type: level.type,
|
|
50
|
-
ratio: level.ratio ?? null,
|
|
51
|
-
textureSize: level.textureSize ?? null,
|
|
52
|
-
low: level.low ?? null,
|
|
53
|
-
interior: level.interior ?? null,
|
|
54
|
-
};
|
|
55
|
-
case "impostor":
|
|
56
|
-
return {
|
|
57
|
-
type: level.type,
|
|
58
|
-
// The impostor bakes its top mip for this height too.
|
|
59
|
-
maxPixels: level.maxPixels ?? null,
|
|
60
|
-
layout: level.layout ?? null,
|
|
61
|
-
frames: level.frames ?? null,
|
|
62
|
-
resolution: level.resolution ?? null,
|
|
63
|
-
emissive: level.emissive ?? null,
|
|
64
|
-
supersample: level.supersample ?? null,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=cache.js.map
|
package/dist/loader/cache.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/loader/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { LoadingManager, Object3D } from "three/webgpu";
|
|
2
|
-
import type { Dependencies, SavedDependencies } from "vitecache";
|
|
3
|
-
/** The requested assets, and the files and packages loading them revealed, for saving with the index built from them. */
|
|
4
|
-
export declare class AssetDependencies {
|
|
5
|
-
private readonly manager;
|
|
6
|
-
readonly inputs: Dependencies;
|
|
7
|
-
private readonly resources;
|
|
8
|
-
/** Whole: a GLTS source reports what it has observed so far, so it is read when saving. */
|
|
9
|
-
private readonly scripts;
|
|
10
|
-
constructor(urls: Readonly<Record<string, string>>, manager: LoadingManager);
|
|
11
|
-
capture(url: string, object: Object3D, result: unknown): void;
|
|
12
|
-
/** Also hold what `other`'s loads read. */
|
|
13
|
-
include(other: AssetDependencies): this;
|
|
14
|
-
/** The requested URLs, resolved as `inputs` holds them. */
|
|
15
|
-
get requested(): string[];
|
|
16
|
-
/**
|
|
17
|
-
* What the captured assets were built from so far, beyond the requested URLs, or why that cannot be validated later:
|
|
18
|
-
* a CDN module fetched at runtime, which bundled moduleSources cannot vouch for, or a cross-origin resource, which
|
|
19
|
-
* vitecache cannot hash.
|
|
20
|
-
*/
|
|
21
|
-
saved(): {
|
|
22
|
-
dependencies: SavedDependencies;
|
|
23
|
-
} | {
|
|
24
|
-
reason: string;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Digests of the bundled modules each input script's GLTS loader links, by input name. They are known before a source runs,
|
|
29
|
-
* so they key its levels: a source's bundled module hashes come from these moduleSources. Any change to them, such as a new
|
|
30
|
-
* bare import in any .glts, therefore invalidates every GLTS-derived level.
|
|
31
|
-
*/
|
|
32
|
-
export declare function bundledModules(urls: Readonly<Record<string, string>>, manager: LoadingManager): Promise<Record<string, string>>;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { isGLTSLoader, isGLTSScene } from "../three.js";
|
|
2
|
-
import { sha256 } from "./cache.js";
|
|
3
|
-
import { assetPath, isLocal, localURL, sourceRelativeURL, urlPath } from "./url.js";
|
|
4
|
-
/** The requested assets, and the files and packages loading them revealed, for saving with the index built from them. */
|
|
5
|
-
export class AssetDependencies {
|
|
6
|
-
manager;
|
|
7
|
-
inputs;
|
|
8
|
-
resources = new Set();
|
|
9
|
-
/** Whole: a GLTS source reports what it has observed so far, so it is read when saving. */
|
|
10
|
-
scripts = [];
|
|
11
|
-
constructor(urls, manager) {
|
|
12
|
-
this.manager = manager;
|
|
13
|
-
this.inputs = Object.fromEntries(Object.entries(urls).map(([name, url]) => [name, { url: localURL(manager.resolveURL(url)) }]));
|
|
14
|
-
}
|
|
15
|
-
capture(url, object, result) {
|
|
16
|
-
if (assetPath(url).extension !== "glts") {
|
|
17
|
-
for (const uri of gltfUrls(result, url))
|
|
18
|
-
this.resources.add(localURL(this.manager.resolveURL(uri)));
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (!isGLTSScene(object))
|
|
22
|
-
throw new Error(`LodLoader: "${url}" did not load as a GLTS scene`);
|
|
23
|
-
this.scripts.push(object.source);
|
|
24
|
-
}
|
|
25
|
-
/** Also hold what `other`'s loads read. */
|
|
26
|
-
include(other) {
|
|
27
|
-
for (const resource of other.resources)
|
|
28
|
-
this.resources.add(resource);
|
|
29
|
-
this.scripts.push(...other.scripts);
|
|
30
|
-
return this;
|
|
31
|
-
}
|
|
32
|
-
/** The requested URLs, resolved as `inputs` holds them. */
|
|
33
|
-
get requested() {
|
|
34
|
-
return Object.values(this.inputs).flatMap(({ url }) => (url === undefined ? [] : [url]));
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* What the captured assets were built from so far, beyond the requested URLs, or why that cannot be validated later:
|
|
38
|
-
* a CDN module fetched at runtime, which bundled moduleSources cannot vouch for, or a cross-origin resource, which
|
|
39
|
-
* vitecache cannot hash.
|
|
40
|
-
*/
|
|
41
|
-
saved() {
|
|
42
|
-
if (this.scripts.some((source) => source.runtimeModules.length))
|
|
43
|
-
return { reason: "it imports CDN modules at runtime" };
|
|
44
|
-
const found = new Set(this.resources);
|
|
45
|
-
for (const source of this.scripts)
|
|
46
|
-
for (const url of [source.url, ...source.dependencyUrls])
|
|
47
|
-
found.add(localURL(url));
|
|
48
|
-
const inputs = this.requested;
|
|
49
|
-
// A script's provenance URL carries its execution's query, so any query of an input script is that input.
|
|
50
|
-
const scripts = new Set(inputs.filter((url) => assetPath(url).extension === "glts").map(urlPath));
|
|
51
|
-
const urls = [...found].filter((url) => !inputs.includes(url) && !scripts.has(urlPath(url))).sort();
|
|
52
|
-
const remote = urls.find((url) => !isLocal(url));
|
|
53
|
-
if (remote)
|
|
54
|
-
return { reason: `it loads the cross-origin resource "${remote}"` };
|
|
55
|
-
const packages = [...new Set(this.scripts.flatMap((source) => source.packages))].sort();
|
|
56
|
-
return {
|
|
57
|
-
dependencies: {
|
|
58
|
-
...Object.fromEntries(urls.map((url, index) => [`resource:${index}`, { url }])),
|
|
59
|
-
...Object.fromEntries(packages.map((name) => [`package:${name}`, { package: name }])),
|
|
60
|
-
},
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/** Each GLTS loader's moduleSources digest, hashed once: a side table keyed by the loaders' moduleSources, which the app owns. */
|
|
65
|
-
const digests = new WeakMap();
|
|
66
|
-
/**
|
|
67
|
-
* Digests of the bundled modules each input script's GLTS loader links, by input name. They are known before a source runs,
|
|
68
|
-
* so they key its levels: a source's bundled module hashes come from these moduleSources. Any change to them, such as a new
|
|
69
|
-
* bare import in any .glts, therefore invalidates every GLTS-derived level.
|
|
70
|
-
*/
|
|
71
|
-
export async function bundledModules(urls, manager) {
|
|
72
|
-
const found = {};
|
|
73
|
-
for (const [name, url] of Object.entries(urls)) {
|
|
74
|
-
const handler = manager.getHandler(urlPath(url));
|
|
75
|
-
if (!handler || !isGLTSLoader(handler))
|
|
76
|
-
continue;
|
|
77
|
-
let digest = digests.get(handler.moduleSources);
|
|
78
|
-
if (!digest) {
|
|
79
|
-
// Include namespace bindings: an unused namespace can retain an old module URL.
|
|
80
|
-
digest = sha256(new TextEncoder().encode(JSON.stringify(handler.moduleSources)));
|
|
81
|
-
digests.set(handler.moduleSources, digest);
|
|
82
|
-
}
|
|
83
|
-
found[name] = await digest;
|
|
84
|
-
}
|
|
85
|
-
return found;
|
|
86
|
-
}
|
|
87
|
-
function field(value, name) {
|
|
88
|
-
return typeof value === "object" && value !== null ? Reflect.get(value, name) : undefined;
|
|
89
|
-
}
|
|
90
|
-
function gltfUrls(result, url) {
|
|
91
|
-
const parser = field(result, "parser");
|
|
92
|
-
if (parser === undefined)
|
|
93
|
-
return [];
|
|
94
|
-
const json = field(parser, "json");
|
|
95
|
-
if (typeof json !== "object" || json === null)
|
|
96
|
-
throw new Error("LodLoader: glTF parser.json must provide source metadata");
|
|
97
|
-
return ["buffers", "images"].flatMap((name) => {
|
|
98
|
-
const resources = field(json, name);
|
|
99
|
-
if (resources === undefined)
|
|
100
|
-
return [];
|
|
101
|
-
if (!Array.isArray(resources))
|
|
102
|
-
throw new Error(`LodLoader: glTF ${name} must be an array`);
|
|
103
|
-
return resources.flatMap((resource) => {
|
|
104
|
-
const uri = field(resource, "uri");
|
|
105
|
-
if (uri === undefined)
|
|
106
|
-
return [];
|
|
107
|
-
if (typeof uri !== "string")
|
|
108
|
-
throw new Error("LodLoader: glTF resource URIs must be strings");
|
|
109
|
-
return /^data:/i.test(uri) ? [] : [sourceRelativeURL(uri, url)];
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/loader/dependencies.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAEpF,yHAAyH;AACzH,MAAM,OAAO,iBAAiB;IAQT;IAPV,MAAM,CAAe;IACb,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/C,2FAA2F;IAC1E,OAAO,GAAiB,EAAE,CAAC;IAE5C,YACE,IAAsC,EACrB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;QAExC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAClI,CAAC;IAED,OAAO,CAAC,GAAW,EAAE,MAAgB,EAAE,MAAe;QACpD,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpG,OAAO;QACT,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,gCAAgC,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,2CAA2C;IAC3C,OAAO,CAAC,KAAwB;QAC9B,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,2DAA2D;IAC3D,IAAI,SAAS;QACX,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,MAAM,EAAE,mCAAmC,EAAE,CAAC;QACxH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACtH,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAC9B,0GAA0G;QAC1G,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QAClG,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpG,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,MAAM;YAAE,OAAO,EAAE,MAAM,EAAE,uCAAuC,MAAM,GAAG,EAAE,CAAC;QAChF,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxF,OAAO;YACL,YAAY,EAAE;gBACZ,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,YAAY,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC/E,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;aACtF;SACF,CAAC;IACJ,CAAC;CACF;AAED,kIAAkI;AAClI,MAAM,OAAO,GAAG,IAAI,OAAO,EAA2B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAsC,EAAE,OAAuB;IAClG,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC;YAAE,SAAS;QACjD,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,gFAAgF;YAChF,MAAM,GAAG,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACjF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,MAAM,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,KAAK,CAAC,KAAc,EAAE,IAAY;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5F,CAAC;AAED,SAAS,QAAQ,CAAC,MAAe,EAAE,GAAW;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC3H,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,mBAAmB,CAAC,CAAC;QAC3F,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,QAAiB,EAAE,EAAE;YAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;YACjC,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YAC9F,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|