@drawcall/lod 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -7
- package/dist/bake.d.ts +36 -0
- package/dist/bake.js +176 -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 +14 -8
- package/dist/baked/index.js +24 -22
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/interior/faces.d.ts +4 -3
- package/dist/baked/interior/faces.js +16 -11
- 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.d.ts +1 -1
- package/dist/baked/interior/rooms.js +2 -2
- 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 +8 -5
- package/dist/dispose.js +22 -24
- package/dist/dispose.js.map +1 -1
- package/dist/foliage.d.ts +32 -0
- package/dist/foliage.js +137 -0
- package/dist/foliage.js.map +1 -0
- package/dist/impostor/bake/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 +50 -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 +3 -2
- package/dist/impostor/bake/source.js +9 -20
- 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 +120 -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 +65 -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 +10 -0
- package/dist/impostor/ktx2/worker.js.map +1 -0
- package/dist/impostor/mesh/card.d.ts +4 -4
- package/dist/impostor/mesh/card.js +7 -7
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +7 -6
- package/dist/impostor/mesh/index.js +10 -11
- 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 +13 -11
- package/dist/index.js +12 -10
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.d.ts +34 -0
- package/dist/instanced/camera.js +45 -0
- package/dist/instanced/camera.js.map +1 -0
- package/dist/instanced/clusters.d.ts +54 -0
- package/dist/instanced/clusters.js +151 -0
- package/dist/instanced/clusters.js.map +1 -0
- package/dist/instanced/cull.d.ts +28 -0
- package/dist/instanced/cull.js +22 -0
- package/dist/instanced/cull.js.map +1 -0
- package/dist/instanced/instances.d.ts +39 -0
- package/dist/instanced/instances.js +104 -0
- package/dist/instanced/instances.js.map +1 -0
- package/dist/instanced/key.d.ts +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 +131 -0
- package/dist/instanced/levels.js.map +1 -0
- package/dist/instanced/lists.d.ts +57 -0
- package/dist/instanced/lists.js +114 -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 +44 -51
- package/dist/instanced/meshes.js +167 -179
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.d.ts +24 -0
- package/dist/instanced/mirror.js +76 -0
- package/dist/instanced/mirror.js.map +1 -0
- package/dist/instanced/raycast.d.ts +10 -11
- package/dist/instanced/raycast.js +31 -41
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +50 -0
- package/dist/instanced/rows.js +36 -0
- package/dist/instanced/rows.js.map +1 -0
- package/dist/instanced/shape.d.ts +27 -0
- package/dist/instanced/shape.js +54 -0
- package/dist/instanced/shape.js.map +1 -0
- package/dist/instanced/sort.d.ts +61 -0
- package/dist/instanced/sort.js +192 -0
- package/dist/instanced/sort.js.map +1 -0
- package/dist/instanced/update.d.ts +34 -0
- package/dist/instanced/update.js +180 -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 +41 -0
- package/dist/levels/compile/index.js +193 -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 +172 -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 +60 -0
- package/dist/levels/fade.js +129 -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 +89 -0
- package/dist/levels/item.js.map +1 -0
- package/dist/levels/load.d.ts +31 -0
- package/dist/levels/load.js +144 -0
- package/dist/levels/load.js.map +1 -0
- package/dist/levels/manager.d.ts +158 -0
- package/dist/levels/manager.js +352 -0
- package/dist/levels/manager.js.map +1 -0
- package/dist/{material.d.ts → levels/material.d.ts} +2 -2
- package/dist/{material.js → levels/material.js} +6 -5
- package/dist/levels/material.js.map +1 -0
- package/dist/levels/renderer.d.ts +32 -0
- package/dist/levels/renderer.js +57 -0
- package/dist/levels/renderer.js.map +1 -0
- package/dist/levels/requests.d.ts +52 -0
- package/dist/levels/requests.js +97 -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/loader/build.d.ts +10 -0
- package/dist/loader/build.js +28 -0
- package/dist/loader/build.js.map +1 -0
- package/dist/loader/context.d.ts +44 -0
- package/dist/loader/context.js +96 -0
- package/dist/loader/context.js.map +1 -0
- package/dist/loader/entry.d.ts +4 -0
- package/dist/loader/entry.js +43 -0
- package/dist/loader/entry.js.map +1 -0
- package/dist/loader/index.d.ts +76 -0
- package/dist/loader/index.js +272 -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/node.d.ts +26 -0
- package/dist/loader/node.js +199 -0
- package/dist/loader/node.js.map +1 -0
- package/dist/loader/request.d.ts +54 -0
- package/dist/loader/request.js +19 -0
- package/dist/loader/request.js.map +1 -0
- package/dist/loader/url.d.ts +10 -6
- package/dist/loader/url.js +22 -14
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.d.ts +144 -43
- package/dist/lod.js +354 -163
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.d.ts +6 -0
- package/dist/meshopt.js +20 -0
- package/dist/meshopt.js.map +1 -0
- package/dist/node-process.d.ts +5 -0
- package/dist/node-process.js +6 -0
- package/dist/node-process.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.js +5 -0
- package/dist/node.js.map +1 -0
- package/dist/simplify/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} +8 -5
- package/dist/{simplify.js → simplify/index.js} +45 -27
- package/dist/simplify/index.js.map +1 -0
- package/dist/{bounds.d.ts → source/detail.d.ts} +9 -23
- package/dist/{bounds.js → source/detail.js} +28 -58
- 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} +8 -5
- 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 +19 -30
- package/dist/three.js +30 -57
- 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 +3 -3
- 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 +4 -4
- package/dist/wind/index.js +25 -23
- 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 +24 -10
- package/skills/lod/SKILL.md +120 -32
- 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/index.d.ts +0 -90
- package/dist/instanced/index.js +0 -349
- package/dist/instanced/index.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/cache.d.ts +0 -15
- package/dist/loader/cache.js +0 -75
- package/dist/loader/cache.js.map +0 -1
- package/dist/loader/provenance.d.ts +0 -30
- package/dist/loader/provenance.js +0 -105
- 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/compile.js
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { gpuQueue, isMesh, isNode, isTexture } from "./three.js";
|
|
2
|
-
import { pause } from "./pause.js";
|
|
3
|
-
/** Prepare the same target and MRT as the viewing draw, even if normal rendering has since restored the canvas. */
|
|
4
|
-
export async function compileLevel(object, context) {
|
|
5
|
-
// Throttle new uploads behind submitted work instead of blocking inside writeTexture.
|
|
6
|
-
const queue = gpuQueue(context.renderer);
|
|
7
|
-
for (const texture of textures(object)) {
|
|
8
|
-
await queue.onSubmittedWorkDone();
|
|
9
|
-
context.renderer.initTexture(texture);
|
|
10
|
-
await pause();
|
|
11
|
-
}
|
|
12
|
-
const meshes = [];
|
|
13
|
-
const collect = (node) => {
|
|
14
|
-
if (isMesh(node))
|
|
15
|
-
meshes.push(node);
|
|
16
|
-
};
|
|
17
|
-
object.traverse(collect);
|
|
18
|
-
for (const mesh of meshes) {
|
|
19
|
-
const groups = mesh.geometry.groups;
|
|
20
|
-
if (!Array.isArray(mesh.material)) {
|
|
21
|
-
await queue.onSubmittedWorkDone();
|
|
22
|
-
await compileMesh(mesh, context);
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
for (const group of groups) {
|
|
26
|
-
await queue.onSubmittedWorkDone();
|
|
27
|
-
let pending;
|
|
28
|
-
try {
|
|
29
|
-
mesh.geometry.groups = [group];
|
|
30
|
-
pending = compileMesh(mesh, context);
|
|
31
|
-
}
|
|
32
|
-
finally {
|
|
33
|
-
mesh.geometry.groups = groups;
|
|
34
|
-
}
|
|
35
|
-
await pending;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function compileMesh(mesh, context) {
|
|
40
|
-
const { renderer, camera, scene } = context;
|
|
41
|
-
const target = renderer.getRenderTarget();
|
|
42
|
-
const mrt = renderer.getMRT();
|
|
43
|
-
const cubeFace = renderer.getActiveCubeFace();
|
|
44
|
-
const mipLevel = renderer.getActiveMipmapLevel();
|
|
45
|
-
const culled = mesh.frustumCulled;
|
|
46
|
-
const visible = mesh.visible;
|
|
47
|
-
const children = mesh.children;
|
|
48
|
-
const background = scene.background;
|
|
49
|
-
const backgroundNode = scene.backgroundNode;
|
|
50
|
-
try {
|
|
51
|
-
renderer.setRenderTarget(context.target, context.cubeFace, context.mipLevel);
|
|
52
|
-
renderer.setMRT(context.mrt);
|
|
53
|
-
// Demanded levels can still be hidden or outside the last view.
|
|
54
|
-
mesh.frustumCulled = false;
|
|
55
|
-
mesh.visible = true;
|
|
56
|
-
mesh.children = [];
|
|
57
|
-
// r185 compiles backgrounds first, which would postpone this mesh until after renderer state is restored.
|
|
58
|
-
scene.background = null;
|
|
59
|
-
scene.backgroundNode = null;
|
|
60
|
-
// r185 starts only the first material before yielding; isolate one draw so setup sees its captured target/MRT.
|
|
61
|
-
return renderer.compileAsync(mesh, camera, scene);
|
|
62
|
-
}
|
|
63
|
-
finally {
|
|
64
|
-
scene.background = background;
|
|
65
|
-
scene.backgroundNode = backgroundNode;
|
|
66
|
-
mesh.children = children;
|
|
67
|
-
mesh.frustumCulled = culled;
|
|
68
|
-
mesh.visible = visible;
|
|
69
|
-
renderer.setRenderTarget(target, cubeFace, mipLevel);
|
|
70
|
-
renderer.setMRT(mrt);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
function textures(object) {
|
|
74
|
-
const found = new Set();
|
|
75
|
-
const visited = new Set();
|
|
76
|
-
const visit = (node) => {
|
|
77
|
-
if (visited.has(node))
|
|
78
|
-
return;
|
|
79
|
-
visited.add(node);
|
|
80
|
-
const value = Reflect.get(node, "value");
|
|
81
|
-
if (isTexture(value))
|
|
82
|
-
found.add(value);
|
|
83
|
-
for (const child of node.getChildren())
|
|
84
|
-
visit(child);
|
|
85
|
-
};
|
|
86
|
-
object.traverse((node) => {
|
|
87
|
-
if (!isMesh(node))
|
|
88
|
-
return;
|
|
89
|
-
for (const material of [node.material].flat()) {
|
|
90
|
-
for (const value of Object.values(material)) {
|
|
91
|
-
if (isTexture(value))
|
|
92
|
-
found.add(value);
|
|
93
|
-
else if (isNode(value))
|
|
94
|
-
visit(value);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
});
|
|
98
|
-
return found;
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=compile.js.map
|
package/dist/compile.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../src/compile.ts"],"names":[],"mappings":"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"}
|
package/dist/deferred.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Object3D } from "three/webgpu";
|
|
2
|
-
type Load = () => Promise<Object3D>;
|
|
3
|
-
interface Loading {
|
|
4
|
-
promise: Promise<Object3D>;
|
|
5
|
-
object?: Object3D;
|
|
6
|
-
error?: Error;
|
|
7
|
-
}
|
|
8
|
-
/** The load `loadOnce` started for `load`, if any. */
|
|
9
|
-
export declare const loading: (load: Load) => Loading | undefined;
|
|
10
|
-
/** Material dependencies and owners share one load and one resource lifetime. */
|
|
11
|
-
export declare function loadOnce(load: Load): Loading;
|
|
12
|
-
export {};
|
package/dist/deferred.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { isObject3D } from "./three.js";
|
|
2
|
-
const started = new WeakMap();
|
|
3
|
-
/** The load `loadOnce` started for `load`, if any. */
|
|
4
|
-
export const loading = (load) => started.get(load);
|
|
5
|
-
/** Material dependencies and owners share one load and one resource lifetime. */
|
|
6
|
-
export function loadOnce(load) {
|
|
7
|
-
const existing = started.get(load);
|
|
8
|
-
if (existing)
|
|
9
|
-
return existing;
|
|
10
|
-
const entry = {
|
|
11
|
-
promise: Promise.resolve()
|
|
12
|
-
.then(load)
|
|
13
|
-
.then((object) => {
|
|
14
|
-
if (!isObject3D(object))
|
|
15
|
-
throw new Error("Lod: load must return an Object3D");
|
|
16
|
-
entry.object = object;
|
|
17
|
-
return object;
|
|
18
|
-
})
|
|
19
|
-
.catch((error) => {
|
|
20
|
-
entry.error = error instanceof Error ? error : new Error("Lod: load failed", { cause: error });
|
|
21
|
-
throw entry.error;
|
|
22
|
-
}),
|
|
23
|
-
};
|
|
24
|
-
started.set(load, entry);
|
|
25
|
-
return entry;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=deferred.js.map
|
package/dist/deferred.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"deferred.js","sourceRoot":"","sources":["../src/deferred.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQxC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAiB,CAAC;AAE7C,sDAAsD;AACtD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAU,EAAuB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAE9E,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CAAC,IAAU;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,KAAK,GAAY;QACrB,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE;aACvB,IAAI,CAAC,IAAI,CAAC;aACV,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAC9E,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACxB,KAAK,CAAC,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/F,MAAM,KAAK,CAAC,KAAK,CAAC;QACpB,CAAC,CAAC;KACL,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/fade.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { Color, StorageBufferAttribute, type Node, type NodeBuilder, type Object3D } from "three/webgpu";
|
|
2
|
-
/** How a mesh of a level is drawn, which says where its fade and shadow size come from. */
|
|
3
|
-
export type Draw = {
|
|
4
|
-
kind: "object";
|
|
5
|
-
/** the signed fade */
|
|
6
|
-
fade: number;
|
|
7
|
-
/** the whole object's bounding diameter, world units */
|
|
8
|
-
diameter: number;
|
|
9
|
-
/** debug tint, white when off */
|
|
10
|
-
tint: Color;
|
|
11
|
-
} | {
|
|
12
|
-
kind: "instances";
|
|
13
|
-
/** one signed fade per instance slot; null for none (an ImpostorMesh of its own) */
|
|
14
|
-
fades: StorageBufferAttribute | null;
|
|
15
|
-
/** one instance's bounding radius in its own space */
|
|
16
|
-
radius: number;
|
|
17
|
-
tint: Color;
|
|
18
|
-
};
|
|
19
|
-
/** Draw `mesh` as `draw` says: its materials read it while it renders. */
|
|
20
|
-
export declare const setDraw: (mesh: Object3D, draw: Draw) => void;
|
|
21
|
-
export declare const drawOf: (mesh: Object3D) => Draw | undefined;
|
|
22
|
-
/** This draw's debug tint (see `Lod.debug`). */
|
|
23
|
-
export declare const tint: import("three/webgpu").UniformNode<"color", Color>;
|
|
24
|
-
/** Interleaved gradient noise over the pixels of the target being drawn. */
|
|
25
|
-
export declare const dither: (pixel: Node<"vec2">) => Node<"float">;
|
|
26
|
-
/** This draw's instance matrix when its matrices live in storage, else null. */
|
|
27
|
-
export declare function instanceMatrixOf(object: Object3D): Node<"mat4"> | null;
|
|
28
|
-
export declare const instanceColor: import("three/webgpu").VaryingNode<"vec3">;
|
|
29
|
-
/** Apply the level's shared instance bindings before its own deformation, as Three does for InstancedMesh. */
|
|
30
|
-
export declare function placeInstances(builder: NodeBuilder): void;
|
|
31
|
-
/** This draw's signed fade. */
|
|
32
|
-
export declare const fade: import("three/src/nodes/TSL.js").FnNode<[], Node<"float">>;
|
|
33
|
-
/** Whether this pixel is this draw's, by its fade: false on the other level's pixels. */
|
|
34
|
-
export declare const keepsPixel: import("three/src/nodes/TSL.js").FnNode<[], Node<"bool">>;
|
|
35
|
-
/** `position` in shadow passes, or nothing (a point) when the draw is too small to cast. */
|
|
36
|
-
export declare const castPosition: (position: Node<"vec3">) => Node<"vec3">;
|
package/dist/fade.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { Color, Matrix4, StorageBufferAttribute, StorageInstancedBufferAttribute } from "three/webgpu";
|
|
2
|
-
import { Fn, cameraProjectionMatrix, dot, float, fract, instanceIndex, modelWorldMatrix, normalLocal, positionLocal, transformNormal, varyingProperty, screenCoordinate, screenSize, select, storage, uniform, varying, vec2, vec3, } from "three/tsl";
|
|
3
|
-
import { isImpostorMesh, isLodInstances, storageMatrices } from "./three.js";
|
|
4
|
-
import { column, instanceGroup, isOrthographic, maxScale } from "./tsl.js";
|
|
5
|
-
const draws = new WeakMap();
|
|
6
|
-
/** Draw `mesh` as `draw` says: its materials read it while it renders. */
|
|
7
|
-
export const setDraw = (mesh, draw) => void draws.set(mesh, draw);
|
|
8
|
-
export const drawOf = (mesh) => draws.get(mesh);
|
|
9
|
-
const WHITE = new Color(1, 1, 1);
|
|
10
|
-
const of = (object) => (object ? draws.get(object) : undefined);
|
|
11
|
-
// Per-object values, shared by every material: each draw reads its own.
|
|
12
|
-
const objectFade = uniform(0).onObjectUpdate(({ object }) => {
|
|
13
|
-
const draw = of(object);
|
|
14
|
-
return draw?.kind === "object" ? draw.fade : 0;
|
|
15
|
-
});
|
|
16
|
-
// A mesh no level draws is never too small to cast.
|
|
17
|
-
const objectDiameter = uniform(0).onObjectUpdate(({ object }) => {
|
|
18
|
-
const draw = of(object);
|
|
19
|
-
return draw?.kind === "object" ? draw.diameter : 3.4e38;
|
|
20
|
-
});
|
|
21
|
-
const instanceRadius = uniform(0).onObjectUpdate(({ object }) => {
|
|
22
|
-
const draw = of(object);
|
|
23
|
-
return draw?.kind === "instances" ? draw.radius : 0;
|
|
24
|
-
});
|
|
25
|
-
/** This draw's debug tint (see `Lod.debug`). */
|
|
26
|
-
export const tint = uniform(new Color(1, 1, 1)).onObjectUpdate(({ object }) => of(object)?.tint ?? WHITE);
|
|
27
|
-
/** Interleaved gradient noise over the pixels of the target being drawn. */
|
|
28
|
-
export const dither = (pixel) => fract(float(52.9829189).mul(fract(dot(pixel, vec2(0.06711056, 0.00583715)))));
|
|
29
|
-
const identity = new StorageInstancedBufferAttribute(new Float32Array(new Matrix4().elements), 16);
|
|
30
|
-
const matrices = storage(identity, "mat4", 0)
|
|
31
|
-
.setName("lodInstanceMatrices")
|
|
32
|
-
.setGroup(instanceGroup)
|
|
33
|
-
.toReadOnly()
|
|
34
|
-
.onObjectUpdate(({ object }) => {
|
|
35
|
-
const attribute = object && storageMatrices(object);
|
|
36
|
-
if (!attribute)
|
|
37
|
-
throw new Error("Lod: instance draw has no matrices");
|
|
38
|
-
return attribute;
|
|
39
|
-
});
|
|
40
|
-
const zero = new StorageBufferAttribute(new Float32Array(1), 1);
|
|
41
|
-
const fades = storage(zero, "float", 0)
|
|
42
|
-
.setName("lodInstanceFades")
|
|
43
|
-
.setGroup(instanceGroup)
|
|
44
|
-
.toReadOnly()
|
|
45
|
-
.onObjectUpdate(({ object }) => {
|
|
46
|
-
const draw = of(object);
|
|
47
|
-
return draw?.kind === "instances" && draw.fades ? draw.fades : zero;
|
|
48
|
-
});
|
|
49
|
-
const fadeIndex = uniform(0, "uint").onObjectUpdate(({ object }) => {
|
|
50
|
-
const draw = of(object);
|
|
51
|
-
return Number(draw?.kind === "instances" && draw.fades !== null);
|
|
52
|
-
});
|
|
53
|
-
const instanceCaster = uniform(false).onObjectUpdate(({ object }) => of(object)?.kind === "instances");
|
|
54
|
-
/** This draw's instance matrix when its matrices live in storage, else null. */
|
|
55
|
-
export function instanceMatrixOf(object) {
|
|
56
|
-
return storageMatrices(object) ? matrices.element(instanceIndex) : null;
|
|
57
|
-
}
|
|
58
|
-
const white = new StorageInstancedBufferAttribute(new Float32Array([1, 1, 1, 1]), 4);
|
|
59
|
-
const colors = storage(white, "vec4", 0)
|
|
60
|
-
.setName("lodInstanceColors")
|
|
61
|
-
.setGroup(instanceGroup)
|
|
62
|
-
.toReadOnly()
|
|
63
|
-
.onObjectUpdate(({ object }) => (object && (isImpostorMesh(object) || isLodInstances(object)) && object.instanceColor) || white);
|
|
64
|
-
const colorIndex = uniform(0, "uint").onObjectUpdate(({ object }) => Number(!!object && (isImpostorMesh(object) || isLodInstances(object)) && object.instanceColor !== null));
|
|
65
|
-
export const instanceColor = varying(colors.element(instanceIndex.mul(colorIndex)).xyz).setInterpolation("flat");
|
|
66
|
-
/** Apply the level's shared instance bindings before its own deformation, as Three does for InstancedMesh. */
|
|
67
|
-
export function placeInstances(builder) {
|
|
68
|
-
if (!isLodInstances(builder.object))
|
|
69
|
-
return;
|
|
70
|
-
const matrix = matrices.element(instanceIndex);
|
|
71
|
-
positionLocal.assign(matrix.mul(positionLocal).xyz);
|
|
72
|
-
if (builder.geometry.hasAttribute("normal"))
|
|
73
|
-
normalLocal.assign(transformNormal(normalLocal, matrix));
|
|
74
|
-
if (builder.object.instanceColor)
|
|
75
|
-
varyingProperty("vec3", "vInstanceColor").assign(instanceColor);
|
|
76
|
-
}
|
|
77
|
-
/** This draw's signed fade. */
|
|
78
|
-
export const fade = Fn((builder) => {
|
|
79
|
-
if (isImpostorMesh(builder.object))
|
|
80
|
-
return varying(fades.element(instanceIndex.mul(fadeIndex)))
|
|
81
|
-
.setInterpolation("flat")
|
|
82
|
-
.add(objectFade);
|
|
83
|
-
const draw = draws.get(builder.object);
|
|
84
|
-
if (draw?.kind !== "instances" || !draw.fades)
|
|
85
|
-
return objectFade;
|
|
86
|
-
// Constant across the primitive: keep compute-written slots out of fragment bindings.
|
|
87
|
-
return varying(fades.element(instanceIndex)).setInterpolation("flat");
|
|
88
|
-
});
|
|
89
|
-
/** Whether this pixel is this draw's, by its fade: false on the other level's pixels. */
|
|
90
|
-
export const keepsPixel = Fn(() => {
|
|
91
|
-
const f = fade();
|
|
92
|
-
const d = dither(screenCoordinate.xy);
|
|
93
|
-
return select(f.greaterThanEqual(0), d.greaterThanEqual(f), d.lessThan(f.negate()));
|
|
94
|
-
});
|
|
95
|
-
/**
|
|
96
|
-
* Whether this draw is too small for the shadow map being drawn: narrower than a texel
|
|
97
|
-
* of an orthographic (directional light's) map, it would cover a texel centre only by
|
|
98
|
-
* chance, flickering as it or the map moves. Only valid in shadow passes.
|
|
99
|
-
*/
|
|
100
|
-
const tooSmallToCast = Fn((builder) => {
|
|
101
|
-
const object = builder.object;
|
|
102
|
-
const card = isImpostorMesh(object);
|
|
103
|
-
const instance = card || draws.get(object)?.kind === "instances" ? instanceMatrixOf(object) : null;
|
|
104
|
-
const instanced = instance ? maxScale(modelWorldMatrix.mul(instance)).mul(instanceRadius).mul(2) : objectDiameter;
|
|
105
|
-
const diameter = card ? select(instanceCaster, instanced, objectDiameter) : instanced;
|
|
106
|
-
// projection[1][1] is 2 × zoom / (top - bottom)
|
|
107
|
-
const texel = float(2).div(column(cameraProjectionMatrix, 1).y.mul(screenSize.y));
|
|
108
|
-
return isOrthographic(cameraProjectionMatrix).and(diameter.lessThan(texel));
|
|
109
|
-
});
|
|
110
|
-
/** `position` in shadow passes, or nothing (a point) when the draw is too small to cast. */
|
|
111
|
-
export const castPosition = (position) => select(tooSmallToCast(), vec3(0), position);
|
|
112
|
-
//# sourceMappingURL=fade.js.map
|
package/dist/fade.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fade.js","sourceRoot":"","sources":["../src/fade.ts"],"names":[],"mappings":"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"}
|
package/dist/instanced/args.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { IndirectStorageBufferAttribute } from "three/webgpu";
|
|
2
|
-
/** Bytes per draw, including the unused final word of a non-indexed draw. */
|
|
3
|
-
export declare const ARGS_BYTES = 20;
|
|
4
|
-
export interface ArgsSlice {
|
|
5
|
-
readonly attribute: IndirectStorageBufferAttribute;
|
|
6
|
-
readonly offset: number;
|
|
7
|
-
dispose(): void;
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Stable slices of fixed-size pages. Sharing the indirect buffer lets WebGPU batch
|
|
11
|
-
* draw validation; growing a page would replace buffers still used by meshes and kernels.
|
|
12
|
-
*/
|
|
13
|
-
export declare class Args {
|
|
14
|
-
private readonly capacity;
|
|
15
|
-
private readonly pages;
|
|
16
|
-
constructor(capacity?: number);
|
|
17
|
-
take(values: Uint32Array): ArgsSlice;
|
|
18
|
-
private release;
|
|
19
|
-
}
|
|
20
|
-
export declare const args: Args;
|
package/dist/instanced/args.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { IndirectStorageBufferAttribute } from "three/webgpu";
|
|
2
|
-
/** Bytes per draw, including the unused final word of a non-indexed draw. */
|
|
3
|
-
export const ARGS_BYTES = 20;
|
|
4
|
-
const PAGE_DRAWS = 4096;
|
|
5
|
-
// WebGPU's guaranteed maxStorageBufferBindingSize; a page is one storage binding.
|
|
6
|
-
const MAX_BYTES = 128 * 1024 * 1024;
|
|
7
|
-
/**
|
|
8
|
-
* Stable slices of fixed-size pages. Sharing the indirect buffer lets WebGPU batch
|
|
9
|
-
* draw validation; growing a page would replace buffers still used by meshes and kernels.
|
|
10
|
-
*/
|
|
11
|
-
export class Args {
|
|
12
|
-
capacity;
|
|
13
|
-
pages = [];
|
|
14
|
-
constructor(capacity = PAGE_DRAWS) {
|
|
15
|
-
this.capacity = capacity;
|
|
16
|
-
if (!Number.isSafeInteger(capacity) || capacity < 1 || capacity * ARGS_BYTES > MAX_BYTES) {
|
|
17
|
-
throw new Error("InstancedLod: invalid indirect argument page capacity");
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
take(values) {
|
|
21
|
-
if (values.length % 5 !== 0 || values.byteLength > MAX_BYTES) {
|
|
22
|
-
throw new Error("InstancedLod: indirect arguments exceed a storage binding or contain an incomplete draw");
|
|
23
|
-
}
|
|
24
|
-
const count = Math.max(values.length / 5, 1);
|
|
25
|
-
let page = this.pages.find((page) => page.free.some((range) => range.count >= count));
|
|
26
|
-
if (!page) {
|
|
27
|
-
const capacity = Math.max(this.capacity, count);
|
|
28
|
-
page = { attribute: new IndirectStorageBufferAttribute(new Uint32Array(capacity * 5), 1), free: [{ first: 0, count: capacity }], users: 0 };
|
|
29
|
-
this.pages.push(page);
|
|
30
|
-
}
|
|
31
|
-
const range = page.free.find((range) => range.count >= count);
|
|
32
|
-
if (!range)
|
|
33
|
-
throw new Error("InstancedLod: no space in indirect argument page");
|
|
34
|
-
const first = range.first;
|
|
35
|
-
range.first += count;
|
|
36
|
-
range.count -= count;
|
|
37
|
-
if (range.count === 0)
|
|
38
|
-
page.free.splice(page.free.indexOf(range), 1);
|
|
39
|
-
page.users++;
|
|
40
|
-
// Keep a CPU mirror of the fixed fields, but never upload a live page again:
|
|
41
|
-
// its instance counts belong to the GPU. The arguments pass writes all words of each slice.
|
|
42
|
-
page.attribute.array.set(values, first * 5);
|
|
43
|
-
const owned = page;
|
|
44
|
-
let disposed = false;
|
|
45
|
-
return {
|
|
46
|
-
attribute: page.attribute,
|
|
47
|
-
offset: first * ARGS_BYTES,
|
|
48
|
-
dispose: () => {
|
|
49
|
-
if (disposed)
|
|
50
|
-
return;
|
|
51
|
-
disposed = true;
|
|
52
|
-
this.release(owned, { first, count });
|
|
53
|
-
},
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
release(page, range) {
|
|
57
|
-
if (--page.users === 0) {
|
|
58
|
-
this.pages.splice(this.pages.indexOf(page), 1);
|
|
59
|
-
page.attribute.dispose();
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
// Earlier submitted draws finish before a later arguments pass overwrites a reused slice.
|
|
63
|
-
page.free.push(range);
|
|
64
|
-
page.free.sort((a, b) => a.first - b.first);
|
|
65
|
-
const merged = [];
|
|
66
|
-
for (const range of page.free) {
|
|
67
|
-
const previous = merged.at(-1);
|
|
68
|
-
if (previous && previous.first + previous.count === range.first)
|
|
69
|
-
previous.count += range.count;
|
|
70
|
-
else
|
|
71
|
-
merged.push(range);
|
|
72
|
-
}
|
|
73
|
-
page.free = merged;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
export const args = new Args();
|
|
77
|
-
//# sourceMappingURL=args.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/instanced/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Matrix4, Sphere, Vector3 } from "three/webgpu";
|
|
2
|
-
export interface BlockView {
|
|
3
|
-
eye: Vector3;
|
|
4
|
-
scale: number;
|
|
5
|
-
ortho: boolean;
|
|
6
|
-
fades: boolean;
|
|
7
|
-
forced: number | null;
|
|
8
|
-
}
|
|
9
|
-
/** Cached spatial blocks: instance edits refit leaves; moving views visit only blocks. */
|
|
10
|
-
export declare class Blocks {
|
|
11
|
-
private readonly matrices;
|
|
12
|
-
private readonly spheres;
|
|
13
|
-
private readonly source;
|
|
14
|
-
/** Set to enclose every instance on refit. */
|
|
15
|
-
private readonly bounds;
|
|
16
|
-
/** Radius enclosing every placed level about source.center. */
|
|
17
|
-
private readonly rest;
|
|
18
|
-
private readonly block;
|
|
19
|
-
private readonly leaves;
|
|
20
|
-
private readonly tree;
|
|
21
|
-
private readonly dirty;
|
|
22
|
-
private readonly radii;
|
|
23
|
-
private readonly roundoff;
|
|
24
|
-
private readonly unsafe;
|
|
25
|
-
private readonly levelBoxes;
|
|
26
|
-
private token;
|
|
27
|
-
private changed;
|
|
28
|
-
private complete;
|
|
29
|
-
private low;
|
|
30
|
-
private high;
|
|
31
|
-
private padding;
|
|
32
|
-
constructor(matrices: Float32Array, spheres: Float32Array, source: Sphere,
|
|
33
|
-
/** Set to enclose every instance on refit. */
|
|
34
|
-
bounds: Sphere, draws: number,
|
|
35
|
-
/** Radius enclosing every placed level about source.center. */
|
|
36
|
-
rest: {
|
|
37
|
-
readonly radius: number;
|
|
38
|
-
});
|
|
39
|
-
/** Measure changed matrices, retaining the GPU's max-axis radius for LOD selection. */
|
|
40
|
-
measure(start: number, end: number): void;
|
|
41
|
-
pad(padding: number): void;
|
|
42
|
-
/** Refit only edited leaves and their ancestors. No instance scan on view changes. */
|
|
43
|
-
refit(): void;
|
|
44
|
-
private leaf;
|
|
45
|
-
private join;
|
|
46
|
-
/** Level bounds plus a token only when every block has an unchanged solid choice. */
|
|
47
|
-
select(levels: readonly {
|
|
48
|
-
maxPixels: number;
|
|
49
|
-
}[], view: BlockView, reaches: Sphere[], measured: boolean, root: Matrix4): object | undefined;
|
|
50
|
-
/** Ahead-of-view demand without changing solid selections or their reuse token. */
|
|
51
|
-
demand(levels: readonly {
|
|
52
|
-
maxPixels: number;
|
|
53
|
-
}[], view: BlockView, reaches: Sphere[], root: Matrix4): void;
|
|
54
|
-
private gather;
|
|
55
|
-
private enclose;
|
|
56
|
-
private visit;
|
|
57
|
-
private resetBoxes;
|
|
58
|
-
/**
|
|
59
|
-
* The finest and coarsest levels `node` may draw, fade partner included, with heights
|
|
60
|
-
* widened by `margin` for demand. Must match the GPU's selection and `levelOf`.
|
|
61
|
-
*/
|
|
62
|
-
private span;
|
|
63
|
-
private interval;
|
|
64
|
-
}
|
|
65
|
-
/** Upper bound on the largest singular value, exact for orthogonal matrix axes. */
|
|
66
|
-
export declare function stretch(matrix: Matrix4): number;
|