@drawcall/lod 0.2.0 → 0.3.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 +8 -6
- package/dist/bake.d.ts +22 -0
- package/dist/bake.js +88 -0
- package/dist/bake.js.map +1 -0
- package/dist/baked/codec.d.ts +3 -6
- package/dist/baked/codec.js +48 -154
- package/dist/baked/codec.js.map +1 -1
- package/dist/baked/coverage.d.ts +6 -3
- package/dist/baked/coverage.js +6 -3
- package/dist/baked/coverage.js.map +1 -1
- package/dist/baked/fields.d.ts +9 -0
- package/dist/baked/fields.js +22 -0
- package/dist/baked/fields.js.map +1 -0
- package/dist/baked/index.d.ts +12 -6
- package/dist/baked/index.js +22 -20
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/interior/faces.d.ts +4 -3
- package/dist/baked/interior/faces.js +13 -10
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.d.ts +7 -10
- package/dist/baked/interior/material.js +29 -36
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.js +1 -1
- package/dist/baked/interior/rooms.js.map +1 -1
- package/dist/baked/low.js +5 -4
- package/dist/baked/low.js.map +1 -1
- package/dist/baked/raster.js +6 -6
- package/dist/baked/raster.js.map +1 -1
- package/dist/baked/textures.d.ts +17 -0
- package/dist/baked/textures.js +95 -0
- package/dist/baked/textures.js.map +1 -0
- package/dist/baked/transfer.js +19 -18
- package/dist/baked/transfer.js.map +1 -1
- package/dist/baked/unwrap.js +4 -3
- package/dist/baked/unwrap.js.map +1 -1
- package/dist/baked/xatlas.js.map +1 -1
- package/dist/codec/container.d.ts +8 -0
- package/dist/codec/container.js +63 -0
- package/dist/codec/container.js.map +1 -0
- package/dist/codec/mesh.d.ts +8 -0
- package/dist/{mesh/codec.js → codec/mesh.js} +80 -52
- package/dist/codec/mesh.js.map +1 -0
- package/dist/dispose.d.ts +7 -4
- package/dist/dispose.js +20 -22
- package/dist/dispose.js.map +1 -1
- package/dist/gpu.d.ts +39 -0
- package/dist/gpu.js +41 -0
- package/dist/gpu.js.map +1 -0
- package/dist/impostor/bake/atlas.d.ts +4 -4
- package/dist/impostor/bake/atlas.js +12 -12
- package/dist/impostor/bake/atlas.js.map +1 -1
- package/dist/impostor/bake/fit.d.ts +8 -0
- package/dist/impostor/bake/fit.js +28 -0
- package/dist/impostor/bake/fit.js.map +1 -0
- package/dist/impostor/bake/index.d.ts +22 -14
- package/dist/impostor/bake/index.js +41 -134
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/materials.d.ts +3 -3
- package/dist/impostor/bake/materials.js +51 -13
- package/dist/impostor/bake/materials.js.map +1 -1
- package/dist/impostor/bake/sheet.d.ts +8 -0
- package/dist/impostor/bake/sheet.js +90 -0
- package/dist/impostor/bake/sheet.js.map +1 -0
- package/dist/impostor/bake/source.d.ts +2 -2
- package/dist/impostor/bake/source.js +8 -19
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/codec.d.ts +4 -5
- package/dist/impostor/codec.js +36 -109
- package/dist/impostor/codec.js.map +1 -1
- package/dist/impostor/impostor.d.ts +31 -7
- package/dist/impostor/impostor.js +21 -6
- package/dist/impostor/impostor.js.map +1 -1
- package/dist/impostor/ktx2/encode.d.ts +26 -0
- package/dist/impostor/ktx2/encode.js +117 -0
- package/dist/impostor/ktx2/encode.js.map +1 -0
- package/dist/impostor/ktx2/transcode.d.ts +3 -0
- package/dist/impostor/ktx2/transcode.js +99 -0
- package/dist/impostor/ktx2/transcode.js.map +1 -0
- package/dist/impostor/ktx2/uastc.d.ts +7 -0
- package/dist/impostor/ktx2/uastc.js +64 -0
- package/dist/impostor/ktx2/uastc.js.map +1 -0
- package/dist/impostor/ktx2/wasm/encoder.d.ts +4 -0
- package/dist/impostor/ktx2/wasm/encoder.js +10 -0
- package/dist/impostor/ktx2/wasm/encoder.js.map +1 -0
- package/dist/impostor/ktx2/wasm/transcoder.d.ts +3 -0
- package/dist/impostor/ktx2/wasm/transcoder.js +9 -0
- package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -0
- package/dist/impostor/ktx2/worker.d.ts +1 -0
- package/dist/impostor/ktx2/worker.js +12 -0
- package/dist/impostor/ktx2/worker.js.map +1 -0
- package/dist/impostor/mesh/card.d.ts +3 -3
- package/dist/impostor/mesh/card.js +7 -7
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +5 -4
- package/dist/impostor/mesh/index.js +8 -9
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.d.ts +18 -9
- package/dist/impostor/mesh/material.js +40 -27
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.d.ts +1 -1
- package/dist/impostor/mesh/surface.js +13 -9
- package/dist/impostor/mesh/surface.js.map +1 -1
- package/dist/impostor/mesh/textures.d.ts +3 -3
- package/dist/impostor/mesh/textures.js +24 -34
- package/dist/impostor/mesh/textures.js.map +1 -1
- package/dist/index.d.ts +15 -10
- package/dist/index.js +13 -8
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.d.ts +46 -0
- package/dist/instanced/camera.js +70 -0
- package/dist/instanced/camera.js.map +1 -0
- package/dist/instanced/chunk.d.ts +97 -0
- package/dist/instanced/chunk.js +156 -0
- package/dist/instanced/chunk.js.map +1 -0
- package/dist/instanced/chunks.d.ts +60 -0
- package/dist/instanced/chunks.js +208 -0
- package/dist/instanced/chunks.js.map +1 -0
- package/dist/instanced/cull.d.ts +28 -0
- package/dist/instanced/cull.js +22 -0
- package/dist/instanced/cull.js.map +1 -0
- package/dist/instanced/index.d.ts +96 -66
- package/dist/instanced/index.js +229 -288
- package/dist/instanced/index.js.map +1 -1
- package/dist/instanced/key.d.ts +19 -0
- package/dist/instanced/key.js +45 -0
- package/dist/instanced/key.js.map +1 -0
- package/dist/instanced/levels.d.ts +60 -0
- package/dist/instanced/levels.js +130 -0
- package/dist/instanced/levels.js.map +1 -0
- package/dist/instanced/lists.d.ts +70 -0
- package/dist/instanced/lists.js +133 -0
- package/dist/instanced/lists.js.map +1 -0
- package/dist/instanced/measure.d.ts +28 -0
- package/dist/instanced/measure.js +203 -0
- package/dist/instanced/measure.js.map +1 -0
- package/dist/instanced/meshes.d.ts +42 -51
- package/dist/instanced/meshes.js +158 -180
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.d.ts +20 -0
- package/dist/instanced/mirror.js +37 -0
- package/dist/instanced/mirror.js.map +1 -0
- package/dist/instanced/pages/buffers.d.ts +37 -0
- package/dist/instanced/pages/buffers.js +15 -0
- package/dist/instanced/pages/buffers.js.map +1 -0
- package/dist/instanced/pages/chunk.d.ts +51 -0
- package/dist/instanced/pages/chunk.js +81 -0
- package/dist/instanced/pages/chunk.js.map +1 -0
- package/dist/instanced/pages/index.d.ts +74 -0
- package/dist/instanced/pages/index.js +269 -0
- package/dist/instanced/pages/index.js.map +1 -0
- package/dist/instanced/pages/passes.d.ts +21 -0
- package/dist/instanced/pages/passes.js +52 -0
- package/dist/instanced/pages/passes.js.map +1 -0
- package/dist/instanced/pages/slots.d.ts +11 -0
- package/dist/instanced/pages/slots.js +90 -0
- package/dist/instanced/pages/slots.js.map +1 -0
- package/dist/instanced/pages/workgroup.d.ts +14 -0
- package/dist/instanced/pages/workgroup.js +38 -0
- package/dist/instanced/pages/workgroup.js.map +1 -0
- package/dist/instanced/raycast.d.ts +13 -11
- package/dist/instanced/raycast.js +33 -40
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +108 -0
- package/dist/instanced/rows.js +209 -0
- package/dist/instanced/rows.js.map +1 -0
- package/dist/instanced/shape.d.ts +25 -0
- package/dist/instanced/shape.js +51 -0
- package/dist/instanced/shape.js.map +1 -0
- package/dist/instanced/sort.d.ts +63 -0
- package/dist/instanced/sort.js +162 -0
- package/dist/instanced/sort.js.map +1 -0
- package/dist/instanced/update.d.ts +30 -0
- package/dist/instanced/update.js +207 -0
- package/dist/instanced/update.js.map +1 -0
- package/dist/levels/bounds.d.ts +21 -0
- package/dist/levels/bounds.js +42 -0
- package/dist/levels/bounds.js.map +1 -0
- package/dist/levels/cameras.d.ts +48 -0
- package/dist/levels/cameras.js +122 -0
- package/dist/levels/cameras.js.map +1 -0
- package/dist/levels/compile/contexts.d.ts +30 -0
- package/dist/levels/compile/contexts.js +18 -0
- package/dist/levels/compile/contexts.js.map +1 -0
- package/dist/levels/compile/index.d.ts +39 -0
- package/dist/levels/compile/index.js +185 -0
- package/dist/levels/compile/index.js.map +1 -0
- package/dist/levels/compile/pipelines.d.ts +26 -0
- package/dist/levels/compile/pipelines.js +177 -0
- package/dist/levels/compile/pipelines.js.map +1 -0
- package/dist/levels/compiles.d.ts +29 -0
- package/dist/levels/compiles.js +50 -0
- package/dist/levels/compiles.js.map +1 -0
- package/dist/levels/draw.d.ts +102 -0
- package/dist/levels/draw.js +401 -0
- package/dist/levels/draw.js.map +1 -0
- package/dist/levels/fade.d.ts +69 -0
- package/dist/levels/fade.js +150 -0
- package/dist/levels/fade.js.map +1 -0
- package/dist/levels/index.d.ts +99 -0
- package/dist/levels/index.js +155 -0
- package/dist/levels/index.js.map +1 -0
- package/dist/levels/item.d.ts +38 -0
- package/dist/levels/item.js +97 -0
- package/dist/levels/item.js.map +1 -0
- package/dist/levels/load.d.ts +31 -0
- package/dist/levels/load.js +142 -0
- package/dist/levels/load.js.map +1 -0
- package/dist/levels/manager.d.ts +159 -0
- package/dist/levels/manager.js +339 -0
- package/dist/levels/manager.js.map +1 -0
- package/dist/{material.js → levels/material.js} +4 -3
- package/dist/levels/material.js.map +1 -0
- package/dist/levels/renderer.d.ts +29 -0
- package/dist/levels/renderer.js +41 -0
- package/dist/levels/renderer.js.map +1 -0
- package/dist/levels/requests.d.ts +49 -0
- package/dist/levels/requests.js +95 -0
- package/dist/levels/requests.js.map +1 -0
- package/dist/levels/screen.d.ts +14 -0
- package/dist/levels/screen.js +21 -0
- package/dist/levels/screen.js.map +1 -0
- package/dist/levels/wait.d.ts +27 -0
- package/dist/levels/wait.js +61 -0
- package/dist/levels/wait.js.map +1 -0
- package/dist/loader/build.d.ts +10 -0
- package/dist/loader/build.js +28 -0
- package/dist/loader/build.js.map +1 -0
- package/dist/loader/cache.d.ts +6 -9
- package/dist/loader/cache.js +17 -24
- package/dist/loader/cache.js.map +1 -1
- package/dist/loader/context.d.ts +46 -0
- package/dist/loader/context.js +91 -0
- package/dist/loader/context.js.map +1 -0
- package/dist/loader/{provenance.d.ts → dependencies.d.ts} +5 -3
- package/dist/loader/{provenance.js → dependencies.js} +12 -4
- package/dist/loader/dependencies.js.map +1 -0
- package/dist/loader/index.d.ts +62 -0
- package/dist/loader/index.js +284 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/level.d.ts +41 -0
- package/dist/loader/level.js +140 -0
- package/dist/loader/level.js.map +1 -0
- package/dist/loader/request.d.ts +87 -0
- package/dist/loader/request.js +59 -0
- package/dist/loader/request.js.map +1 -0
- package/dist/loader/url.d.ts +5 -2
- package/dist/loader/url.js +10 -6
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.d.ts +81 -40
- package/dist/lod.js +196 -149
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.d.ts +6 -0
- package/dist/meshopt.js +19 -0
- package/dist/meshopt.js.map +1 -0
- package/dist/simplify/cards.d.ts +14 -0
- package/dist/simplify/cards.js +128 -0
- package/dist/simplify/cards.js.map +1 -0
- package/dist/{simplify.d.ts → simplify/index.d.ts} +7 -4
- package/dist/{simplify.js → simplify/index.js} +41 -23
- package/dist/simplify/index.js.map +1 -0
- package/dist/{bounds.d.ts → source/detail.d.ts} +4 -23
- package/dist/{bounds.js → source/detail.js} +19 -51
- package/dist/source/detail.js.map +1 -0
- package/dist/source/deviation.js +6 -6
- package/dist/source/deviation.js.map +1 -1
- package/dist/source/{shading.d.ts → evaluator.d.ts} +10 -10
- package/dist/source/{shading.js → evaluator.js} +5 -5
- package/dist/source/evaluator.js.map +1 -0
- package/dist/source/{trace.d.ts → raycaster.d.ts} +6 -6
- package/dist/source/{trace.js → raycaster.js} +8 -8
- package/dist/source/raycaster.js.map +1 -0
- package/dist/source/{texels.d.ts → sampler.d.ts} +1 -1
- package/dist/source/{texels.js → sampler.js} +3 -3
- package/dist/source/sampler.js.map +1 -0
- package/dist/source/source.d.ts +1 -1
- package/dist/source/source.js +1 -1
- package/dist/source/source.js.map +1 -1
- package/dist/source/surface.js +1 -1
- package/dist/source/surface.js.map +1 -1
- package/dist/task.d.ts +6 -0
- package/dist/{pause.js → task.js} +5 -5
- package/dist/task.js.map +1 -0
- package/dist/three.d.ts +13 -24
- package/dist/three.js +26 -53
- package/dist/three.js.map +1 -1
- package/dist/tsl.d.ts +8 -12
- package/dist/tsl.js +11 -39
- package/dist/tsl.js.map +1 -1
- package/dist/typegpu.d.ts +37 -0
- package/dist/typegpu.js +37 -0
- package/dist/typegpu.js.map +1 -0
- package/dist/wind/bounds.js +2 -2
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.d.ts +7 -4
- package/dist/wind/hooks.js +5 -2
- package/dist/wind/hooks.js.map +1 -1
- package/dist/wind/index.d.ts +2 -2
- package/dist/wind/index.js +15 -15
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.d.ts +2 -0
- package/dist/wind/sway.js +4 -1
- package/dist/wind/sway.js.map +1 -1
- package/package.json +18 -8
- package/skills/lod/SKILL.md +108 -31
- package/dist/bounds.js.map +0 -1
- package/dist/compile.d.ts +0 -4
- package/dist/compile.js +0 -100
- package/dist/compile.js.map +0 -1
- package/dist/deferred.d.ts +0 -12
- package/dist/deferred.js +0 -27
- package/dist/deferred.js.map +0 -1
- package/dist/fade.d.ts +0 -36
- package/dist/fade.js +0 -112
- package/dist/fade.js.map +0 -1
- package/dist/instanced/args.d.ts +0 -20
- package/dist/instanced/args.js +0 -77
- package/dist/instanced/args.js.map +0 -1
- package/dist/instanced/blocks.d.ts +0 -66
- package/dist/instanced/blocks.js +0 -294
- package/dist/instanced/blocks.js.map +0 -1
- package/dist/instanced/dirty.d.ts +0 -15
- package/dist/instanced/dirty.js +0 -96
- package/dist/instanced/dirty.js.map +0 -1
- package/dist/instanced/parts.d.ts +0 -14
- package/dist/instanced/parts.js +0 -79
- package/dist/instanced/parts.js.map +0 -1
- package/dist/instanced/select.d.ts +0 -92
- package/dist/instanced/select.js +0 -315
- package/dist/instanced/select.js.map +0 -1
- package/dist/instanced/store.d.ts +0 -31
- package/dist/instanced/store.js +0 -96
- package/dist/instanced/store.js.map +0 -1
- package/dist/levels.d.ts +0 -95
- package/dist/levels.js +0 -171
- package/dist/levels.js.map +0 -1
- package/dist/loader/bundle.d.ts +0 -25
- package/dist/loader/bundle.js +0 -241
- package/dist/loader/bundle.js.map +0 -1
- package/dist/loader/provenance.js.map +0 -1
- package/dist/loader.d.ts +0 -55
- package/dist/loader.js +0 -239
- package/dist/loader.js.map +0 -1
- package/dist/material.js.map +0 -1
- package/dist/mesh/codec.d.ts +0 -4
- package/dist/mesh/codec.js.map +0 -1
- package/dist/pause.d.ts +0 -6
- package/dist/pause.js.map +0 -1
- package/dist/queue.d.ts +0 -2
- package/dist/queue.js +0 -33
- package/dist/queue.js.map +0 -1
- package/dist/renderer.d.ts +0 -21
- package/dist/renderer.js +0 -83
- package/dist/renderer.js.map +0 -1
- package/dist/residency.d.ts +0 -44
- package/dist/residency.js +0 -205
- package/dist/residency.js.map +0 -1
- package/dist/simplify.js.map +0 -1
- package/dist/source/shading.js.map +0 -1
- package/dist/source/texels.js.map +0 -1
- package/dist/source/trace.js.map +0 -1
- package/dist/view.d.ts +0 -45
- package/dist/view.js +0 -131
- package/dist/view.js.map +0 -1
- /package/dist/{material.d.ts → levels/material.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen.js","sourceRoot":"","sources":["../../src/levels/screen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0C,MAAM,cAAc,CAAC;AAW/E,sEAAsE;AACtE,MAAM,UAAU,QAAQ,CAAC,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,GAAG,EAAE,IAAI,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE;IACnH,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACpD,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IACjC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;AAE7B;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,IAAa,EAAE,MAAc;IACxE,MAAM,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC1D,IAAI,MAAM,CAAC,KAAK;QAAE,OAAO,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;IAC7C,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACtH,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether an InstancedLod's chunks wait to be shown taken in on the GPU: from a change until, a few renders later, a
|
|
3
|
+
* read of their status shows each taken in, so that its manager holds its item until a host sees them drawn.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ChunkWait {
|
|
6
|
+
/** Whether the GPU shows every chunk taken in, read back; it throws if a chunk lacks room. */
|
|
7
|
+
private readonly read;
|
|
8
|
+
/** Called once a read shows every chunk taken in. */
|
|
9
|
+
private readonly taken;
|
|
10
|
+
/** Called with what a read throws. */
|
|
11
|
+
private readonly failed;
|
|
12
|
+
/** While chunks wait, the renders left before their status is read, and whether a read is under way. */
|
|
13
|
+
private rest;
|
|
14
|
+
constructor(
|
|
15
|
+
/** Whether the GPU shows every chunk taken in, read back; it throws if a chunk lacks room. */
|
|
16
|
+
read: () => Promise<boolean>,
|
|
17
|
+
/** Called once a read shows every chunk taken in. */
|
|
18
|
+
taken: () => void,
|
|
19
|
+
/** Called with what a read throws. */
|
|
20
|
+
failed: (error: unknown) => void);
|
|
21
|
+
/** Whether chunks wait to be shown taken in. */
|
|
22
|
+
get waiting(): boolean;
|
|
23
|
+
/** The chunks were added or removed: wait for them again. */
|
|
24
|
+
changed(): void;
|
|
25
|
+
/** A render updated the InstancedLod: read the chunks' status once their change has rested. */
|
|
26
|
+
render(): void;
|
|
27
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Object3D, Renderer } from "three/webgpu";
|
|
2
|
+
import type { Derived } from "./level.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build the level `request` asks for from `source`, with the baked level's `low` shell and `interior` rooms if it names
|
|
5
|
+
* them. `renderer` answers the renderer to bake with, asked for only by a bake that draws.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildLevel(source: Object3D, request: Derived, { low, interior }: {
|
|
8
|
+
low: Object3D | undefined;
|
|
9
|
+
interior: Object3D | undefined;
|
|
10
|
+
}, renderer: () => Promise<Renderer>): Promise<Object3D>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { bakeMesh } from "../baked/index.js";
|
|
2
|
+
import { bakeImpostor } from "../impostor/bake/index.js";
|
|
3
|
+
import { ImpostorMesh } from "../impostor/mesh/index.js";
|
|
4
|
+
import { simplify } from "../simplify/index.js";
|
|
5
|
+
import { placeLike } from "../three.js";
|
|
6
|
+
/**
|
|
7
|
+
* Build the level `request` asks for from `source`, with the baked level's `low` shell and `interior` rooms if it names
|
|
8
|
+
* them. `renderer` answers the renderer to bake with, asked for only by a bake that draws.
|
|
9
|
+
*/
|
|
10
|
+
export async function buildLevel(source, request, { low, interior }, renderer) {
|
|
11
|
+
switch (request.type) {
|
|
12
|
+
case "simplify":
|
|
13
|
+
return simplify(source, { ratio: request.ratio });
|
|
14
|
+
case "impostor": {
|
|
15
|
+
const { type: _, draw: __, ...options } = request;
|
|
16
|
+
const object = new ImpostorMesh(await bakeImpostor(source, await renderer(), options));
|
|
17
|
+
object.name = `${source.name || "object"} impostor`;
|
|
18
|
+
placeLike(object, source);
|
|
19
|
+
return object;
|
|
20
|
+
}
|
|
21
|
+
case "baked": {
|
|
22
|
+
const shell = low ? { low } : { ratio: request.ratio };
|
|
23
|
+
const rooms = interior ? { interior, renderer: await renderer() } : {};
|
|
24
|
+
return bakeMesh(source, { textureSize: request.textureSize, ...shell, ...rooms });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/loader/build.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,MAAgB,EAChB,OAAgB,EAChB,EAAE,GAAG,EAAE,QAAQ,EAAiE,EAChF,QAAiC;IAEjC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,UAAU;YACb,OAAO,QAAQ,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACpD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,MAAM,YAAY,CAAC,MAAM,EAAE,MAAM,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YACvF,MAAM,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,WAAW,CAAC;YACpD,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC1B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,OAAO,QAAQ,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/loader/cache.d.ts
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { CacheEntry, type CacheEntryOptions, type Dependencies } from "vitecache";
|
|
2
|
-
import type {
|
|
2
|
+
import type { Derived } from "./level.js";
|
|
3
3
|
/** Persistent cache location. Generator packages are discovered from GLTS source provenance. */
|
|
4
4
|
export type LodCacheOptions = Pick<CacheEntryOptions, "basePath" | "root">;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* revealed, so vitecache rechecks those without loading the sources.
|
|
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.
|
|
8
10
|
*/
|
|
9
|
-
export declare function
|
|
10
|
-
/**
|
|
11
|
-
* A level payload saved apart from its index, addressed by the index's content: a valid index vouches for its payloads,
|
|
12
|
-
* and rebuilds write new ones rather than replacing those a live ladder or another build still reads.
|
|
13
|
-
*/
|
|
14
|
-
export declare function payloadEntry(index: string, level: number, options?: LodCacheOptions): CacheEntry;
|
|
11
|
+
export declare function ladderEntry(inputs: Dependencies, of: Derived | "shape", modules: Readonly<Record<string, string>>, options?: LodCacheOptions): CacheEntry;
|
|
15
12
|
export declare function sha256(bytes: Uint8Array): Promise<string>;
|
package/dist/loader/cache.js
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { CacheEntry } from "vitecache";
|
|
2
2
|
import { urlQuery } from "./url.js";
|
|
3
|
-
const version = "lod-levels@18";
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
7
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
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.
|
|
10
17
|
const queries = {};
|
|
11
18
|
for (const [name, dependency] of Object.entries(inputs)) {
|
|
12
19
|
const query = dependency.url === undefined ? "" : urlQuery(dependency.url);
|
|
@@ -19,38 +26,24 @@ export function indexEntry(inputs, levels, modules, options) {
|
|
|
19
26
|
version,
|
|
20
27
|
dependencies: {
|
|
21
28
|
...inputs,
|
|
22
|
-
"lod:
|
|
29
|
+
"lod:level": { value: of === "shape" ? { type: of } : parameters(of) },
|
|
23
30
|
"lod:modules": { value: modules },
|
|
24
31
|
"lod:queries": { value: queries },
|
|
25
|
-
// Only packages the app installs resolve from its root; this package's own dependencies are covered by
|
|
26
|
-
"lod:package": { package: "@drawcall/lod" },
|
|
32
|
+
// Only packages the app installs resolve from its root; this package's own dependencies are covered by `version` above.
|
|
27
33
|
"lod:three": { package: "three" },
|
|
28
34
|
},
|
|
29
35
|
});
|
|
30
36
|
}
|
|
31
|
-
/**
|
|
32
|
-
* A level payload saved apart from its index, addressed by the index's content: a valid index vouches for its payloads,
|
|
33
|
-
* and rebuilds write new ones rather than replacing those a live ladder or another build still reads.
|
|
34
|
-
*/
|
|
35
|
-
export function payloadEntry(index, level, options) {
|
|
36
|
-
return new CacheEntry({
|
|
37
|
-
basePath: options?.basePath,
|
|
38
|
-
root: options?.root,
|
|
39
|
-
version,
|
|
40
|
-
dependencies: { "lod:index": { value: index }, "lod:level": { value: level } },
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
37
|
export async function sha256(bytes) {
|
|
44
38
|
const hash = await crypto.subtle.digest("SHA-256", new Uint8Array(bytes));
|
|
45
39
|
return Array.from(new Uint8Array(hash), (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
46
40
|
}
|
|
47
|
-
/** What derives
|
|
41
|
+
/** What derives a level's content. Switch thresholds and impostor draw options apply at decode, so changing one reuses the cache. */
|
|
48
42
|
function parameters(level) {
|
|
49
43
|
switch (level.type) {
|
|
50
|
-
case "empty":
|
|
51
|
-
return { type: level.type };
|
|
52
44
|
case "simplify":
|
|
53
|
-
|
|
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" };
|
|
54
47
|
case "baked":
|
|
55
48
|
return {
|
|
56
49
|
type: level.type,
|
package/dist/loader/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/loader/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA6D,MAAM,WAAW,CAAC;AAElG,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKpC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/loader/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { Object3D } from "three/webgpu";
|
|
2
|
+
import { type DisposeOptions } from "../dispose.js";
|
|
3
|
+
import type { AssetDependencies } from "./dependencies.js";
|
|
4
|
+
/**
|
|
5
|
+
* What one ladder's loads share: the source loaded to measure or build the ladder with, handed to the first level load
|
|
6
|
+
* (the source level draws it, a build uses it, a cached level disposes it; onLevel has not changed it), the levels built
|
|
7
|
+
* with the ladder, each handed to its first load, and every level object loaded. Those are freed if describing the
|
|
8
|
+
* ladder fails, else when the last Lod holding the levels is disposed (see `hold`), which spends them.
|
|
9
|
+
*/
|
|
10
|
+
export declare class LodLoadContext {
|
|
11
|
+
private readonly load;
|
|
12
|
+
private readonly onLevel;
|
|
13
|
+
/** Level bytes built while describing the ladder, by index: a cached level is read again when it loads. */
|
|
14
|
+
private readonly built;
|
|
15
|
+
private spare;
|
|
16
|
+
/** Every level object loaded, and what freeing it frees: a simplified level draws with its source's materials. */
|
|
17
|
+
private readonly loaded;
|
|
18
|
+
/** How many Lods hold the levels, and whether the last has let go, which freed them. */
|
|
19
|
+
private holders;
|
|
20
|
+
private spent;
|
|
21
|
+
constructor(load: () => Promise<Loaded>, onLevel: ((object: Object3D, index: number) => void | Promise<void>) | undefined);
|
|
22
|
+
/** The spare source, loaded once. */
|
|
23
|
+
source(): Promise<Loaded>;
|
|
24
|
+
/** The spare source, for the first level load to take. */
|
|
25
|
+
take(): Loaded | undefined;
|
|
26
|
+
/** Hold the bytes of level `index`, built while describing the ladder, for its first load to take. */
|
|
27
|
+
setBuilt(index: number, bytes: Uint8Array): void;
|
|
28
|
+
/** The bytes of level `index` built while describing the ladder, once: undefined if none were, or once taken. */
|
|
29
|
+
takeBuilt(index: number): Uint8Array | undefined;
|
|
30
|
+
/** Apply onLevel to a level's arriving object, freeing it as `options` say if that fails. */
|
|
31
|
+
arrive(object: Object3D, index: number, options: DisposeOptions): Promise<Object3D>;
|
|
32
|
+
/** Describing the ladder failed: free what it loaded. */
|
|
33
|
+
fail(): void;
|
|
34
|
+
/**
|
|
35
|
+
* A Lod made from the levels holds them; the release it answers lets go, and the last frees what was loaded. Levels
|
|
36
|
+
* no Lod ever held are never freed. Freed levels are spent: a Lod made from them later throws.
|
|
37
|
+
*/
|
|
38
|
+
readonly hold: () => (() => void);
|
|
39
|
+
/** Free the spare source and every level object loaded with `dispose`. */
|
|
40
|
+
private free;
|
|
41
|
+
}
|
|
42
|
+
/** A loaded source and what loading it read. */
|
|
43
|
+
export interface Loaded {
|
|
44
|
+
source: Object3D;
|
|
45
|
+
dependencies: AssetDependencies;
|
|
46
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { disposeRejected, disposeTree } from "../dispose.js";
|
|
2
|
+
/**
|
|
3
|
+
* What one ladder's loads share: the source loaded to measure or build the ladder with, handed to the first level load
|
|
4
|
+
* (the source level draws it, a build uses it, a cached level disposes it; onLevel has not changed it), the levels built
|
|
5
|
+
* with the ladder, each handed to its first load, and every level object loaded. Those are freed if describing the
|
|
6
|
+
* ladder fails, else when the last Lod holding the levels is disposed (see `hold`), which spends them.
|
|
7
|
+
*/
|
|
8
|
+
export class LodLoadContext {
|
|
9
|
+
load;
|
|
10
|
+
onLevel;
|
|
11
|
+
/** Level bytes built while describing the ladder, by index: a cached level is read again when it loads. */
|
|
12
|
+
built = new Map();
|
|
13
|
+
spare;
|
|
14
|
+
/** Every level object loaded, and what freeing it frees: a simplified level draws with its source's materials. */
|
|
15
|
+
loaded = new Map();
|
|
16
|
+
/** How many Lods hold the levels, and whether the last has let go, which freed them. */
|
|
17
|
+
holders = 0;
|
|
18
|
+
spent = false;
|
|
19
|
+
constructor(load, onLevel) {
|
|
20
|
+
this.load = load;
|
|
21
|
+
this.onLevel = onLevel;
|
|
22
|
+
}
|
|
23
|
+
/** The spare source, loaded once. */
|
|
24
|
+
async source() {
|
|
25
|
+
this.spare ??= await this.load();
|
|
26
|
+
return this.spare;
|
|
27
|
+
}
|
|
28
|
+
/** The spare source, for the first level load to take. */
|
|
29
|
+
take() {
|
|
30
|
+
const taken = this.spare;
|
|
31
|
+
this.spare = undefined;
|
|
32
|
+
return taken;
|
|
33
|
+
}
|
|
34
|
+
/** Hold the bytes of level `index`, built while describing the ladder, for its first load to take. */
|
|
35
|
+
setBuilt(index, bytes) {
|
|
36
|
+
this.built.set(index, bytes);
|
|
37
|
+
}
|
|
38
|
+
/** The bytes of level `index` built while describing the ladder, once: undefined if none were, or once taken. */
|
|
39
|
+
takeBuilt(index) {
|
|
40
|
+
const bytes = this.built.get(index);
|
|
41
|
+
this.built.delete(index);
|
|
42
|
+
return bytes;
|
|
43
|
+
}
|
|
44
|
+
/** Apply onLevel to a level's arriving object, freeing it as `options` say if that fails. */
|
|
45
|
+
async arrive(object, index, options) {
|
|
46
|
+
try {
|
|
47
|
+
this.loaded.set(object, options);
|
|
48
|
+
await this.onLevel?.(object, index);
|
|
49
|
+
return object;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
this.loaded.delete(object);
|
|
53
|
+
disposeRejected(object, options);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Describing the ladder failed: free what it loaded. */
|
|
58
|
+
fail() {
|
|
59
|
+
this.free(disposeRejected);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A Lod made from the levels holds them; the release it answers lets go, and the last frees what was loaded. Levels
|
|
63
|
+
* no Lod ever held are never freed. Freed levels are spent: a Lod made from them later throws.
|
|
64
|
+
*/
|
|
65
|
+
hold = () => {
|
|
66
|
+
if (this.spent)
|
|
67
|
+
throw new Error("LodLoader: these levels were freed with the last Lod that held them; call loadAsync again");
|
|
68
|
+
this.holders++;
|
|
69
|
+
let held = true;
|
|
70
|
+
return () => {
|
|
71
|
+
if (!held)
|
|
72
|
+
return;
|
|
73
|
+
held = false;
|
|
74
|
+
if (--this.holders > 0)
|
|
75
|
+
return;
|
|
76
|
+
this.spent = true;
|
|
77
|
+
this.free(disposeTree);
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
/** Free the spare source and every level object loaded with `dispose`. */
|
|
81
|
+
free(dispose) {
|
|
82
|
+
const taken = this.take();
|
|
83
|
+
if (taken)
|
|
84
|
+
dispose(taken.source, { materials: true });
|
|
85
|
+
for (const [object, options] of this.loaded)
|
|
86
|
+
dispose(object, options);
|
|
87
|
+
this.loaded.clear();
|
|
88
|
+
this.built.clear();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/loader/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import type { LoadingManager, Object3D } from "three/webgpu";
|
|
2
2
|
import type { Dependencies, SavedDependencies } from "vitecache";
|
|
3
3
|
/** The requested assets, and the files and packages loading them revealed, for saving with the index built from them. */
|
|
4
|
-
export declare class
|
|
4
|
+
export declare class AssetDependencies {
|
|
5
5
|
private readonly manager;
|
|
6
6
|
readonly inputs: Dependencies;
|
|
7
7
|
private readonly resources;
|
|
8
|
-
/**
|
|
8
|
+
/** Whole: a GLTS source reports what it has observed so far, so it is read when saving. */
|
|
9
9
|
private readonly scripts;
|
|
10
10
|
constructor(urls: Readonly<Record<string, string>>, manager: LoadingManager);
|
|
11
11
|
capture(url: string, object: Object3D, result: unknown): void;
|
|
12
|
+
/** Also hold what `other`'s loads read. */
|
|
13
|
+
include(other: AssetDependencies): this;
|
|
12
14
|
/** The requested URLs, resolved as `inputs` holds them. */
|
|
13
15
|
get requested(): string[];
|
|
14
16
|
/**
|
|
@@ -16,7 +18,7 @@ export declare class Provenance {
|
|
|
16
18
|
* a CDN module fetched at runtime, which bundled moduleSources cannot vouch for, or a cross-origin resource, which
|
|
17
19
|
* vitecache cannot hash.
|
|
18
20
|
*/
|
|
19
|
-
|
|
21
|
+
saved(): {
|
|
20
22
|
dependencies: SavedDependencies;
|
|
21
23
|
} | {
|
|
22
24
|
reason: string;
|
|
@@ -2,11 +2,11 @@ import { isGLTSLoader, isGLTSScene } from "../three.js";
|
|
|
2
2
|
import { sha256 } from "./cache.js";
|
|
3
3
|
import { assetPath, isLocal, localURL, sourceRelativeURL, urlPath } from "./url.js";
|
|
4
4
|
/** The requested assets, and the files and packages loading them revealed, for saving with the index built from them. */
|
|
5
|
-
export class
|
|
5
|
+
export class AssetDependencies {
|
|
6
6
|
manager;
|
|
7
7
|
inputs;
|
|
8
8
|
resources = new Set();
|
|
9
|
-
/**
|
|
9
|
+
/** Whole: a GLTS source reports what it has observed so far, so it is read when saving. */
|
|
10
10
|
scripts = [];
|
|
11
11
|
constructor(urls, manager) {
|
|
12
12
|
this.manager = manager;
|
|
@@ -22,6 +22,13 @@ export class Provenance {
|
|
|
22
22
|
throw new Error(`LodLoader: "${url}" did not load as a GLTS scene`);
|
|
23
23
|
this.scripts.push(object.source);
|
|
24
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
|
+
}
|
|
25
32
|
/** The requested URLs, resolved as `inputs` holds them. */
|
|
26
33
|
get requested() {
|
|
27
34
|
return Object.values(this.inputs).flatMap(({ url }) => (url === undefined ? [] : [url]));
|
|
@@ -31,7 +38,7 @@ export class Provenance {
|
|
|
31
38
|
* a CDN module fetched at runtime, which bundled moduleSources cannot vouch for, or a cross-origin resource, which
|
|
32
39
|
* vitecache cannot hash.
|
|
33
40
|
*/
|
|
34
|
-
|
|
41
|
+
saved() {
|
|
35
42
|
if (this.scripts.some((source) => source.runtimeModules.length))
|
|
36
43
|
return { reason: "it imports CDN modules at runtime" };
|
|
37
44
|
const found = new Set(this.resources);
|
|
@@ -54,6 +61,7 @@ export class Provenance {
|
|
|
54
61
|
};
|
|
55
62
|
}
|
|
56
63
|
}
|
|
64
|
+
/** Each GLTS loader's moduleSources digest, hashed once: a side table keyed by the loaders' moduleSources, which the app owns. */
|
|
57
65
|
const digests = new WeakMap();
|
|
58
66
|
/**
|
|
59
67
|
* Digests of the bundled modules each input script's GLTS loader links, by input name. They are known before a source runs,
|
|
@@ -102,4 +110,4 @@ function gltfUrls(result, url) {
|
|
|
102
110
|
});
|
|
103
111
|
});
|
|
104
112
|
}
|
|
105
|
-
//# sourceMappingURL=
|
|
113
|
+
//# sourceMappingURL=dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/loader/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Loader, LoadingManager } from "three/webgpu";
|
|
2
|
+
import { type LodLevel } from "../levels/index.js";
|
|
3
|
+
import type { LodCacheOptions } from "./cache.js";
|
|
4
|
+
import { type LodRequest } from "./request.js";
|
|
5
|
+
/**
|
|
6
|
+
* Loads asset URLs through manager handlers, else with a GLTFLoader of its own, which decodes meshopt only: register
|
|
7
|
+
* a GLTFLoader configured with Draco or KTX2 decoders for models compressed with them, and a GLTSLoader for .glts
|
|
8
|
+
* sources.
|
|
9
|
+
*
|
|
10
|
+
* Impostor and interior bakes draw with a renderer of the loader's own, made at its first bake: `dispose` frees it.
|
|
11
|
+
*/
|
|
12
|
+
export declare class LodLoader extends Loader<LodLevel[], LodRequest> {
|
|
13
|
+
private readonly cacheOptions?;
|
|
14
|
+
private gltf;
|
|
15
|
+
/**
|
|
16
|
+
* The renderer this loader bakes with, made at its first bake. Its own, not the app's: a canvas the size of a bake
|
|
17
|
+
* frame would draw that frame over the whole target (see `bakeImpostor`).
|
|
18
|
+
*/
|
|
19
|
+
private renderer;
|
|
20
|
+
/** URLs whose builds this loader serves without saving, once it has warned why. */
|
|
21
|
+
private readonly uncached;
|
|
22
|
+
constructor(manager?: LoadingManager, cacheOptions?: LodCacheOptions | undefined);
|
|
23
|
+
load(request: LodRequest, onLoad: (levels: LodLevel[]) => void, _onProgress?: (event: ProgressEvent) => void, onError?: (error: unknown) => void): void;
|
|
24
|
+
/**
|
|
25
|
+
* Describes the ladder from the cache, else from its source, which the first level loaded then takes. Empty levels
|
|
26
|
+
* load with it, as does the source when it is the only drawable; other levels load when a camera needs them,
|
|
27
|
+
* including a coarse stand-in while its first detail arrives, and each derived level is cached on its own and built
|
|
28
|
+
* when first loaded. A level whose default threshold is measured from it is built with the ladder, as is every level
|
|
29
|
+
* in a `vite build` warmup.
|
|
30
|
+
*
|
|
31
|
+
* What the levels load is freed when the last Lod holding them is disposed (see `LodLevel.hold`), which spends them:
|
|
32
|
+
* a Lod made from them later throws, so call loadAsync again. Levels no Lod ever holds are never freed: they are
|
|
33
|
+
* yours until a Lod holds them.
|
|
34
|
+
*/
|
|
35
|
+
loadAsync(request: LodRequest): Promise<LodLevel[]>;
|
|
36
|
+
/** The source's shape from its entry, else measured from the source and saved. */
|
|
37
|
+
private shape;
|
|
38
|
+
/**
|
|
39
|
+
* A deferred level's bytes from its entry, else built from `spare`, the ladder's source, or from a source of its own:
|
|
40
|
+
* the source level's carries onLevel effects. Disposes `spare` either way.
|
|
41
|
+
*/
|
|
42
|
+
private levelBytes;
|
|
43
|
+
/**
|
|
44
|
+
* Build level `index` from `loaded`, and save it to `entry`, read before, when what it was built from can be validated
|
|
45
|
+
* later: what loading the source read, and what this build loads besides.
|
|
46
|
+
*/
|
|
47
|
+
private persist;
|
|
48
|
+
/** The renderer this loader bakes with, made at its first bake. */
|
|
49
|
+
private bakeRenderer;
|
|
50
|
+
/**
|
|
51
|
+
* Free the renderer this loader made for its bakes; a bake under way fails. Levels it loaded stay as they are, and a
|
|
52
|
+
* later bake makes a new renderer.
|
|
53
|
+
*/
|
|
54
|
+
dispose(): void;
|
|
55
|
+
/** Save `bytes` to `entry`, read before, when what they were built from can be validated later; warn once otherwise. */
|
|
56
|
+
private save;
|
|
57
|
+
/** Builds of `url` are served without saving from now on, after one warning naming why; a build warmup fails instead. */
|
|
58
|
+
private warnUncached;
|
|
59
|
+
/** The ladder's source, with what loading it read. */
|
|
60
|
+
private loadSource;
|
|
61
|
+
private loadAsset;
|
|
62
|
+
}
|