@drawcall/lod 0.1.2 → 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 +13 -70
- package/dist/at.d.ts +2 -0
- package/dist/at.js +8 -0
- package/dist/at.js.map +1 -0
- 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 +5 -5
- package/dist/baked/codec.js +58 -158
- 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 +16 -6
- package/dist/baked/index.js +23 -21
- 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.d.ts +2 -2
- package/dist/baked/low.js +9 -8
- 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/codec/mesh.js +220 -0
- package/dist/codec/mesh.js.map +1 -0
- package/dist/dispose.d.ts +11 -4
- package/dist/dispose.js +39 -12
- 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 +23 -14
- package/dist/impostor/bake/index.js +42 -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 +60 -12
- 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 +5 -11
- package/dist/impostor/codec.js +37 -121
- 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 +11 -8
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.d.ts +10 -7
- package/dist/impostor/mesh/index.js +15 -18
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.d.ts +24 -13
- package/dist/impostor/mesh/material.js +67 -51
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.d.ts +20 -16
- package/dist/impostor/mesh/surface.js +81 -58
- 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/impostor/octahedral.d.ts +1 -8
- package/dist/impostor/octahedral.js +3 -18
- package/dist/impostor/octahedral.js.map +1 -1
- package/dist/index.d.ts +16 -10
- package/dist/index.js +14 -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 -92
- package/dist/instanced/index.js +229 -512
- 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 +46 -14
- package/dist/instanced/meshes.js +137 -22
- 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 +15 -0
- package/dist/instanced/raycast.js +46 -0
- package/dist/instanced/raycast.js.map +1 -0
- 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} +13 -7
- 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 +12 -15
- package/dist/loader/cache.js +64 -33
- 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/dependencies.d.ts +32 -0
- package/dist/loader/dependencies.js +113 -0
- 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 +16 -0
- package/dist/loader/url.js +35 -0
- package/dist/loader/url.js.map +1 -0
- package/dist/lod.d.ts +79 -49
- package/dist/lod.js +209 -153
- 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} +42 -22
- package/dist/simplify/index.js.map +1 -0
- package/dist/{bounds.d.ts → source/detail.d.ts} +4 -13
- package/dist/{bounds.js → source/detail.js} +62 -32
- package/dist/source/detail.js.map +1 -0
- package/dist/source/{error.d.ts → deviation.d.ts} +3 -3
- package/dist/source/{error.js → deviation.js} +12 -12
- package/dist/source/deviation.js.map +1 -0
- 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 +2 -2
- package/dist/source/source.js +2 -2
- 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 +20 -19
- package/dist/three.js +29 -35
- package/dist/three.js.map +1 -1
- package/dist/tsl.d.ts +10 -14
- package/dist/tsl.js +12 -47
- 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 +4 -4
- package/dist/wind/index.js +43 -40
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.d.ts +4 -1
- package/dist/wind/sway.js +4 -1
- package/dist/wind/sway.js.map +1 -1
- package/package.json +24 -8
- package/skills/lod/SKILL.md +147 -108
- package/dist/bounds.js.map +0 -1
- package/dist/fade.d.ts +0 -44
- package/dist/fade.js +0 -78
- package/dist/fade.js.map +0 -1
- package/dist/impostor/cache.d.ts +0 -15
- package/dist/impostor/cache.js +0 -44
- package/dist/impostor/cache.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/bounds.d.ts +0 -50
- package/dist/instanced/bounds.js +0 -271
- package/dist/instanced/bounds.js.map +0 -1
- package/dist/instanced/dirty.d.ts +0 -12
- package/dist/instanced/dirty.js +0 -61
- package/dist/instanced/dirty.js.map +0 -1
- package/dist/instanced/select.d.ts +0 -84
- package/dist/instanced/select.js +0 -264
- package/dist/instanced/select.js.map +0 -1
- package/dist/lazy.d.ts +0 -64
- package/dist/lazy.js +0 -187
- package/dist/lazy.js.map +0 -1
- package/dist/levels.d.ts +0 -72
- package/dist/levels.js +0 -146
- package/dist/levels.js.map +0 -1
- package/dist/loader/dispose.d.ts +0 -3
- package/dist/loader/dispose.js +0 -25
- package/dist/loader/dispose.js.map +0 -1
- package/dist/loader.d.ts +0 -99
- package/dist/loader.js +0 -234
- package/dist/loader.js.map +0 -1
- package/dist/material.js.map +0 -1
- package/dist/pause.d.ts +0 -6
- package/dist/pause.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/simplify.js.map +0 -1
- package/dist/source/error.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 -30
- package/dist/view.js +0 -75
- package/dist/view.js.map +0 -1
- /package/dist/{material.d.ts → levels/material.d.ts} +0 -0
package/dist/impostor/cache.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { CacheEntry } from "vitecache";
|
|
2
|
-
import { bakeImpostor } from "./bake/index.js";
|
|
3
|
-
import { decodeImpostorAsync, encodeImpostor } from "./codec.js";
|
|
4
|
-
/**
|
|
5
|
-
* Read or bake an impostor with vitecache. Declare every source input as a dependency;
|
|
6
|
-
* bake options and the lod/three package versions are added automatically. Dependency
|
|
7
|
-
* names beginning with `lod:` are reserved. URL dependencies need the vitecache Vite
|
|
8
|
-
* plugin during development and build. Cache errors reject instead of hiding stale data.
|
|
9
|
-
*/
|
|
10
|
-
export function cachedImpostor(source, options, dependencies, cacheOptions) {
|
|
11
|
-
return cached(options, dependencies, (settings) => bakeImpostor(source, settings), cacheOptions);
|
|
12
|
-
}
|
|
13
|
-
/** Shared persistence for the public bake and the loader's source-excluding bake. */
|
|
14
|
-
export async function cached(options, dependencies, make, cacheOptions) {
|
|
15
|
-
const settings = { ...options };
|
|
16
|
-
if (Object.keys(dependencies).some((name) => name.startsWith("lod:")))
|
|
17
|
-
throw new Error("cachedImpostor: dependency names beginning with lod: are reserved");
|
|
18
|
-
const entry = new CacheEntry({
|
|
19
|
-
...cacheOptions,
|
|
20
|
-
version: "lod-impostor@1",
|
|
21
|
-
dependencies: {
|
|
22
|
-
...dependencies,
|
|
23
|
-
"lod:options": {
|
|
24
|
-
value: {
|
|
25
|
-
layout: settings.layout ?? null,
|
|
26
|
-
frames: settings.frames ?? null,
|
|
27
|
-
resolution: settings.resolution ?? null,
|
|
28
|
-
maxPixels: settings.maxPixels ?? null,
|
|
29
|
-
emissive: settings.emissive ?? null,
|
|
30
|
-
supersample: settings.supersample ?? null,
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
"lod:package": { package: "@drawcall/lod" },
|
|
34
|
-
"lod:three": { package: "three" },
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
const bytes = await entry.load();
|
|
38
|
-
if (bytes !== undefined)
|
|
39
|
-
return decodeImpostorAsync(bytes);
|
|
40
|
-
const baked = await make(settings);
|
|
41
|
-
await entry.save(encodeImpostor(baked));
|
|
42
|
-
return baked;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/impostor/cache.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAA6C,MAAM,WAAW,CAAC;AAClF,OAAO,EAAE,YAAY,EAA4B,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAgB,EAChB,OAA4B,EAC5B,YAA0B,EAC1B,YAAmC;IAEnC,OAAO,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;AACnG,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,OAA4B,EAC5B,YAA0B,EAC1B,IAAyD,EACzD,YAAmC;IAEnC,MAAM,QAAQ,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAChC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IAC5J,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC;QAC3B,GAAG,YAAY;QACf,OAAO,EAAE,gBAAgB;QACzB,YAAY,EAAE;YACZ,GAAG,YAAY;YACf,aAAa,EAAE;gBACb,KAAK,EAAE;oBACL,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;oBAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI;oBAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,IAAI;oBACvC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI;oBACrC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,IAAI;oBACnC,WAAW,EAAE,QAAQ,CAAC,WAAW,IAAI,IAAI;iBAC1C;aACF;YACD,aAAa,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE;YAC3C,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;SAClC;KACF,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;IACjC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC;AACf,CAAC"}
|
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. Handover 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 handover 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,50 +0,0 @@
|
|
|
1
|
-
import { Matrix4, Sphere, Vector3 } from "three/webgpu";
|
|
2
|
-
import { type LodLevel } from "../levels.js";
|
|
3
|
-
export interface BoundsView {
|
|
4
|
-
eye: Vector3;
|
|
5
|
-
scale: number;
|
|
6
|
-
ortho: boolean;
|
|
7
|
-
fades: boolean;
|
|
8
|
-
forced: number | null;
|
|
9
|
-
}
|
|
10
|
-
/** Cached spatial blocks: instance edits refit leaves; moving views visit only blocks. */
|
|
11
|
-
export declare class Bounds {
|
|
12
|
-
private readonly matrices;
|
|
13
|
-
private readonly spheres;
|
|
14
|
-
private readonly source;
|
|
15
|
-
readonly sphere: Sphere;
|
|
16
|
-
/** Radius enclosing every placed level about source.center. */
|
|
17
|
-
private readonly geometry;
|
|
18
|
-
private readonly block;
|
|
19
|
-
private readonly leaves;
|
|
20
|
-
private readonly tree;
|
|
21
|
-
private readonly dirty;
|
|
22
|
-
private readonly radii;
|
|
23
|
-
private readonly errors;
|
|
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, sphere: Sphere, draws: number,
|
|
33
|
-
/** Radius enclosing every placed level about source.center. */
|
|
34
|
-
geometry?: {
|
|
35
|
-
readonly radius: number;
|
|
36
|
-
});
|
|
37
|
-
/** Measure changed matrices, retaining the GPU's max-axis radius for LOD selection. */
|
|
38
|
-
measure(start: number, end: number): void;
|
|
39
|
-
pad(padding: number): void;
|
|
40
|
-
/** Refit only edited leaves and their ancestors. No instance scan on view changes. */
|
|
41
|
-
refit(): void;
|
|
42
|
-
private leaf;
|
|
43
|
-
private join;
|
|
44
|
-
/** Level bounds plus a token only when every block has an unchanged solid choice. */
|
|
45
|
-
select(levels: readonly LodLevel[], view: BoundsView, reaches: Sphere[], measured: boolean, root: Matrix4): object | undefined;
|
|
46
|
-
private visit;
|
|
47
|
-
private interval;
|
|
48
|
-
}
|
|
49
|
-
/** Upper bound on the largest singular value, exact for orthogonal matrix axes. */
|
|
50
|
-
export declare function stretch(matrix: Matrix4): number;
|
package/dist/instanced/bounds.js
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import { Box3, Matrix4, Sphere, Vector3 } from "three/webgpu";
|
|
2
|
-
import { FADE } from "../levels.js";
|
|
3
|
-
import { Dirty } from "./dirty.js";
|
|
4
|
-
// Cover float32 matrix products, distances and threshold arithmetic. Near a switch,
|
|
5
|
-
// uncertain blocks keep both levels and cannot reuse a previous GPU selection.
|
|
6
|
-
const ROUND = 1e-5;
|
|
7
|
-
const matrix = new Matrix4();
|
|
8
|
-
const point = new Vector3();
|
|
9
|
-
const extent = new Vector3();
|
|
10
|
-
/** Cached spatial blocks: instance edits refit leaves; moving views visit only blocks. */
|
|
11
|
-
export class Bounds {
|
|
12
|
-
matrices;
|
|
13
|
-
spheres;
|
|
14
|
-
source;
|
|
15
|
-
sphere;
|
|
16
|
-
geometry;
|
|
17
|
-
block;
|
|
18
|
-
leaves;
|
|
19
|
-
tree;
|
|
20
|
-
dirty;
|
|
21
|
-
radii;
|
|
22
|
-
errors;
|
|
23
|
-
unsafe;
|
|
24
|
-
levelBoxes = [];
|
|
25
|
-
token = {};
|
|
26
|
-
changed = false;
|
|
27
|
-
complete = true;
|
|
28
|
-
low = 0;
|
|
29
|
-
high = 0;
|
|
30
|
-
padding = 0;
|
|
31
|
-
constructor(matrices, spheres, source, sphere, draws,
|
|
32
|
-
/** Radius enclosing every placed level about source.center. */
|
|
33
|
-
geometry = source) {
|
|
34
|
-
this.matrices = matrices;
|
|
35
|
-
this.spheres = spheres;
|
|
36
|
-
this.source = source;
|
|
37
|
-
this.sphere = sphere;
|
|
38
|
-
this.geometry = geometry;
|
|
39
|
-
const count = matrices.length / 16;
|
|
40
|
-
// Fine leaves avoid many empty draws in small, multipart crowds. Large crowds
|
|
41
|
-
// retain bounded block traversal rather than inspecting every instance per view.
|
|
42
|
-
this.block = count <= 4096 && draws >= 8 ? 1 : 64;
|
|
43
|
-
this.leaves = 2 ** Math.ceil(Math.log2(Math.max(1, Math.ceil(count / this.block))));
|
|
44
|
-
this.tree = Array.from({ length: this.leaves * 2 }, () => ({
|
|
45
|
-
geometry: new Box3(),
|
|
46
|
-
centers: new Box3(),
|
|
47
|
-
sphere: new Sphere(),
|
|
48
|
-
smallest: Infinity,
|
|
49
|
-
largest: 0,
|
|
50
|
-
reach: 0,
|
|
51
|
-
solid: -1,
|
|
52
|
-
unsafe: false,
|
|
53
|
-
}));
|
|
54
|
-
this.dirty = new Dirty(Math.ceil(count / this.block));
|
|
55
|
-
this.radii = new Float64Array(count);
|
|
56
|
-
this.errors = new Float64Array(count);
|
|
57
|
-
this.unsafe = new Uint8Array(count);
|
|
58
|
-
}
|
|
59
|
-
/** Measure changed matrices, retaining the GPU's max-axis radius for LOD selection. */
|
|
60
|
-
measure(start, end) {
|
|
61
|
-
const { center, radius } = this.source;
|
|
62
|
-
for (let i = start; i < end; i++) {
|
|
63
|
-
matrix.fromArray(this.matrices, i * 16);
|
|
64
|
-
point
|
|
65
|
-
.copy(center)
|
|
66
|
-
.applyMatrix4(matrix)
|
|
67
|
-
.toArray(this.spheres, i * 4);
|
|
68
|
-
const axis = matrix.getMaxScaleOnAxis();
|
|
69
|
-
this.spheres[i * 4 + 3] = radius * axis;
|
|
70
|
-
this.radii[i] = this.geometry.radius * stretch(matrix);
|
|
71
|
-
const e = matrix.elements;
|
|
72
|
-
// Absolute terms also cover cancellation in the shader's transformed center.
|
|
73
|
-
const terms = Math.max(Math.abs(e[0] * center.x) + Math.abs(e[4] * center.y) + Math.abs(e[8] * center.z) + Math.abs(e[12]), Math.abs(e[1] * center.x) + Math.abs(e[5] * center.y) + Math.abs(e[9] * center.z) + Math.abs(e[13]), Math.abs(e[2] * center.x) + Math.abs(e[6] * center.y) + Math.abs(e[10] * center.z) + Math.abs(e[14]), radius, this.geometry.radius);
|
|
74
|
-
this.errors[i] = ROUND * Math.sqrt(3) * terms;
|
|
75
|
-
// WGSL length squares its inputs. Guard the intermediates, not only the final
|
|
76
|
-
// screen height: infinity / infinity would select level zero, not the CPU tier.
|
|
77
|
-
this.unsafe[i] = Number(unsafe(axis) || unsafe(radius) || terms > 1e15 || !Number.isFinite(terms));
|
|
78
|
-
this.dirty.add(Math.floor(i / this.block));
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
pad(padding) {
|
|
82
|
-
if (padding === this.padding)
|
|
83
|
-
return;
|
|
84
|
-
this.padding = padding;
|
|
85
|
-
this.dirty.all();
|
|
86
|
-
}
|
|
87
|
-
/** Refit only edited leaves and their ancestors. No instance scan on view changes. */
|
|
88
|
-
refit() {
|
|
89
|
-
if (this.dirty.empty)
|
|
90
|
-
return;
|
|
91
|
-
this.dirty.drain((start, end) => {
|
|
92
|
-
for (let block = start; block < end; block++) {
|
|
93
|
-
this.leaf(at(this.tree, this.leaves + block), block);
|
|
94
|
-
}
|
|
95
|
-
// Join each affected parent once per depth, making a full edit linear in the
|
|
96
|
-
// tree size even when multipart crowds use one leaf per instance.
|
|
97
|
-
let first = Math.floor((this.leaves + start) / 2);
|
|
98
|
-
let last = Math.ceil((this.leaves + end) / 2);
|
|
99
|
-
while (first > 0) {
|
|
100
|
-
for (let index = first; index < last; index++)
|
|
101
|
-
this.join(index);
|
|
102
|
-
first = Math.floor(first / 2);
|
|
103
|
-
last = Math.ceil(last / 2);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
enclosing(at(this.tree, 1).geometry, this.sphere);
|
|
107
|
-
}
|
|
108
|
-
leaf(node, block) {
|
|
109
|
-
node.geometry.makeEmpty();
|
|
110
|
-
node.centers.makeEmpty();
|
|
111
|
-
node.smallest = Infinity;
|
|
112
|
-
node.largest = node.reach = 0;
|
|
113
|
-
node.solid = -1;
|
|
114
|
-
node.unsafe = false;
|
|
115
|
-
const end = Math.min((block + 1) * this.block, this.radii.length);
|
|
116
|
-
for (let i = block * this.block; i < end; i++) {
|
|
117
|
-
const radius = at(this.spheres, i * 4 + 3);
|
|
118
|
-
if (radius === 0 && !at(this.unsafe, i))
|
|
119
|
-
continue;
|
|
120
|
-
node.unsafe ||= Boolean(at(this.unsafe, i));
|
|
121
|
-
const error = at(this.errors, i);
|
|
122
|
-
const reach = at(this.radii, i) * (1 + this.padding) + error;
|
|
123
|
-
point.fromArray(this.spheres, i * 4);
|
|
124
|
-
expand(node.centers, point, error);
|
|
125
|
-
expand(node.geometry, point, reach);
|
|
126
|
-
node.smallest = Math.min(node.smallest, radius);
|
|
127
|
-
node.largest = Math.max(node.largest, radius);
|
|
128
|
-
node.reach = Math.max(node.reach, reach);
|
|
129
|
-
}
|
|
130
|
-
enclosing(node.centers, node.sphere);
|
|
131
|
-
}
|
|
132
|
-
join(index) {
|
|
133
|
-
const node = at(this.tree, index);
|
|
134
|
-
const a = at(this.tree, index * 2);
|
|
135
|
-
const b = at(this.tree, index * 2 + 1);
|
|
136
|
-
node.geometry.copy(a.geometry).union(b.geometry);
|
|
137
|
-
node.centers.copy(a.centers).union(b.centers);
|
|
138
|
-
enclosing(node.centers, node.sphere);
|
|
139
|
-
node.smallest = Math.min(a.smallest, b.smallest);
|
|
140
|
-
node.largest = Math.max(a.largest, b.largest);
|
|
141
|
-
node.reach = Math.max(a.reach, b.reach);
|
|
142
|
-
node.unsafe = a.unsafe || b.unsafe;
|
|
143
|
-
node.solid = -1;
|
|
144
|
-
}
|
|
145
|
-
/** Level bounds plus a token only when every block has an unchanged solid choice. */
|
|
146
|
-
select(levels, view, reaches, measured, root) {
|
|
147
|
-
while (this.levelBoxes.length < levels.length)
|
|
148
|
-
this.levelBoxes.push(new Box3());
|
|
149
|
-
for (const box of this.levelBoxes)
|
|
150
|
-
box.makeEmpty();
|
|
151
|
-
this.complete = measured;
|
|
152
|
-
this.changed = false;
|
|
153
|
-
if (!this.sphere.isEmpty()) {
|
|
154
|
-
if (measured)
|
|
155
|
-
this.visit(1, levels, view);
|
|
156
|
-
else
|
|
157
|
-
for (const box of this.levelBoxes)
|
|
158
|
-
box.copy(at(this.tree, 1).geometry);
|
|
159
|
-
}
|
|
160
|
-
const top = at(this.tree, 1);
|
|
161
|
-
const axis = root.getMaxScaleOnAxis();
|
|
162
|
-
// Three transforms a culling sphere by max-axis scale, which underbounds shear.
|
|
163
|
-
const dilation = axis > 0 ? stretch(root) / axis : 1;
|
|
164
|
-
reaches.forEach((sphere, level) => {
|
|
165
|
-
enclosing(at(this.levelBoxes, level), sphere);
|
|
166
|
-
const next = levels[level + 1];
|
|
167
|
-
if (measured && !top.unsafe && !unsafe(view.scale) && view.eye.length() < 1e15 && !sphere.isEmpty() && !view.ortho && view.forced === null && next) {
|
|
168
|
-
const threshold = next.maxPixels * (view.fades ? 1 - FADE : 1);
|
|
169
|
-
const radius = (2 * top.largest * view.scale * (1 + ROUND * 4)) / threshold + top.reach + view.eye.length() * ROUND;
|
|
170
|
-
if (radius < sphere.radius)
|
|
171
|
-
sphere.set(view.eye, radius);
|
|
172
|
-
}
|
|
173
|
-
if (!sphere.isEmpty())
|
|
174
|
-
sphere.radius *= dilation;
|
|
175
|
-
});
|
|
176
|
-
if (!this.complete)
|
|
177
|
-
return undefined;
|
|
178
|
-
if (this.changed)
|
|
179
|
-
this.token = {};
|
|
180
|
-
return this.token;
|
|
181
|
-
}
|
|
182
|
-
visit(index, levels, view) {
|
|
183
|
-
const node = at(this.tree, index);
|
|
184
|
-
if (node.geometry.isEmpty())
|
|
185
|
-
return;
|
|
186
|
-
this.interval(node, view);
|
|
187
|
-
const low = this.low;
|
|
188
|
-
const high = this.high;
|
|
189
|
-
// Infinity marks an unsafe float32 interval; even legal infinite thresholds
|
|
190
|
-
// cannot exclude the source when the GPU's height may be NaN.
|
|
191
|
-
let finest = view.forced ?? (high === Infinity ? 0 : fitting(levels, high));
|
|
192
|
-
const coarsest = view.forced ?? fitting(levels, low);
|
|
193
|
-
if (view.fades && finest > 0 && high >= at(levels, finest).maxPixels * (1 - FADE) * (1 - ROUND))
|
|
194
|
-
finest--;
|
|
195
|
-
if (finest === coarsest) {
|
|
196
|
-
this.changed ||= node.solid !== finest;
|
|
197
|
-
node.solid = finest;
|
|
198
|
-
at(this.levelBoxes, finest).union(node.geometry);
|
|
199
|
-
return;
|
|
200
|
-
}
|
|
201
|
-
// Descendants may hold a proof from an older split; never reuse that after the
|
|
202
|
-
// whole branch was last selected as one solid level.
|
|
203
|
-
this.changed ||= node.solid !== -1;
|
|
204
|
-
node.solid = -1;
|
|
205
|
-
if (index < this.leaves) {
|
|
206
|
-
this.visit(index * 2, levels, view);
|
|
207
|
-
this.visit(index * 2 + 1, levels, view);
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
this.complete = false;
|
|
211
|
-
for (let level = finest; level <= coarsest; level++)
|
|
212
|
-
at(this.levelBoxes, level).union(node.geometry);
|
|
213
|
-
}
|
|
214
|
-
interval(node, view) {
|
|
215
|
-
const distance = node.sphere.center.distanceTo(view.eye);
|
|
216
|
-
const error = view.eye.length() * ROUND;
|
|
217
|
-
const near = view.ortho ? 1 : Math.max(distance - node.sphere.radius - error, 1e-6);
|
|
218
|
-
const far = view.ortho ? 1 : Math.max(distance + node.sphere.radius + error, 1e-6);
|
|
219
|
-
this.low = ((2 * node.smallest * view.scale) / far) * (1 - ROUND * 4);
|
|
220
|
-
this.high = ((2 * node.largest * view.scale) / near) * (1 + ROUND * 4);
|
|
221
|
-
// Float32 overflow/underflow can invalidate a real-number interval. Keep all
|
|
222
|
-
// levels in these unusual cases instead of making an unsupported proof.
|
|
223
|
-
if (!Number.isFinite(this.high) ||
|
|
224
|
-
this.high > 1e30 ||
|
|
225
|
-
this.low < 1e-30 ||
|
|
226
|
-
node.unsafe ||
|
|
227
|
-
unsafe(view.scale) ||
|
|
228
|
-
distance > 1e15 ||
|
|
229
|
-
view.eye.length() > 1e15) {
|
|
230
|
-
this.low = 0;
|
|
231
|
-
this.high = Infinity;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
/** Upper bound on the largest singular value, exact for orthogonal matrix axes. */
|
|
236
|
-
export function stretch(matrix) {
|
|
237
|
-
const e = matrix.elements;
|
|
238
|
-
const xy = Math.abs(e[0] * e[4] + e[1] * e[5] + e[2] * e[6]);
|
|
239
|
-
const xz = Math.abs(e[0] * e[8] + e[1] * e[9] + e[2] * e[10]);
|
|
240
|
-
const yz = Math.abs(e[4] * e[8] + e[5] * e[9] + e[6] * e[10]);
|
|
241
|
-
return Math.sqrt(Math.max(e[0] ** 2 + e[1] ** 2 + e[2] ** 2 + xy + xz, e[4] ** 2 + e[5] ** 2 + e[6] ** 2 + xy + yz, e[8] ** 2 + e[9] ** 2 + e[10] ** 2 + xz + yz));
|
|
242
|
-
}
|
|
243
|
-
function fitting(levels, height) {
|
|
244
|
-
for (let i = levels.length - 1; i > 0; i--)
|
|
245
|
-
if (height <= at(levels, i).maxPixels)
|
|
246
|
-
return i;
|
|
247
|
-
return 0;
|
|
248
|
-
}
|
|
249
|
-
function expand(box, center, radius) {
|
|
250
|
-
box.expandByPoint(extent.copy(center).addScalar(-radius));
|
|
251
|
-
box.expandByPoint(extent.copy(center).addScalar(radius));
|
|
252
|
-
}
|
|
253
|
-
function at(values, index) {
|
|
254
|
-
const value = values[index];
|
|
255
|
-
if (value === undefined)
|
|
256
|
-
throw new Error(`InstancedLod bounds: index ${index} out of range`);
|
|
257
|
-
return value;
|
|
258
|
-
}
|
|
259
|
-
// These broad limits stay well inside float32's squared-length and product range.
|
|
260
|
-
// Outside them, retain all levels and let the GPU make the original selection.
|
|
261
|
-
function unsafe(value) {
|
|
262
|
-
return !Number.isFinite(value) || Math.abs(value) > 1e15 || (value !== 0 && Math.abs(value) < 1e-15);
|
|
263
|
-
}
|
|
264
|
-
function enclosing(box, sphere) {
|
|
265
|
-
box.getBoundingSphere(sphere);
|
|
266
|
-
if (!Number.isFinite(sphere.radius) || !Number.isFinite(sphere.center.lengthSq())) {
|
|
267
|
-
sphere.center.set(0, 0, 0);
|
|
268
|
-
sphere.radius = Infinity;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
//# sourceMappingURL=bounds.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../../src/instanced/bounds.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/** Changed indices, drained as ordered runs without scanning unchanged instances. */
|
|
2
|
-
export declare class Dirty {
|
|
3
|
-
private readonly count;
|
|
4
|
-
private readonly bits;
|
|
5
|
-
private readonly words;
|
|
6
|
-
constructor(count: number);
|
|
7
|
-
get empty(): boolean;
|
|
8
|
-
add(index: number): void;
|
|
9
|
-
all(): void;
|
|
10
|
-
/** End is exclusive. Edits made by the visitor are not supported. */
|
|
11
|
-
drain(visit: (start: number, end: number) => void): void;
|
|
12
|
-
}
|
package/dist/instanced/dirty.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/** Changed indices, drained as ordered runs without scanning unchanged instances. */
|
|
2
|
-
export class Dirty {
|
|
3
|
-
count;
|
|
4
|
-
bits;
|
|
5
|
-
words = [];
|
|
6
|
-
constructor(count) {
|
|
7
|
-
this.count = count;
|
|
8
|
-
this.bits = new Uint32Array(Math.ceil(count / 32));
|
|
9
|
-
}
|
|
10
|
-
get empty() {
|
|
11
|
-
return this.words.length === 0;
|
|
12
|
-
}
|
|
13
|
-
add(index) {
|
|
14
|
-
const word = index >>> 5;
|
|
15
|
-
const before = at(this.bits, word);
|
|
16
|
-
this.bits[word] = before | (1 << (index & 31));
|
|
17
|
-
if (before !== 0)
|
|
18
|
-
return;
|
|
19
|
-
this.words.push(word);
|
|
20
|
-
}
|
|
21
|
-
all() {
|
|
22
|
-
this.words.length = 0;
|
|
23
|
-
this.bits.fill(0xffffffff);
|
|
24
|
-
for (let i = 0; i < this.bits.length; i++)
|
|
25
|
-
this.words.push(i);
|
|
26
|
-
if (this.bits.length > 0 && this.count % 32)
|
|
27
|
-
this.bits[this.bits.length - 1] = 0xffffffff >>> (32 - (this.count % 32));
|
|
28
|
-
}
|
|
29
|
-
/** End is exclusive. Edits made by the visitor are not supported. */
|
|
30
|
-
drain(visit) {
|
|
31
|
-
let start = -1;
|
|
32
|
-
let end = -1;
|
|
33
|
-
this.words.sort((a, b) => a - b);
|
|
34
|
-
for (const word of this.words) {
|
|
35
|
-
let bits = at(this.bits, word);
|
|
36
|
-
this.bits[word] = 0;
|
|
37
|
-
while (bits !== 0) {
|
|
38
|
-
const index = word * 32 + 31 - Math.clz32(bits & -bits);
|
|
39
|
-
bits &= bits - 1;
|
|
40
|
-
if (index === end) {
|
|
41
|
-
end++;
|
|
42
|
-
continue;
|
|
43
|
-
}
|
|
44
|
-
if (start >= 0)
|
|
45
|
-
visit(start, end);
|
|
46
|
-
start = index;
|
|
47
|
-
end = index + 1;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
this.words.length = 0;
|
|
51
|
-
if (start >= 0)
|
|
52
|
-
visit(start, end);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function at(values, index) {
|
|
56
|
-
const value = values[index];
|
|
57
|
-
if (value === undefined)
|
|
58
|
-
throw new Error(`Dirty: index ${index} out of range`);
|
|
59
|
-
return value;
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=dirty.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dirty.js","sourceRoot":"","sources":["../../src/instanced/dirty.ts"],"names":[],"mappings":"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"}
|