@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,29 @@
|
|
|
1
|
+
import type { RenderContext } from "./compile/contexts.js";
|
|
2
|
+
import type { CameraRequests } from "./requests.js";
|
|
3
|
+
/**
|
|
4
|
+
* A Lod's background compiles of its loaded levels, per render context: which levels each context's compile has
|
|
5
|
+
* started for, so that each compiles once per context, and the compiles still running.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ContextCompiles {
|
|
8
|
+
/** Compile the loaded levels of `bits` for `context`. */
|
|
9
|
+
private readonly run;
|
|
10
|
+
/** Called with what a compile throws. */
|
|
11
|
+
private readonly failed;
|
|
12
|
+
/** Per render context, the bits of the levels whose compile for it has started: a context dropped drops its bits. */
|
|
13
|
+
private readonly claimed;
|
|
14
|
+
/** The compiles running, each with the camera whose context it compiles for. */
|
|
15
|
+
private readonly runs;
|
|
16
|
+
constructor(
|
|
17
|
+
/** Compile the loaded levels of `bits` for `context`. */
|
|
18
|
+
run: (context: RenderContext, bits: number) => Promise<void>,
|
|
19
|
+
/** Called with what a compile throws. */
|
|
20
|
+
failed: (error: unknown) => void);
|
|
21
|
+
/** Mark the levels of `bits` as compiling for `context`, and answer those that were not yet. */
|
|
22
|
+
claim(context: RenderContext, bits: number): number;
|
|
23
|
+
/** Compile the loaded levels of `bits` for `context` in the background, once the render that asked for them has ended. */
|
|
24
|
+
compile(context: RenderContext, bits: number): void;
|
|
25
|
+
/** Whether a compile runs for a camera still rendering the Lod: one for a camera that stopped holds nothing up. */
|
|
26
|
+
running(requests: CameraRequests): boolean;
|
|
27
|
+
/** The compiles running, each settling once its compile has ended. */
|
|
28
|
+
tasks(): Iterable<Promise<void>>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { nextTask } from "../task.js";
|
|
2
|
+
/**
|
|
3
|
+
* A Lod's background compiles of its loaded levels, per render context: which levels each context's compile has
|
|
4
|
+
* started for, so that each compiles once per context, and the compiles still running.
|
|
5
|
+
*/
|
|
6
|
+
export class ContextCompiles {
|
|
7
|
+
run;
|
|
8
|
+
failed;
|
|
9
|
+
/** Per render context, the bits of the levels whose compile for it has started: a context dropped drops its bits. */
|
|
10
|
+
claimed = new WeakMap();
|
|
11
|
+
/** The compiles running, each with the camera whose context it compiles for. */
|
|
12
|
+
runs = new Map();
|
|
13
|
+
constructor(
|
|
14
|
+
/** Compile the loaded levels of `bits` for `context`. */
|
|
15
|
+
run,
|
|
16
|
+
/** Called with what a compile throws. */
|
|
17
|
+
failed) {
|
|
18
|
+
this.run = run;
|
|
19
|
+
this.failed = failed;
|
|
20
|
+
}
|
|
21
|
+
/** Mark the levels of `bits` as compiling for `context`, and answer those that were not yet. */
|
|
22
|
+
claim(context, bits) {
|
|
23
|
+
const claimed = this.claimed.get(context) ?? 0;
|
|
24
|
+
this.claimed.set(context, claimed | bits);
|
|
25
|
+
return bits & ~claimed;
|
|
26
|
+
}
|
|
27
|
+
/** Compile the loaded levels of `bits` for `context` in the background, once the render that asked for them has ended. */
|
|
28
|
+
compile(context, bits) {
|
|
29
|
+
if (bits === 0)
|
|
30
|
+
return;
|
|
31
|
+
// A render runs within one task: the next starts after it has ended.
|
|
32
|
+
const done = nextTask()
|
|
33
|
+
.then(() => this.run(context, bits))
|
|
34
|
+
.catch((error) => this.failed(error))
|
|
35
|
+
.finally(() => this.runs.delete(done));
|
|
36
|
+
this.runs.set(done, context.camera);
|
|
37
|
+
}
|
|
38
|
+
/** Whether a compile runs for a camera still rendering the Lod: one for a camera that stopped holds nothing up. */
|
|
39
|
+
running(requests) {
|
|
40
|
+
for (const camera of this.runs.values())
|
|
41
|
+
if (requests.rendering(camera))
|
|
42
|
+
return true;
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
/** The compiles running, each settling once its compile has ended. */
|
|
46
|
+
tasks() {
|
|
47
|
+
return this.runs.keys();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=compiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiles.js","sourceRoot":"","sources":["../../src/levels/compiles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;GAGG;AACH,MAAM,OAAO,eAAe;IAQP;IAEA;IATnB,qHAAqH;IACpG,OAAO,GAAG,IAAI,OAAO,EAAyB,CAAC;IAChE,gFAAgF;IAC/D,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEzD;IACE,yDAAyD;IACxC,GAA4D;IAC7E,yCAAyC;IACxB,MAAgC;QAFhC,QAAG,GAAH,GAAG,CAAyD;QAE5D,WAAM,GAAN,MAAM,CAA0B;IAChD,CAAC;IAEJ,gGAAgG;IAChG,KAAK,CAAC,OAAsB,EAAE,IAAY;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,0HAA0H;IAC1H,OAAO,CAAC,OAAsB,EAAE,IAAY;QAC1C,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO;QACvB,qEAAqE;QACrE,MAAM,IAAI,GAAG,QAAQ,EAAE;aACpB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aACnC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC7C,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,mHAAmH;IACnH,OAAO,CAAC,QAAwB;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { d } from "typegpu";
|
|
2
|
+
/** Share of each level's range over which its finer neighbour fades out. */
|
|
3
|
+
export declare const FADE = 0.1;
|
|
4
|
+
/**
|
|
5
|
+
* The most levels a Lod or InstancedLod has. WGSL has no arrays of a size given at run time, so levelsToDraw reads
|
|
6
|
+
* maxPixels from an array of this size, and the loaded sets are bits of one u32. The GPU side passes the array as two
|
|
7
|
+
* vec4s, `low` and `high` (see `levelsToDrawNode`), which hold eight.
|
|
8
|
+
*/
|
|
9
|
+
export declare const MAX_LEVELS = 8;
|
|
10
|
+
/**
|
|
11
|
+
* The largest f32, which stands for any height levelsToDraw reads, as the maxPixels of level 0's Infinity: an f32
|
|
12
|
+
* holds Infinity, but WGSL has no literal for it and assumes finite math, so TypeGPU refuses to pass it.
|
|
13
|
+
*/
|
|
14
|
+
export declare const ANY_HEIGHT = 3.4028234663852886e+38;
|
|
15
|
+
/**
|
|
16
|
+
* The levels as levelsToDraw reads them, with the draw's settings: `maxPixels` per level, `empty` the bits of the
|
|
17
|
+
* levels that draw nothing, `coarsest` the coarsest level that draws something (level 0 if none does), `forced` the
|
|
18
|
+
* level every draw shows or -1, and `fades` 1 where levels fade (not in an orthographic camera or with a forced level),
|
|
19
|
+
* else 0.
|
|
20
|
+
*/
|
|
21
|
+
export declare const DrawLevels: d.WgslStruct<{
|
|
22
|
+
count: d.I32;
|
|
23
|
+
maxPixels: d.WgslArray<d.F32>;
|
|
24
|
+
empty: d.U32;
|
|
25
|
+
coarsest: d.I32;
|
|
26
|
+
forced: d.I32;
|
|
27
|
+
fades: d.U32;
|
|
28
|
+
}>;
|
|
29
|
+
/** Whether bit `level` of `bits` is set: the levels of a set, such as the loaded ones, are bits of one number. */
|
|
30
|
+
export declare const has: (bits: number, level: number) => boolean;
|
|
31
|
+
/** `levels` as levelsToDraw reads them, on the CPU and in the GPU's uniforms; `forced` a forced level or null. */
|
|
32
|
+
export declare function drawLevels(levels: readonly {
|
|
33
|
+
maxPixels: number;
|
|
34
|
+
}[], empty: number, forced: number | null, fades: boolean): d.Infer<typeof DrawLevels>;
|
|
35
|
+
/**
|
|
36
|
+
* What one object draws: `level` with the signed fade `fade`, and `finer` with `-fade` (see fade.ts), so that each
|
|
37
|
+
* pixel is drawn by exactly one of them; with `fade` 0 only `level` draws. `level` -1 draws nothing.
|
|
38
|
+
*/
|
|
39
|
+
export declare const Draw: d.WgslStruct<{
|
|
40
|
+
level: d.I32;
|
|
41
|
+
finer: d.I32;
|
|
42
|
+
fade: d.F32;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* The level that draws most of an object's pixels in `draw`, or null for none. `level` keeps 1 - fade of them and
|
|
46
|
+
* `finer` fade (see fade.ts), so `finer` once fade is above one half; at one half exactly, `level`.
|
|
47
|
+
*/
|
|
48
|
+
export declare function drawnLevel({ level, finer, fade }: d.Infer<typeof Draw>): number | null;
|
|
49
|
+
/** The level a `height` px tall object is drawn at: the last one whose maxPixels it fits; level 0 fits any height. */
|
|
50
|
+
export declare const levelForHeight: import("typegpu").TgpuFn<(height: d.F32, levels: d.WgslStruct<{
|
|
51
|
+
count: d.I32;
|
|
52
|
+
maxPixels: d.WgslArray<d.F32>;
|
|
53
|
+
empty: d.U32;
|
|
54
|
+
coarsest: d.I32;
|
|
55
|
+
forced: d.I32;
|
|
56
|
+
fades: d.U32;
|
|
57
|
+
}>) => d.I32>;
|
|
58
|
+
/** `level` once loaded, else the nearest loaded coarser level that draws something, else -1: never a finer one. */
|
|
59
|
+
export declare const loadedOrCoarser: import("typegpu").TgpuFn<(level: d.I32, levels: d.WgslStruct<{
|
|
60
|
+
count: d.I32;
|
|
61
|
+
maxPixels: d.WgslArray<d.F32>;
|
|
62
|
+
empty: d.U32;
|
|
63
|
+
coarsest: d.I32;
|
|
64
|
+
forced: d.I32;
|
|
65
|
+
fades: d.U32;
|
|
66
|
+
}>, loaded: d.U32) => d.I32>;
|
|
67
|
+
/**
|
|
68
|
+
* What an object `height` px tall draws: its level by height (or `levels.forced`), and inside the top FADE of that
|
|
69
|
+
* level's range its finer neighbour too, each as `loaded` has them (see `loadedOrCoarser`). Nothing draws until the
|
|
70
|
+
* coarsest level that draws something has loaded.
|
|
71
|
+
*
|
|
72
|
+
* While a level arrives, `progress` runs from 0 to 1 over the arrival (1 when none is under way) from what the levels
|
|
73
|
+
* of `before` drew to what those of `loaded` draw, with two draws only: the old height fade collapses onto one level,
|
|
74
|
+
* that level hands its pixels to the new one, and the new height fade opens. What arrives where nothing drew draws at
|
|
75
|
+
* once.
|
|
76
|
+
*/
|
|
77
|
+
export declare const levelsToDraw: import("typegpu").TgpuFn<(height: d.F32, levels: d.WgslStruct<{
|
|
78
|
+
count: d.I32;
|
|
79
|
+
maxPixels: d.WgslArray<d.F32>;
|
|
80
|
+
empty: d.U32;
|
|
81
|
+
coarsest: d.I32;
|
|
82
|
+
forced: d.I32;
|
|
83
|
+
fades: d.U32;
|
|
84
|
+
}>, loaded: d.U32, before: d.U32, progress: d.F32) => d.WgslStruct<{
|
|
85
|
+
level: d.I32;
|
|
86
|
+
finer: d.I32;
|
|
87
|
+
fade: d.F32;
|
|
88
|
+
}>>;
|
|
89
|
+
/** drawnOf on the GPU, from its inputs as TSL nodes. */
|
|
90
|
+
export declare const levelsToDrawNode: (inputs: {
|
|
91
|
+
height: import("three/webgpu").Node<"float">;
|
|
92
|
+
count: import("three/webgpu").Node<"int">;
|
|
93
|
+
low: import("three/webgpu").Node<"vec4">;
|
|
94
|
+
high: import("three/webgpu").Node<"vec4">;
|
|
95
|
+
empty: import("three/webgpu").Node<"uint">;
|
|
96
|
+
coarsest: import("three/webgpu").Node<"int">;
|
|
97
|
+
forced: import("three/webgpu").Node<"int">;
|
|
98
|
+
fades: import("three/webgpu").Node<"uint">;
|
|
99
|
+
loaded: import("three/webgpu").Node<"uint">;
|
|
100
|
+
before: import("three/webgpu").Node<"uint">;
|
|
101
|
+
progress: import("three/webgpu").Node<"float">;
|
|
102
|
+
}) => import("three/webgpu").Node<"vec3">;
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
import { d, std, tgpu } from "typegpu";
|
|
2
|
+
import { toTsl } from "../typegpu.js";
|
|
3
|
+
// Which levels one object draws at a height, written once: Lod calls levelsToDraw as plain JS, InstancedLod runs the
|
|
4
|
+
// same function per instance on the GPU, resolved into WGSL by TypeGPU.
|
|
5
|
+
/** Share of each level's range over which its finer neighbour fades out. */
|
|
6
|
+
export const FADE = 0.1;
|
|
7
|
+
/**
|
|
8
|
+
* The most levels a Lod or InstancedLod has. WGSL has no arrays of a size given at run time, so levelsToDraw reads
|
|
9
|
+
* maxPixels from an array of this size, and the loaded sets are bits of one u32. The GPU side passes the array as two
|
|
10
|
+
* vec4s, `low` and `high` (see `levelsToDrawNode`), which hold eight.
|
|
11
|
+
*/
|
|
12
|
+
export const MAX_LEVELS = 8;
|
|
13
|
+
/**
|
|
14
|
+
* The largest f32, which stands for any height levelsToDraw reads, as the maxPixels of level 0's Infinity: an f32
|
|
15
|
+
* holds Infinity, but WGSL has no literal for it and assumes finite math, so TypeGPU refuses to pass it.
|
|
16
|
+
*/
|
|
17
|
+
export const ANY_HEIGHT = 3.4028234663852886e38;
|
|
18
|
+
/**
|
|
19
|
+
* The levels as levelsToDraw reads them, with the draw's settings: `maxPixels` per level, `empty` the bits of the
|
|
20
|
+
* levels that draw nothing, `coarsest` the coarsest level that draws something (level 0 if none does), `forced` the
|
|
21
|
+
* level every draw shows or -1, and `fades` 1 where levels fade (not in an orthographic camera or with a forced level),
|
|
22
|
+
* else 0.
|
|
23
|
+
*/
|
|
24
|
+
export const DrawLevels = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(d.struct({
|
|
25
|
+
count: d.i32,
|
|
26
|
+
maxPixels: d.arrayOf(d.f32, MAX_LEVELS),
|
|
27
|
+
empty: d.u32,
|
|
28
|
+
coarsest: d.i32,
|
|
29
|
+
forced: d.i32,
|
|
30
|
+
fades: d.u32
|
|
31
|
+
}), "DrawLevels");
|
|
32
|
+
/** Whether bit `level` of `bits` is set: the levels of a set, such as the loaded ones, are bits of one number. */
|
|
33
|
+
export const has = (bits, level) => (bits >>> level & 1) === 1;
|
|
34
|
+
/** `levels` as levelsToDraw reads them, on the CPU and in the GPU's uniforms; `forced` a forced level or null. */
|
|
35
|
+
export function drawLevels(levels, empty, forced, fades) {
|
|
36
|
+
const maxPixels = Array.from({
|
|
37
|
+
length: MAX_LEVELS
|
|
38
|
+
}, (_, i) => Math.min(levels[i]?.maxPixels ?? 0, ANY_HEIGHT));
|
|
39
|
+
let coarsest = 0;
|
|
40
|
+
for (let i = 1; i < levels.length; i++) if (!has(empty, i)) coarsest = i;
|
|
41
|
+
return {
|
|
42
|
+
count: levels.length,
|
|
43
|
+
maxPixels,
|
|
44
|
+
empty,
|
|
45
|
+
coarsest,
|
|
46
|
+
forced: forced ?? -1,
|
|
47
|
+
fades: forced === null && fades ? 1 : 0
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* What one object draws: `level` with the signed fade `fade`, and `finer` with `-fade` (see fade.ts), so that each
|
|
52
|
+
* pixel is drawn by exactly one of them; with `fade` 0 only `level` draws. `level` -1 draws nothing.
|
|
53
|
+
*/
|
|
54
|
+
export const Draw = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(d.struct({
|
|
55
|
+
level: d.i32,
|
|
56
|
+
finer: d.i32,
|
|
57
|
+
fade: d.f32
|
|
58
|
+
}), "Draw");
|
|
59
|
+
/**
|
|
60
|
+
* The level that draws most of an object's pixels in `draw`, or null for none. `level` keeps 1 - fade of them and
|
|
61
|
+
* `finer` fade (see fade.ts), so `finer` once fade is above one half; at one half exactly, `level`.
|
|
62
|
+
*/
|
|
63
|
+
export function drawnLevel({
|
|
64
|
+
level,
|
|
65
|
+
finer,
|
|
66
|
+
fade
|
|
67
|
+
}) {
|
|
68
|
+
if (level < 0) return null;
|
|
69
|
+
return fade > 0.5 ? finer : level;
|
|
70
|
+
}
|
|
71
|
+
/** The GPU twin of `has` above, in code TypeGPU resolves: whether bit `index` of `bits` is set. */
|
|
72
|
+
const gpuHas = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.u32, d.i32], d.bool)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (bits, index) => {
|
|
73
|
+
"use gpu";
|
|
74
|
+
|
|
75
|
+
return (bits >>> d.u32(index) & 1) === 1;
|
|
76
|
+
}, {
|
|
77
|
+
v: 2,
|
|
78
|
+
name: undefined,
|
|
79
|
+
ast: {
|
|
80
|
+
params: [{
|
|
81
|
+
type: "i",
|
|
82
|
+
name: "bits"
|
|
83
|
+
}, {
|
|
84
|
+
type: "i",
|
|
85
|
+
name: "index"
|
|
86
|
+
}],
|
|
87
|
+
body: [0, [[10, [1, [1, [1, "bits", ">>>", [6, "d.u32", ["index"]]], "&", [5, "1"]], "===", [5, "1"]]]]]
|
|
88
|
+
},
|
|
89
|
+
externals: {
|
|
90
|
+
"d.u32": () => d.u32
|
|
91
|
+
}
|
|
92
|
+
}) && $.f)({})), "gpuHas");
|
|
93
|
+
/**
|
|
94
|
+
* Level `level`'s maxPixels. The array is walked rather than indexed: TypeScript types an index as possibly
|
|
95
|
+
* undefined, and code TypeGPU resolves cannot narrow it.
|
|
96
|
+
*/
|
|
97
|
+
const maxPixelsOf = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([DrawLevels, d.i32], d.f32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (levels, level) => {
|
|
98
|
+
"use gpu";
|
|
99
|
+
|
|
100
|
+
let found = d.f32(0);
|
|
101
|
+
let i = d.i32(0);
|
|
102
|
+
for (const maxPixels of levels.maxPixels) {
|
|
103
|
+
if (i === level) found = maxPixels;
|
|
104
|
+
i = __tsover_add(i, 1);
|
|
105
|
+
}
|
|
106
|
+
return found;
|
|
107
|
+
}, {
|
|
108
|
+
v: 2,
|
|
109
|
+
name: undefined,
|
|
110
|
+
ast: {
|
|
111
|
+
params: [{
|
|
112
|
+
type: "i",
|
|
113
|
+
name: "levels"
|
|
114
|
+
}, {
|
|
115
|
+
type: "i",
|
|
116
|
+
name: "level"
|
|
117
|
+
}],
|
|
118
|
+
body: [0, [[12, "found", [6, "d.f32", [[5, "0"]]]], [12, "i", [6, "d.i32", [[5, "0"]]]], [18, [13, "maxPixels"], [7, "levels", "maxPixels"], [0, [[11, [1, "i", "===", "level"], [2, "found", "=", "maxPixels"]], [2, "i", "+=", [5, "1"]]]]], [10, "found"]]]
|
|
119
|
+
},
|
|
120
|
+
externals: {
|
|
121
|
+
"d.f32": () => d.f32,
|
|
122
|
+
"d.i32": () => d.i32
|
|
123
|
+
}
|
|
124
|
+
}) && $.f)({})), "maxPixelsOf");
|
|
125
|
+
/** The level a `height` px tall object is drawn at: the last one whose maxPixels it fits; level 0 fits any height. */
|
|
126
|
+
export const levelForHeight = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.f32, DrawLevels], d.i32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (height, levels) => {
|
|
127
|
+
"use gpu";
|
|
128
|
+
|
|
129
|
+
let level = d.i32(0);
|
|
130
|
+
let i = d.i32(0);
|
|
131
|
+
for (const maxPixels of levels.maxPixels) {
|
|
132
|
+
if (i > 0 && i < levels.count && height <= maxPixels) level = i;
|
|
133
|
+
i = __tsover_add(i, 1);
|
|
134
|
+
}
|
|
135
|
+
return level;
|
|
136
|
+
}, {
|
|
137
|
+
v: 2,
|
|
138
|
+
name: undefined,
|
|
139
|
+
ast: {
|
|
140
|
+
params: [{
|
|
141
|
+
type: "i",
|
|
142
|
+
name: "height"
|
|
143
|
+
}, {
|
|
144
|
+
type: "i",
|
|
145
|
+
name: "levels"
|
|
146
|
+
}],
|
|
147
|
+
body: [0, [[12, "level", [6, "d.i32", [[5, "0"]]]], [12, "i", [6, "d.i32", [[5, "0"]]]], [18, [13, "maxPixels"], [7, "levels", "maxPixels"], [0, [[11, [3, [3, [1, "i", ">", [5, "0"]], "&&", [1, "i", "<", [7, "levels", "count"]]], "&&", [1, "height", "<=", "maxPixels"]], [2, "level", "=", "i"]], [2, "i", "+=", [5, "1"]]]]], [10, "level"]]]
|
|
148
|
+
},
|
|
149
|
+
externals: {
|
|
150
|
+
"d.i32": () => d.i32
|
|
151
|
+
}
|
|
152
|
+
}) && $.f)({})), "levelForHeight");
|
|
153
|
+
/** `level` once loaded, else the nearest loaded coarser level that draws something, else -1: never a finer one. */
|
|
154
|
+
export const loadedOrCoarser = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.i32, DrawLevels, d.u32], d.i32)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (level, levels, loaded) => {
|
|
155
|
+
"use gpu";
|
|
156
|
+
|
|
157
|
+
if (gpuHas(loaded, level)) return level;
|
|
158
|
+
for (let i = __tsover_add(level, 1); i < levels.count; i++) {
|
|
159
|
+
if (gpuHas(loaded, i) && !gpuHas(levels.empty, i)) return i;
|
|
160
|
+
}
|
|
161
|
+
return -1;
|
|
162
|
+
}, {
|
|
163
|
+
v: 2,
|
|
164
|
+
name: undefined,
|
|
165
|
+
ast: {
|
|
166
|
+
params: [{
|
|
167
|
+
type: "i",
|
|
168
|
+
name: "level"
|
|
169
|
+
}, {
|
|
170
|
+
type: "i",
|
|
171
|
+
name: "levels"
|
|
172
|
+
}, {
|
|
173
|
+
type: "i",
|
|
174
|
+
name: "loaded"
|
|
175
|
+
}],
|
|
176
|
+
body: [0, [[11, [6, "gpuHas", ["loaded", "level"]], [10, "level"]], [14, [12, "i", [1, "level", "+", [5, "1"]]], [1, "i", "<", [7, "levels", "count"]], [102, "++", "i"], [0, [[11, [3, [6, "gpuHas", ["loaded", "i"]], "&&", [4, "!", [6, "gpuHas", [[7, "levels", "empty"], "i"]]]], [10, "i"]]]]], [10, [4, "-", [5, "1"]]]]]
|
|
177
|
+
},
|
|
178
|
+
externals: {
|
|
179
|
+
"gpuHas": () => gpuHas
|
|
180
|
+
}
|
|
181
|
+
}) && $.f)({})), "loadedOrCoarser");
|
|
182
|
+
/** What an object `height` px tall draws once the levels of `loaded` are loaded, with no arrival under way. */
|
|
183
|
+
const settled = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.f32, DrawLevels, d.u32], Draw)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (height, levels, loaded) => {
|
|
184
|
+
"use gpu";
|
|
185
|
+
|
|
186
|
+
// Nothing draws before the coarsest level that draws something: an object never vanishes as its camera backs away.
|
|
187
|
+
if (!gpuHas(loaded, levels.coarsest)) return Draw({
|
|
188
|
+
level: -1,
|
|
189
|
+
finer: -1,
|
|
190
|
+
fade: 0
|
|
191
|
+
});
|
|
192
|
+
let chosen = levels.forced;
|
|
193
|
+
let fade = d.f32(0);
|
|
194
|
+
if (chosen < 0) {
|
|
195
|
+
chosen = levelForHeight(height, levels);
|
|
196
|
+
if (levels.fades === 1 && chosen > 0) {
|
|
197
|
+
const top = maxPixelsOf(levels, chosen);
|
|
198
|
+
fade = std.smoothstep(__tsover_mul(top, __tsover_sub(1, FADE)), top, height);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const level = loadedOrCoarser(chosen, levels, loaded);
|
|
202
|
+
if (level < 0) return Draw({
|
|
203
|
+
level: -1,
|
|
204
|
+
finer: -1,
|
|
205
|
+
fade: 0
|
|
206
|
+
});
|
|
207
|
+
let finer = level;
|
|
208
|
+
if (fade > 0 && gpuHas(loaded, __tsover_sub(chosen, 1))) finer = __tsover_sub(chosen, 1);
|
|
209
|
+
if (finer === level) fade = 0;
|
|
210
|
+
return Draw({
|
|
211
|
+
level,
|
|
212
|
+
finer,
|
|
213
|
+
fade
|
|
214
|
+
});
|
|
215
|
+
}, {
|
|
216
|
+
v: 2,
|
|
217
|
+
name: undefined,
|
|
218
|
+
ast: {
|
|
219
|
+
params: [{
|
|
220
|
+
type: "i",
|
|
221
|
+
name: "height"
|
|
222
|
+
}, {
|
|
223
|
+
type: "i",
|
|
224
|
+
name: "levels"
|
|
225
|
+
}, {
|
|
226
|
+
type: "i",
|
|
227
|
+
name: "loaded"
|
|
228
|
+
}],
|
|
229
|
+
body: [0, [[11, [4, "!", [6, "gpuHas", ["loaded", [7, "levels", "coarsest"]]]], [10, [6, "Draw", [[104, {
|
|
230
|
+
level: [4, "-", [5, "1"]],
|
|
231
|
+
finer: [4, "-", [5, "1"]],
|
|
232
|
+
fade: [5, "0"]
|
|
233
|
+
}]]]]], [12, "chosen", [7, "levels", "forced"]], [12, "fade", [6, "d.f32", [[5, "0"]]]], [11, [1, "chosen", "<", [5, "0"]], [0, [[2, "chosen", "=", [6, "levelForHeight", ["height", "levels"]]], [11, [3, [1, [7, "levels", "fades"], "===", [5, "1"]], "&&", [1, "chosen", ">", [5, "0"]]], [0, [[13, "top", [6, "maxPixelsOf", ["levels", "chosen"]]], [2, "fade", "=", [6, "std.smoothstep", [[1, "top", "*", [1, [5, "1"], "-", "FADE"]], "top", "height"]]]]]]]]], [13, "level", [6, "loadedOrCoarser", ["chosen", "levels", "loaded"]]], [11, [1, "level", "<", [5, "0"]], [10, [6, "Draw", [[104, {
|
|
234
|
+
level: [4, "-", [5, "1"]],
|
|
235
|
+
finer: [4, "-", [5, "1"]],
|
|
236
|
+
fade: [5, "0"]
|
|
237
|
+
}]]]]], [12, "finer", "level"], [11, [3, [1, "fade", ">", [5, "0"]], "&&", [6, "gpuHas", ["loaded", [1, "chosen", "-", [5, "1"]]]]], [2, "finer", "=", [1, "chosen", "-", [5, "1"]]]], [11, [1, "finer", "===", "level"], [2, "fade", "=", [5, "0"]]], [10, [6, "Draw", [[104, {
|
|
238
|
+
level: "level",
|
|
239
|
+
finer: "finer",
|
|
240
|
+
fade: "fade"
|
|
241
|
+
}]]]]]]
|
|
242
|
+
},
|
|
243
|
+
externals: {
|
|
244
|
+
"gpuHas": () => gpuHas,
|
|
245
|
+
"Draw": () => Draw,
|
|
246
|
+
"d.f32": () => d.f32,
|
|
247
|
+
"levelForHeight": () => levelForHeight,
|
|
248
|
+
"maxPixelsOf": () => maxPixelsOf,
|
|
249
|
+
"std.smoothstep": () => std.smoothstep,
|
|
250
|
+
"FADE": () => FADE,
|
|
251
|
+
"loadedOrCoarser": () => loadedOrCoarser
|
|
252
|
+
}
|
|
253
|
+
}) && $.f)({})), "settled");
|
|
254
|
+
/**
|
|
255
|
+
* What an object `height` px tall draws: its level by height (or `levels.forced`), and inside the top FADE of that
|
|
256
|
+
* level's range its finer neighbour too, each as `loaded` has them (see `loadedOrCoarser`). Nothing draws until the
|
|
257
|
+
* coarsest level that draws something has loaded.
|
|
258
|
+
*
|
|
259
|
+
* While a level arrives, `progress` runs from 0 to 1 over the arrival (1 when none is under way) from what the levels
|
|
260
|
+
* of `before` drew to what those of `loaded` draw, with two draws only: the old height fade collapses onto one level,
|
|
261
|
+
* that level hands its pixels to the new one, and the new height fade opens. What arrives where nothing drew draws at
|
|
262
|
+
* once.
|
|
263
|
+
*/
|
|
264
|
+
export const levelsToDraw = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.f32, DrawLevels, d.u32, d.u32, d.f32], Draw)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (height, levels, loaded, before, progress) => {
|
|
265
|
+
"use gpu";
|
|
266
|
+
|
|
267
|
+
const after = settled(height, levels, loaded);
|
|
268
|
+
if (progress >= 1) return after;
|
|
269
|
+
const from = settled(height, levels, before);
|
|
270
|
+
if (from.level < 0 || from.level === after.level && from.finer === after.finer) return after;
|
|
271
|
+
let level = after.level;
|
|
272
|
+
let finer = after.finer;
|
|
273
|
+
let fade = d.f32(0);
|
|
274
|
+
if (progress < __tsover_div(1, 3)) {
|
|
275
|
+
level = from.level;
|
|
276
|
+
finer = from.finer;
|
|
277
|
+
if (from.fade > 0) fade = __tsover_add(from.fade, __tsover_mul(__tsover_mul(__tsover_sub(1, from.fade), progress), 3));
|
|
278
|
+
} else if (progress < __tsover_div(2, 3)) {
|
|
279
|
+
level = std.select(after.level, after.finer, after.fade > 0);
|
|
280
|
+
finer = std.select(from.level, from.finer, from.fade > 0);
|
|
281
|
+
fade = __tsover_sub(1, __tsover_mul(__tsover_sub(progress, __tsover_div(1, 3)), 3));
|
|
282
|
+
} else if (after.fade > 0) {
|
|
283
|
+
fade = __tsover_sub(1, __tsover_mul(__tsover_mul(__tsover_sub(1, after.fade), __tsover_sub(progress, __tsover_div(2, 3))), 3));
|
|
284
|
+
}
|
|
285
|
+
if (level === finer) fade = 0;
|
|
286
|
+
return Draw({
|
|
287
|
+
level,
|
|
288
|
+
finer,
|
|
289
|
+
fade
|
|
290
|
+
});
|
|
291
|
+
}, {
|
|
292
|
+
v: 2,
|
|
293
|
+
name: undefined,
|
|
294
|
+
ast: {
|
|
295
|
+
params: [{
|
|
296
|
+
type: "i",
|
|
297
|
+
name: "height"
|
|
298
|
+
}, {
|
|
299
|
+
type: "i",
|
|
300
|
+
name: "levels"
|
|
301
|
+
}, {
|
|
302
|
+
type: "i",
|
|
303
|
+
name: "loaded"
|
|
304
|
+
}, {
|
|
305
|
+
type: "i",
|
|
306
|
+
name: "before"
|
|
307
|
+
}, {
|
|
308
|
+
type: "i",
|
|
309
|
+
name: "progress"
|
|
310
|
+
}],
|
|
311
|
+
body: [0, [[13, "after", [6, "settled", ["height", "levels", "loaded"]]], [11, [1, "progress", ">=", [5, "1"]], [10, "after"]], [13, "from", [6, "settled", ["height", "levels", "before"]]], [11, [3, [1, [7, "from", "level"], "<", [5, "0"]], "||", [3, [1, [7, "from", "level"], "===", [7, "after", "level"]], "&&", [1, [7, "from", "finer"], "===", [7, "after", "finer"]]]], [10, "after"]], [12, "level", [7, "after", "level"]], [12, "finer", [7, "after", "finer"]], [12, "fade", [6, "d.f32", [[5, "0"]]]], [11, [1, "progress", "<", [1, [5, "1"], "/", [5, "3"]]], [0, [[2, "level", "=", [7, "from", "level"]], [2, "finer", "=", [7, "from", "finer"]], [11, [1, [7, "from", "fade"], ">", [5, "0"]], [2, "fade", "=", [1, [7, "from", "fade"], "+", [1, [1, [1, [5, "1"], "-", [7, "from", "fade"]], "*", "progress"], "*", [5, "3"]]]]]]], [11, [1, "progress", "<", [1, [5, "2"], "/", [5, "3"]]], [0, [[2, "level", "=", [6, "std.select", [[7, "after", "level"], [7, "after", "finer"], [1, [7, "after", "fade"], ">", [5, "0"]]]]], [2, "finer", "=", [6, "std.select", [[7, "from", "level"], [7, "from", "finer"], [1, [7, "from", "fade"], ">", [5, "0"]]]]], [2, "fade", "=", [1, [5, "1"], "-", [1, [1, "progress", "-", [1, [5, "1"], "/", [5, "3"]]], "*", [5, "3"]]]]]], [11, [1, [7, "after", "fade"], ">", [5, "0"]], [0, [[2, "fade", "=", [1, [5, "1"], "-", [1, [1, [1, [5, "1"], "-", [7, "after", "fade"]], "*", [1, "progress", "-", [1, [5, "2"], "/", [5, "3"]]]], "*", [5, "3"]]]]]]]]], [11, [1, "level", "===", "finer"], [2, "fade", "=", [5, "0"]]], [10, [6, "Draw", [[104, {
|
|
312
|
+
level: "level",
|
|
313
|
+
finer: "finer",
|
|
314
|
+
fade: "fade"
|
|
315
|
+
}]]]]]]
|
|
316
|
+
},
|
|
317
|
+
externals: {
|
|
318
|
+
"settled": () => settled,
|
|
319
|
+
"d.f32": () => d.f32,
|
|
320
|
+
"std.select": () => std.select,
|
|
321
|
+
"Draw": () => Draw
|
|
322
|
+
}
|
|
323
|
+
}) && $.f)({})), "levelsToDraw");
|
|
324
|
+
// drawnOf passes maxPixels as two vec4s, `low` and `high`.
|
|
325
|
+
if (MAX_LEVELS !== 8) throw new Error("Lod: levelsToDraw's WGSL passes maxPixels as two vec4s: MAX_LEVELS must be 8");
|
|
326
|
+
/**
|
|
327
|
+
* levelsToDraw of the levels as `drawLevels` encodes them, with `low` and `high` holding maxPixels of levels 0 to 3 and
|
|
328
|
+
* 4 to 7: a vec3 of the level, the finer level (as floats) and the fade.
|
|
329
|
+
*/
|
|
330
|
+
const drawnOf = /*#__PURE__*/(globalThis.__TYPEGPU_AUTONAME__ ?? (a => a))(tgpu.fn([d.f32, d.i32, d.vec4f, d.vec4f, d.u32, d.i32, d.i32, d.u32, d.u32, d.u32, d.f32], d.vec3f)(/*#__PURE__*/($ => (globalThis.__TYPEGPU_META__ ??= new WeakMap()).set($.f = (height, count, low, high, empty, coarsest, forced, fades, loaded, before, progress) => {
|
|
331
|
+
"use gpu";
|
|
332
|
+
|
|
333
|
+
const maxPixels = d.arrayOf(d.f32, MAX_LEVELS)([low.x, low.y, low.z, low.w, high.x, high.y, high.z, high.w]);
|
|
334
|
+
const drawn = levelsToDraw(height, DrawLevels({
|
|
335
|
+
count,
|
|
336
|
+
maxPixels,
|
|
337
|
+
empty,
|
|
338
|
+
coarsest,
|
|
339
|
+
forced,
|
|
340
|
+
fades
|
|
341
|
+
}), loaded, before, progress);
|
|
342
|
+
return d.vec3f(d.f32(drawn.level), d.f32(drawn.finer), drawn.fade);
|
|
343
|
+
}, {
|
|
344
|
+
v: 2,
|
|
345
|
+
name: undefined,
|
|
346
|
+
ast: {
|
|
347
|
+
params: [{
|
|
348
|
+
type: "i",
|
|
349
|
+
name: "height"
|
|
350
|
+
}, {
|
|
351
|
+
type: "i",
|
|
352
|
+
name: "count"
|
|
353
|
+
}, {
|
|
354
|
+
type: "i",
|
|
355
|
+
name: "low"
|
|
356
|
+
}, {
|
|
357
|
+
type: "i",
|
|
358
|
+
name: "high"
|
|
359
|
+
}, {
|
|
360
|
+
type: "i",
|
|
361
|
+
name: "empty"
|
|
362
|
+
}, {
|
|
363
|
+
type: "i",
|
|
364
|
+
name: "coarsest"
|
|
365
|
+
}, {
|
|
366
|
+
type: "i",
|
|
367
|
+
name: "forced"
|
|
368
|
+
}, {
|
|
369
|
+
type: "i",
|
|
370
|
+
name: "fades"
|
|
371
|
+
}, {
|
|
372
|
+
type: "i",
|
|
373
|
+
name: "loaded"
|
|
374
|
+
}, {
|
|
375
|
+
type: "i",
|
|
376
|
+
name: "before"
|
|
377
|
+
}, {
|
|
378
|
+
type: "i",
|
|
379
|
+
name: "progress"
|
|
380
|
+
}],
|
|
381
|
+
body: [0, [[13, "maxPixels", [6, [6, "d.arrayOf", ["d.f32", "MAX_LEVELS"]], [[100, [[7, "low", "x"], [7, "low", "y"], [7, "low", "z"], [7, "low", "w"], [7, "high", "x"], [7, "high", "y"], [7, "high", "z"], [7, "high", "w"]]]]]], [13, "drawn", [6, "levelsToDraw", ["height", [6, "DrawLevels", [[104, {
|
|
382
|
+
count: "count",
|
|
383
|
+
maxPixels: "maxPixels",
|
|
384
|
+
empty: "empty",
|
|
385
|
+
coarsest: "coarsest",
|
|
386
|
+
forced: "forced",
|
|
387
|
+
fades: "fades"
|
|
388
|
+
}]]], "loaded", "before", "progress"]]], [10, [6, "d.vec3f", [[6, "d.f32", [[7, "drawn", "level"]]], [6, "d.f32", [[7, "drawn", "finer"]]], [7, "drawn", "fade"]]]]]]
|
|
389
|
+
},
|
|
390
|
+
externals: {
|
|
391
|
+
"d.arrayOf": () => d.arrayOf,
|
|
392
|
+
"d.f32": () => d.f32,
|
|
393
|
+
"MAX_LEVELS": () => MAX_LEVELS,
|
|
394
|
+
"levelsToDraw": () => levelsToDraw,
|
|
395
|
+
"DrawLevels": () => DrawLevels,
|
|
396
|
+
"d.vec3f": () => d.vec3f
|
|
397
|
+
}
|
|
398
|
+
}) && $.f)({})), "drawnOf");
|
|
399
|
+
/** drawnOf on the GPU, from its inputs as TSL nodes. */
|
|
400
|
+
export const levelsToDrawNode = toTsl("lodDraw", ["height", "count", "low", "high", "empty", "coarsest", "forced", "fades", "loaded", "before", "progress"], drawnOf);
|
|
401
|
+
//# sourceMappingURL=draw.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["d","std","tgpu","toTsl","FADE","MAX_LEVELS","ANY_HEIGHT","DrawLevels","globalThis","__TYPEGPU_AUTONAME__","a","struct","count","i32","maxPixels","arrayOf","f32","empty","u32","coarsest","forced","fades","has","bits","level","drawLevels","levels","Array","from","length","_","i","Math","min","Draw","finer","fade","drawnLevel","gpuHas","fn","bool","$","__TYPEGPU_META__","WeakMap","set","f","index","v","name","undefined","ast","params","type","body","externals","d.u32","maxPixelsOf","found","__tsover_add","d.f32","d.i32","levelForHeight","height","loadedOrCoarser","loaded","settled","chosen","top","smoothstep","__tsover_mul","__tsover_sub","std.smoothstep","levelsToDraw","before","progress","after","__tsover_div","select","std.select","Error","drawnOf","vec4f","vec3f","low","high","x","y","z","w","drawn","d.arrayOf","d.vec3f","levelsToDrawNode"],"sources":["../../src/levels/draw.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|