@drawcall/lod 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -8
- package/dist/bake.d.ts +16 -2
- package/dist/bake.js +92 -4
- package/dist/bake.js.map +1 -1
- package/dist/baked/index.d.ts +2 -2
- package/dist/baked/index.js +2 -2
- package/dist/baked/interior/faces.js +4 -2
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.js +1 -1
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.d.ts +1 -1
- package/dist/baked/interior/rooms.js +1 -1
- package/dist/dispose.d.ts +3 -3
- package/dist/dispose.js +6 -6
- package/dist/dispose.js.map +1 -1
- package/dist/foliage.d.ts +32 -0
- package/dist/foliage.js +137 -0
- package/dist/foliage.js.map +1 -0
- package/dist/impostor/bake/index.d.ts +3 -3
- package/dist/impostor/bake/index.js +12 -3
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/source.d.ts +2 -1
- package/dist/impostor/bake/source.js +2 -2
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/impostor.d.ts +1 -1
- package/dist/impostor/impostor.js +1 -1
- package/dist/impostor/ktx2/encode.js +5 -2
- package/dist/impostor/ktx2/encode.js.map +1 -1
- package/dist/impostor/ktx2/uastc.js +3 -2
- package/dist/impostor/ktx2/uastc.js.map +1 -1
- package/dist/impostor/ktx2/worker.js +0 -2
- package/dist/impostor/ktx2/worker.js.map +1 -1
- package/dist/impostor/mesh/card.d.ts +1 -1
- package/dist/impostor/mesh/index.d.ts +2 -2
- package/dist/impostor/mesh/index.js +3 -3
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/index.d.ts +3 -6
- package/dist/index.js +3 -6
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.d.ts +13 -25
- package/dist/instanced/camera.js +17 -42
- package/dist/instanced/camera.js.map +1 -1
- package/dist/instanced/clusters.d.ts +68 -0
- package/dist/instanced/clusters.js +172 -0
- package/dist/instanced/clusters.js.map +1 -0
- package/dist/instanced/cull.d.ts +3 -3
- package/dist/instanced/cull.js +2 -2
- package/dist/instanced/cull.js.map +1 -1
- package/dist/instanced/instances.d.ts +39 -0
- package/dist/instanced/instances.js +104 -0
- package/dist/instanced/instances.js.map +1 -0
- package/dist/instanced/key.d.ts +1 -1
- package/dist/instanced/key.js +1 -1
- package/dist/instanced/key.js.map +1 -1
- package/dist/instanced/levels.d.ts +9 -9
- package/dist/instanced/levels.js +7 -6
- package/dist/instanced/levels.js.map +1 -1
- package/dist/instanced/lists.d.ts +29 -39
- package/dist/instanced/lists.js +45 -62
- package/dist/instanced/lists.js.map +1 -1
- package/dist/instanced/measure.d.ts +2 -2
- package/dist/instanced/measure.js +2 -2
- package/dist/instanced/meshes.d.ts +11 -9
- package/dist/instanced/meshes.js +26 -16
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.d.ts +16 -12
- package/dist/instanced/mirror.js +51 -12
- package/dist/instanced/mirror.js.map +1 -1
- package/dist/instanced/raycast.d.ts +6 -9
- package/dist/instanced/raycast.js +15 -18
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +22 -73
- package/dist/instanced/rows.js +24 -189
- package/dist/instanced/rows.js.map +1 -1
- package/dist/instanced/shape.d.ts +3 -1
- package/dist/instanced/shape.js +6 -3
- package/dist/instanced/shape.js.map +1 -1
- package/dist/instanced/sort.d.ts +36 -34
- package/dist/instanced/sort.js +168 -132
- package/dist/instanced/sort.js.map +1 -1
- package/dist/instanced/update.d.ts +17 -12
- package/dist/instanced/update.js +64 -85
- package/dist/instanced/update.js.map +1 -1
- package/dist/levels/compile/index.d.ts +4 -2
- package/dist/levels/compile/index.js +10 -2
- package/dist/levels/compile/index.js.map +1 -1
- package/dist/levels/compile/pipelines.d.ts +1 -1
- package/dist/levels/compile/pipelines.js +1 -6
- package/dist/levels/compile/pipelines.js.map +1 -1
- package/dist/levels/draw.d.ts +1 -1
- package/dist/levels/draw.js +3 -3
- package/dist/levels/fade.d.ts +13 -22
- package/dist/levels/fade.js +17 -38
- package/dist/levels/fade.js.map +1 -1
- package/dist/levels/index.d.ts +7 -7
- package/dist/levels/index.js +1 -1
- package/dist/levels/item.d.ts +10 -10
- package/dist/levels/item.js +15 -23
- package/dist/levels/item.js.map +1 -1
- package/dist/levels/load.d.ts +1 -1
- package/dist/levels/load.js +5 -3
- package/dist/levels/load.js.map +1 -1
- package/dist/levels/manager.d.ts +30 -31
- package/dist/levels/manager.js +75 -62
- package/dist/levels/manager.js.map +1 -1
- package/dist/levels/material.d.ts +2 -2
- package/dist/levels/material.js +2 -2
- package/dist/levels/renderer.d.ts +8 -5
- package/dist/levels/renderer.js +20 -4
- package/dist/levels/renderer.js.map +1 -1
- package/dist/levels/requests.d.ts +4 -1
- package/dist/levels/requests.js +3 -1
- package/dist/levels/requests.js.map +1 -1
- package/dist/loader/context.d.ts +9 -11
- package/dist/loader/context.js +12 -7
- package/dist/loader/context.js.map +1 -1
- package/dist/loader/entry.d.ts +4 -0
- package/dist/loader/entry.js +43 -0
- package/dist/loader/entry.js.map +1 -0
- package/dist/loader/index.d.ts +49 -35
- package/dist/loader/index.js +123 -135
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/level.js +5 -5
- package/dist/loader/level.js.map +1 -1
- package/dist/loader/node.d.ts +26 -0
- package/dist/loader/node.js +199 -0
- package/dist/loader/node.js.map +1 -0
- package/dist/loader/request.d.ts +11 -44
- package/dist/loader/request.js +7 -47
- package/dist/loader/request.js.map +1 -1
- package/dist/loader/url.d.ts +10 -9
- package/dist/loader/url.js +21 -17
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.d.ts +122 -62
- package/dist/lod.js +332 -187
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.d.ts +1 -1
- package/dist/meshopt.js +3 -2
- package/dist/meshopt.js.map +1 -1
- package/dist/node-process.d.ts +5 -0
- package/dist/node-process.js +6 -0
- package/dist/node-process.js.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.js +5 -0
- package/dist/node.js.map +1 -0
- package/dist/simplify/index.d.ts +2 -2
- package/dist/simplify/index.js +7 -7
- package/dist/simplify/index.js.map +1 -1
- package/dist/source/detail.d.ts +7 -2
- package/dist/source/detail.js +26 -22
- package/dist/source/detail.js.map +1 -1
- package/dist/source/sampler.js +5 -2
- package/dist/source/sampler.js.map +1 -1
- package/dist/three.d.ts +8 -7
- package/dist/three.js +5 -4
- package/dist/three.js.map +1 -1
- package/dist/wind/bounds.js +1 -1
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.d.ts +1 -1
- package/dist/wind/hooks.js +1 -1
- package/dist/wind/index.d.ts +3 -3
- package/dist/wind/index.js +11 -9
- package/dist/wind/index.js.map +1 -1
- package/package.json +10 -6
- package/skills/lod/SKILL.md +65 -54
- package/dist/gpu.d.ts +0 -39
- package/dist/gpu.js +0 -41
- package/dist/gpu.js.map +0 -1
- package/dist/instanced/chunk.d.ts +0 -97
- package/dist/instanced/chunk.js +0 -156
- package/dist/instanced/chunk.js.map +0 -1
- package/dist/instanced/chunks.d.ts +0 -60
- package/dist/instanced/chunks.js +0 -208
- package/dist/instanced/chunks.js.map +0 -1
- package/dist/instanced/index.d.ts +0 -120
- package/dist/instanced/index.js +0 -290
- package/dist/instanced/index.js.map +0 -1
- package/dist/instanced/pages/buffers.d.ts +0 -37
- package/dist/instanced/pages/buffers.js +0 -15
- package/dist/instanced/pages/buffers.js.map +0 -1
- package/dist/instanced/pages/chunk.d.ts +0 -51
- package/dist/instanced/pages/chunk.js +0 -81
- package/dist/instanced/pages/chunk.js.map +0 -1
- package/dist/instanced/pages/index.d.ts +0 -74
- package/dist/instanced/pages/index.js +0 -269
- package/dist/instanced/pages/index.js.map +0 -1
- package/dist/instanced/pages/passes.d.ts +0 -21
- package/dist/instanced/pages/passes.js +0 -52
- package/dist/instanced/pages/passes.js.map +0 -1
- package/dist/instanced/pages/slots.d.ts +0 -11
- package/dist/instanced/pages/slots.js +0 -90
- package/dist/instanced/pages/slots.js.map +0 -1
- package/dist/instanced/pages/workgroup.d.ts +0 -14
- package/dist/instanced/pages/workgroup.js +0 -38
- package/dist/instanced/pages/workgroup.js.map +0 -1
- package/dist/levels/wait.d.ts +0 -27
- package/dist/levels/wait.js +0 -61
- package/dist/levels/wait.js.map +0 -1
- package/dist/loader/cache.d.ts +0 -12
- package/dist/loader/cache.js +0 -68
- package/dist/loader/cache.js.map +0 -1
- package/dist/loader/dependencies.d.ts +0 -32
- package/dist/loader/dependencies.js +0 -113
- package/dist/loader/dependencies.js.map +0 -1
package/dist/levels/fade.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Color, Matrix4, StorageBufferAttribute, StorageInstancedBufferAttribute, } from "three/webgpu";
|
|
2
|
-
import { Fn, NodeUpdateType, cameraProjectionMatrix, dot, float, fract, instanceIndex, modelWorldMatrix, normalLocal, positionLocal, transformNormal, varyingProperty, screenCoordinate, screenSize, select, storage, uniform, uniformGroup, varying, vec2, vec3, } from "three/tsl";
|
|
2
|
+
import { Fn, NodeUpdateType, bool, cameraProjectionMatrix, dot, float, fract, instanceIndex, modelWorldMatrix, normalLocal, positionLocal, transformNormal, varyingProperty, screenCoordinate, screenSize, select, storage, uniform, uniformGroup, varying, vec2, vec3, } from "three/tsl";
|
|
3
3
|
import { isImpostorMesh, isInstancedMesh, isStorageInstanced } from "../three.js";
|
|
4
4
|
import { column, isOrthographic, maxScale } from "../tsl.js";
|
|
5
5
|
/**
|
|
@@ -13,29 +13,14 @@ export const fadeSourceOf = (mesh) => sources.get(mesh);
|
|
|
13
13
|
const WHITE = new Color(1, 1, 1);
|
|
14
14
|
const of = (object) => (object ? sources.get(object) : undefined);
|
|
15
15
|
// Per-object values, shared by every material: each draw reads its own.
|
|
16
|
-
const
|
|
17
|
-
const draw = of(object);
|
|
18
|
-
return draw?.kind === "object" ? draw.fade : 0;
|
|
19
|
-
});
|
|
20
|
-
// A mesh no level draws is never too small to cast.
|
|
21
|
-
const objectDiameter = uniform(0).onObjectUpdate(({ object }) => {
|
|
22
|
-
const draw = of(object);
|
|
23
|
-
return draw?.kind === "object" ? draw.diameter : 3.4e38;
|
|
24
|
-
});
|
|
25
|
-
const instanceRadius = uniform(0).onObjectUpdate(({ object }) => {
|
|
26
|
-
const draw = of(object);
|
|
27
|
-
return draw?.kind === "instances" ? draw.radius : 0;
|
|
28
|
-
});
|
|
16
|
+
const instanceRadius = uniform(0).onObjectUpdate(({ object }) => of(object)?.radius ?? 0);
|
|
29
17
|
/** This draw's debug tint (see `Lod.debug`). */
|
|
30
18
|
export const tint = uniform(new Color(1, 1, 1)).onObjectUpdate(({ object }) => of(object)?.tint ?? WHITE);
|
|
31
19
|
/** Interleaved gradient noise over the pixels of the target being drawn. */
|
|
32
20
|
export const dither = (pixel) => fract(float(52.9829189).mul(fract(dot(pixel, vec2(0.06711056, 0.00583715)))));
|
|
33
|
-
/** The level mesh `object` is, when it is
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return draw?.kind === "instances" ? (draw.level ?? null) : null;
|
|
37
|
-
}
|
|
38
|
-
/** The instances where `object` reads its matrices and colours from storage: its own, or its InstancedLod's; else null. */
|
|
21
|
+
/** The level mesh `object` is, when it is a Lod's plain one. */
|
|
22
|
+
const levelOf = (object) => of(object)?.level ?? null;
|
|
23
|
+
/** The instances where `object` reads its matrices and colours from storage: its own, or its Lod's; else null. */
|
|
39
24
|
function instancesOf(object) {
|
|
40
25
|
if (isImpostorMesh(object))
|
|
41
26
|
return { matrices: object.instanceMatrix, colors: object.instanceColor };
|
|
@@ -44,7 +29,7 @@ function instancesOf(object) {
|
|
|
44
29
|
return level.instances;
|
|
45
30
|
return isInstancedMesh(object) && isStorageInstanced(object.instanceMatrix) ? { matrices: object.instanceMatrix, colors: null } : null;
|
|
46
31
|
}
|
|
47
|
-
/** Where `object`'s geometry space sits in its source's: moved for
|
|
32
|
+
/** Where `object`'s geometry space sits in its source's: moved for a Lod's plain level mesh (see `FadeSource`). */
|
|
48
33
|
export const spaceOf = (object) => levelOf(object)?.space ?? null;
|
|
49
34
|
// The draw buffers below are replaced per object, so they stay out of three's texture-keyed
|
|
50
35
|
// binding caches: each render object has its own bindings of this group, while its shader
|
|
@@ -64,7 +49,7 @@ const matrices = storage(identity, "mat4", 0)
|
|
|
64
49
|
/** `object`'s slots as `camera` draws it, when it draws slots. */
|
|
65
50
|
function slotsOf(object, camera) {
|
|
66
51
|
const draw = of(object);
|
|
67
|
-
return draw?.
|
|
52
|
+
return draw?.slots && camera ? draw.slots(camera) : null;
|
|
68
53
|
}
|
|
69
54
|
const zero = new StorageBufferAttribute(new Float32Array(1), 1);
|
|
70
55
|
const fades = storage(zero, "float", 0)
|
|
@@ -79,11 +64,7 @@ const indices = storage(none, "uint", 0)
|
|
|
79
64
|
.toReadOnly()
|
|
80
65
|
.onObjectUpdate(({ object, camera }) => slotsOf(object, camera)?.indices ?? none);
|
|
81
66
|
/** 1 when the draw's instances are slots the instance pass for each camera fills, else 0. */
|
|
82
|
-
const slotted = uniform(0, "uint").onObjectUpdate(({ object }) =>
|
|
83
|
-
const draw = of(object);
|
|
84
|
-
return Number(draw?.kind === "instances" && draw.slots !== null);
|
|
85
|
-
});
|
|
86
|
-
const instanceCaster = uniform(false).onObjectUpdate(({ object }) => of(object)?.kind === "instances");
|
|
67
|
+
const slotted = uniform(0, "uint").onObjectUpdate(({ object }) => Number(!!of(object)?.slots));
|
|
87
68
|
/** The instance this draw's instance index stands for: the one in its slot, or itself. */
|
|
88
69
|
const instance = Fn(() => slotted.equal(1).select(indices.element(instanceIndex), instanceIndex));
|
|
89
70
|
/** This draw's instance matrix when its matrices live in storage, else null. */
|
|
@@ -115,12 +96,9 @@ export function placeInstances(builder) {
|
|
|
115
96
|
/** This draw's signed fade. */
|
|
116
97
|
export const fade = Fn((builder) => {
|
|
117
98
|
if (isImpostorMesh(builder.object))
|
|
118
|
-
return varying(fades.element(instanceIndex.mul(slotted)))
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
const draw = sources.get(builder.object);
|
|
122
|
-
if (draw?.kind !== "instances" || !draw.slots)
|
|
123
|
-
return objectFade;
|
|
99
|
+
return varying(fades.element(instanceIndex.mul(slotted))).setInterpolation("flat");
|
|
100
|
+
if (!sources.get(builder.object)?.slots)
|
|
101
|
+
return float(0);
|
|
124
102
|
// Constant across the primitive: keep compute-written slots out of fragment bindings.
|
|
125
103
|
return varying(fades.element(instanceIndex)).setInterpolation("flat");
|
|
126
104
|
});
|
|
@@ -136,11 +114,12 @@ export const keepsPixel = Fn(() => {
|
|
|
136
114
|
* chance, flickering as it or the map moves. Only valid in a shadow map render.
|
|
137
115
|
*/
|
|
138
116
|
const tooSmallToCast = Fn((builder) => {
|
|
139
|
-
const object = builder
|
|
140
|
-
const
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
117
|
+
const { object } = builder;
|
|
118
|
+
const instance = sources.has(object) ? instanceMatrixOf(object) : null;
|
|
119
|
+
// A mesh drawing no instances of a Lod's or an ImpostorMesh's is never too small to cast.
|
|
120
|
+
if (!instance)
|
|
121
|
+
return bool(false);
|
|
122
|
+
const diameter = maxScale(modelWorldMatrix.mul(instance)).mul(instanceRadius).mul(2);
|
|
144
123
|
// projection[1][1] is 2 × zoom / (top - bottom)
|
|
145
124
|
const texel = float(2).div(column(cameraProjectionMatrix, 1).y.mul(screenSize.y));
|
|
146
125
|
return isOrthographic(cameraProjectionMatrix).and(diameter.lessThan(texel));
|
package/dist/levels/fade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fade.js","sourceRoot":"","sources":["../../src/levels/fade.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EAEL,OAAO,EACP,sBAAsB,EACtB,+BAA+B,GAIhC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,EAAE,EACF,cAAc,EACd,sBAAsB,EACtB,GAAG,EACH,KAAK,EACL,KAAK,EACL,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,OAAO,EACP,OAAO,EACP,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,IAAI,GACL,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"fade.js","sourceRoot":"","sources":["../../src/levels/fade.ts"],"names":[],"mappings":"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"}
|
package/dist/levels/index.d.ts
CHANGED
|
@@ -3,12 +3,12 @@ import type { d } from "typegpu";
|
|
|
3
3
|
import { type DrawLevels } from "./draw.js";
|
|
4
4
|
import { LevelHeights } from "./load.js";
|
|
5
5
|
/**
|
|
6
|
-
* One level of a Lod
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* One level of a Lod: an object given, or one `load` makes when a camera first needs it, which `box` bounds meanwhile.
|
|
7
|
+
* `lod.levels` holds the same shape, with `object` the Lod's own copy, once there is one: the template its level meshes
|
|
8
|
+
* are made from, never in the scene.
|
|
9
9
|
*
|
|
10
10
|
* Objects you give or load are yours to dispose, as a three Mesh never disposes its geometry or material; a Lod frees
|
|
11
|
-
* only what it made of them.
|
|
11
|
+
* only what it made of them. CachedLodLoader's are freed when the last Lod holding them is disposed (see `hold`).
|
|
12
12
|
*/
|
|
13
13
|
export interface LodLevel {
|
|
14
14
|
/** The level's object: yours to dispose. */
|
|
@@ -30,9 +30,9 @@ export interface LodLevel {
|
|
|
30
30
|
maxPixels?: number;
|
|
31
31
|
/**
|
|
32
32
|
* Holds what the level's object comes from while a Lod draws it: every Lod made from the level, a copy or clone
|
|
33
|
-
* included, calls each distinct `hold` once as it is made, and the release it answers once it is disposed.
|
|
33
|
+
* included, calls each distinct `hold` once as it is made, and the release it answers once it is disposed. CachedLodLoader's
|
|
34
34
|
* levels free what they loaded when the last release is called, which spends them: a Lod made from them later throws.
|
|
35
|
-
*
|
|
35
|
+
* CachedLodLoader's levels no Lod ever holds are never freed: they are yours until a Lod holds them.
|
|
36
36
|
*/
|
|
37
37
|
hold?: () => () => void;
|
|
38
38
|
}
|
|
@@ -72,7 +72,7 @@ interface Measurable {
|
|
|
72
72
|
*/
|
|
73
73
|
export declare function resolveThresholds(levels: readonly Measurable[], diameter: number, who: string): number[];
|
|
74
74
|
/**
|
|
75
|
-
* A Lod's
|
|
75
|
+
* A Lod's levels as levelsToDraw reads them (see `drawLevels`), checked and encoded again only when a
|
|
76
76
|
* threshold or the forced level has changed. What it returns is shared: read it, do not hold on to it.
|
|
77
77
|
*/
|
|
78
78
|
export declare class EncodedLevels {
|
package/dist/levels/index.js
CHANGED
|
@@ -93,7 +93,7 @@ export function resolveThresholds(levels, diameter, who) {
|
|
|
93
93
|
return thresholds;
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
96
|
-
* A Lod's
|
|
96
|
+
* A Lod's levels as levelsToDraw reads them (see `drawLevels`), checked and encoded again only when a
|
|
97
97
|
* threshold or the forced level has changed. What it returns is shared: read it, do not hold on to it.
|
|
98
98
|
*/
|
|
99
99
|
export class EncodedLevels {
|
package/dist/levels/item.d.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import { type LoadingManager, type
|
|
1
|
+
import { type LoadingManager, type Renderer } from "three/webgpu";
|
|
2
2
|
/**
|
|
3
3
|
* A Lod's item on a LoadingManager, held while it loads: the manager hears of it in a microtask, once the render that
|
|
4
4
|
* changed it has returned, so what an app's callback does, such as throw or render, happens outside three's render.
|
|
5
5
|
*/
|
|
6
6
|
export declare class LoadingItem {
|
|
7
|
-
private readonly lod;
|
|
8
|
-
/** The item's name: the kind of Lod and its uuid. */
|
|
9
7
|
private readonly name;
|
|
10
|
-
|
|
11
|
-
/** The LoadingManager given; else the nearest Lod above's, else three's default (see `manager`). */
|
|
8
|
+
/** The LoadingManager given; else three's default (see `manager`). */
|
|
12
9
|
given: LoadingManager | undefined;
|
|
13
10
|
/** The LoadingManager the held item started on, which it ends on. */
|
|
14
11
|
private holding;
|
|
@@ -16,15 +13,18 @@ export declare class LoadingItem {
|
|
|
16
13
|
private updated;
|
|
17
14
|
private renders;
|
|
18
15
|
private looking;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
name: string, renderer: Renderer);
|
|
16
|
+
/** `name` names the item: the Lod and its uuid. */
|
|
17
|
+
constructor(name: string);
|
|
22
18
|
/** Where the item goes. */
|
|
23
19
|
get manager(): LoadingManager;
|
|
24
20
|
/** A render updated the Lod: the next look at the renderer's renders does not end the item. */
|
|
25
21
|
touch(): void;
|
|
26
|
-
/**
|
|
27
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Hold the item if `held` and `renderer`, the one drawing the Lod, is known, else end it; while it is held, look at
|
|
24
|
+
* the renderer's renders (see `look`). Before a render has updated the Lod it holds none: a host loading the Lod
|
|
25
|
+
* renders it only once its LoadingManager is done.
|
|
26
|
+
*/
|
|
27
|
+
sync(renderer: Renderer | null, held: boolean): void;
|
|
28
28
|
/** Report a failure on the LoadingManager the item is held on, and end the item. */
|
|
29
29
|
fail(): void;
|
|
30
30
|
private hold;
|
package/dist/levels/item.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { DefaultLoadingManager } from "three/webgpu";
|
|
2
|
-
import { hasLoadingManager } from "./renderer.js";
|
|
3
2
|
/** How long a held item waits between looks at its renderer's renders (see `look`): a frame's time. */
|
|
4
3
|
const LOOK_MS = 16;
|
|
5
4
|
/**
|
|
@@ -7,10 +6,8 @@ const LOOK_MS = 16;
|
|
|
7
6
|
* changed it has returned, so what an app's callback does, such as throw or render, happens outside three's render.
|
|
8
7
|
*/
|
|
9
8
|
export class LoadingItem {
|
|
10
|
-
lod;
|
|
11
9
|
name;
|
|
12
|
-
|
|
13
|
-
/** The LoadingManager given; else the nearest Lod above's, else three's default (see `manager`). */
|
|
10
|
+
/** The LoadingManager given; else three's default (see `manager`). */
|
|
14
11
|
given;
|
|
15
12
|
/** The LoadingManager the held item started on, which it ends on. */
|
|
16
13
|
holding;
|
|
@@ -18,34 +15,30 @@ export class LoadingItem {
|
|
|
18
15
|
updated = false;
|
|
19
16
|
renders = 0;
|
|
20
17
|
looking = false;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
name, renderer) {
|
|
24
|
-
this.lod = lod;
|
|
18
|
+
/** `name` names the item: the Lod and its uuid. */
|
|
19
|
+
constructor(name) {
|
|
25
20
|
this.name = name;
|
|
26
|
-
this.renderer = renderer;
|
|
27
21
|
}
|
|
28
22
|
/** Where the item goes. */
|
|
29
23
|
get manager() {
|
|
30
|
-
|
|
31
|
-
return this.given;
|
|
32
|
-
for (let node = this.lod.parent; node; node = node.parent)
|
|
33
|
-
if (hasLoadingManager(node))
|
|
34
|
-
return node.manager;
|
|
35
|
-
return DefaultLoadingManager;
|
|
24
|
+
return this.given ?? DefaultLoadingManager;
|
|
36
25
|
}
|
|
37
26
|
/** A render updated the Lod: the next look at the renderer's renders does not end the item. */
|
|
38
27
|
touch() {
|
|
39
28
|
this.updated = true;
|
|
40
29
|
}
|
|
41
|
-
/**
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
30
|
+
/**
|
|
31
|
+
* Hold the item if `held` and `renderer`, the one drawing the Lod, is known, else end it; while it is held, look at
|
|
32
|
+
* the renderer's renders (see `look`). Before a render has updated the Lod it holds none: a host loading the Lod
|
|
33
|
+
* renders it only once its LoadingManager is done.
|
|
34
|
+
*/
|
|
35
|
+
sync(renderer, held) {
|
|
36
|
+
this.hold(held && renderer !== null);
|
|
37
|
+
if (!renderer || !this.holding || this.looking)
|
|
45
38
|
return;
|
|
46
39
|
// The first look only counts the renders: those still to come in this render are not without an update.
|
|
47
40
|
this.updated = true;
|
|
48
|
-
this.look();
|
|
41
|
+
this.look(renderer);
|
|
49
42
|
}
|
|
50
43
|
/** Report a failure on the LoadingManager the item is held on, and end the item. */
|
|
51
44
|
fail() {
|
|
@@ -75,8 +68,7 @@ export class LoadingItem {
|
|
|
75
68
|
* starts it again. Renders of other scenes in a separate task can end it early, and the next update reopens it; a
|
|
76
69
|
* renderer that only compiles holds a hidden Lod's item.
|
|
77
70
|
*/
|
|
78
|
-
look() {
|
|
79
|
-
const { renderer } = this;
|
|
71
|
+
look(renderer) {
|
|
80
72
|
this.looking = true;
|
|
81
73
|
const timer = setTimeout(() => {
|
|
82
74
|
this.looking = false;
|
|
@@ -87,7 +79,7 @@ export class LoadingItem {
|
|
|
87
79
|
return this.hold(false);
|
|
88
80
|
this.renders = renders;
|
|
89
81
|
this.updated = false;
|
|
90
|
-
this.look();
|
|
82
|
+
this.look(renderer);
|
|
91
83
|
}, LOOK_MS);
|
|
92
84
|
// A held item must not hold Node.js open.
|
|
93
85
|
if (typeof timer === "object" && timer !== null && "unref" in timer && typeof timer.unref === "function")
|
package/dist/levels/item.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.js","sourceRoot":"","sources":["../../src/levels/item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"item.js","sourceRoot":"","sources":["../../src/levels/item.ts"],"names":[],"mappings":"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"}
|
package/dist/levels/load.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import { type Draw, type DrawLevels } from "./draw.js";
|
|
|
9
9
|
export declare function levelsToLoad(ranges: Iterable<readonly [shortest: number, tallest: number]>, heights: LevelHeights): number;
|
|
10
10
|
/**
|
|
11
11
|
* The levels levelsToDraw draws with `levels` and the levels of `loaded` loaded, no arrival under way, at every height,
|
|
12
|
-
* by intervals of heights: worked out once, as it walks every
|
|
12
|
+
* by intervals of heights: worked out once, as it walks every cluster's heights each frame and each of its CPU calls
|
|
13
13
|
* through TypeGPU copies its arguments. What it draws changes only at a level's maxPixels and where its fade starts,
|
|
14
14
|
* whatever is loaded (which only says what stands in for a level): it is asked at the ends of a few f32 steps around
|
|
15
15
|
* each such height, and between them where it changes. levelsToDraw stays the only answer; this is where it changes.
|
package/dist/levels/load.js
CHANGED
|
@@ -26,7 +26,7 @@ export function levelsToLoad(ranges, heights) {
|
|
|
26
26
|
const SLACK = 4;
|
|
27
27
|
/**
|
|
28
28
|
* The levels levelsToDraw draws with `levels` and the levels of `loaded` loaded, no arrival under way, at every height,
|
|
29
|
-
* by intervals of heights: worked out once, as it walks every
|
|
29
|
+
* by intervals of heights: worked out once, as it walks every cluster's heights each frame and each of its CPU calls
|
|
30
30
|
* through TypeGPU copies its arguments. What it draws changes only at a level's maxPixels and where its fade starts,
|
|
31
31
|
* whatever is loaded (which only says what stands in for a level): it is asked at the ends of a few f32 steps around
|
|
32
32
|
* each such height, and between them where it changes. levelsToDraw stays the only answer; this is where it changes.
|
|
@@ -125,10 +125,12 @@ function windowsOf(levels) {
|
|
|
125
125
|
}
|
|
126
126
|
const float = new Float32Array(1);
|
|
127
127
|
const bits = new Uint32Array(float.buffer);
|
|
128
|
-
/** The
|
|
128
|
+
/** The bits of ANY_HEIGHT, the largest finite f32. */
|
|
129
|
+
const LARGEST = 0x7f7fffff;
|
|
130
|
+
/** The f32 `steps` steps from `value`, a height at or above 0, not below 0 nor above ANY_HEIGHT. */
|
|
129
131
|
function step(value, steps) {
|
|
130
132
|
float[0] = value;
|
|
131
|
-
bits[0] = Math.max(at(bits, 0) + steps, 0);
|
|
133
|
+
bits[0] = Math.min(Math.max(at(bits, 0) + steps, 0), LARGEST);
|
|
132
134
|
return at(float, 0);
|
|
133
135
|
}
|
|
134
136
|
/** An f32 between the f32s `low` and `high`, two or more steps apart, at or above 0. */
|
package/dist/levels/load.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/levels/load.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAA8B,MAAM,WAAW,CAAC;AAEvF,6DAA6D;AAE7D;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,MAA8D,EAAE,OAAqB;IAChH,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAClD,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC7C,sDAAsD;QACtD,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YAAE,MAAM;IAClD,CAAC;IACD,OAAO,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED;;;GAGG;AACH,MAAM,KAAK,GAAG,CAAC,CAAC;AAEhB;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IAOZ;IACA;IAPX,qEAAqE;IACpD,IAAI,GAAa,EAAE,CAAC;IACrC,kGAAkG;IACjF,KAAK,GAAa,EAAE,CAAC;IAEtC,YACW,MAAkC,EAClC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QADhC,WAAM,GAAN,MAAM,CAA4B;QAClC,WAAM,GAAN,MAAM,CAA0B;QAEzC,MAAM,GAAG,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACnG,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;YAC9G,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YACxB,qGAAqG;YACrG,KAAK,IAAI,IAAI,GAAG,GAAG,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC;gBACtC,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,IAAI,IAAI,GAAG,IAAI,CAAC;gBAChB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;oBAC5B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;oBACnC,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK;wBAAE,IAAI,GAAG,MAAM,CAAC;;wBACpC,IAAI,GAAG,MAAM,CAAC;gBACrB,CAAC;gBACD,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,IAAI,GAAG,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,4FAA4F;QAC5F,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACpG,CAAC;IAED,gFAAgF;IAChF,OAAO,CAAC,QAAgB,EAAE,OAAe;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;YAAE,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IAC7B,QAAQ,CAAC,MAAc;QAC7B,yCAAyC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,OAAO,KAAK,GAAG,GAAG,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC;gBAAE,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;;gBAC5C,GAAG,GAAG,MAAM,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,2GAA2G;AAC3G,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAwB;IACpE,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAkC;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE;QAC5C,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO;QACjD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;YAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAE3C
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/levels/load.ts"],"names":[],"mappings":"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"}
|
package/dist/levels/manager.d.ts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import type { Camera, Object3D, Object3DEventMap, Renderer } from "three/webgpu";
|
|
2
2
|
import type { d } from "typegpu";
|
|
3
|
-
import type { LodGpu } from "../gpu.js";
|
|
4
3
|
import { type DrawLevels } from "./draw.js";
|
|
5
4
|
import type { LodLevel } from "./index.js";
|
|
6
5
|
import { LoadingItem } from "./item.js";
|
|
7
|
-
import { CameraRequests } from "./requests.js";
|
|
8
6
|
/** How long an arriving level fades in for, over what drew in its place. */
|
|
9
7
|
export declare const ARRIVAL_MS = 200;
|
|
10
8
|
export interface LodEventMap extends Object3DEventMap {
|
|
@@ -15,7 +13,7 @@ export interface LodEventMap extends Object3DEventMap {
|
|
|
15
13
|
error: Error;
|
|
16
14
|
};
|
|
17
15
|
}
|
|
18
|
-
/** What a Lod
|
|
16
|
+
/** What a Lod makes of a level's loaded object: `object` compiles, then joins the loaded levels or is discarded. */
|
|
19
17
|
export interface PreparedLevel {
|
|
20
18
|
object: Object3D;
|
|
21
19
|
/** The level joins the loaded levels: it draws from now on. */
|
|
@@ -24,7 +22,7 @@ export interface PreparedLevel {
|
|
|
24
22
|
discard(): void;
|
|
25
23
|
}
|
|
26
24
|
/**
|
|
27
|
-
* Loads a Lod's
|
|
25
|
+
* Loads a Lod's levels as its cameras request them, never blocking a render. The coarsest level that
|
|
28
26
|
* draws something loads first, as nothing draws before it has (see levelsToDraw); the other levels a camera wants
|
|
29
27
|
* start loading once it has loaded. Each level's load runs once; once the render that asked for it has ended, the Lod
|
|
30
28
|
* prepares it (`prepare`), it compiles for the render context of every camera rendering the Lod and joins the loaded
|
|
@@ -34,12 +32,12 @@ export interface PreparedLevel {
|
|
|
34
32
|
* still building, in any context that shares it, so a level a camera may draw now builds as it first draws instead.
|
|
35
33
|
* Nothing is evicted: a level stays loaded until the Lod is disposed.
|
|
36
34
|
*
|
|
37
|
-
* A Lod draws with
|
|
38
|
-
*
|
|
35
|
+
* A Lod draws with the first renderer that draws one of its meshes (see `see`), whose renders it learns its cameras
|
|
36
|
+
* from. Once one has, it holds an item on its LoadingManager while anything a camera wants is missing, compiling or
|
|
37
|
+
* arriving.
|
|
39
38
|
*/
|
|
40
39
|
export declare class LodLevelLoadManager {
|
|
41
40
|
private readonly lod;
|
|
42
|
-
private readonly gpu;
|
|
43
41
|
/** The LoadingManager item's name, which errors name too: the kind of Lod and its uuid. */
|
|
44
42
|
private readonly name;
|
|
45
43
|
/** The levels as the Lod was given them: it holds them (see `LodLevel.hold`) until it is disposed. */
|
|
@@ -53,12 +51,10 @@ export declare class LodLevelLoadManager {
|
|
|
53
51
|
before: number;
|
|
54
52
|
/** The first failure; it stops further loading. */
|
|
55
53
|
error: Error | undefined;
|
|
56
|
-
/** Whether a
|
|
54
|
+
/** Whether a renderer has drawn the Lod: its shaders are being or have been built. */
|
|
57
55
|
started: boolean;
|
|
58
|
-
/**
|
|
59
|
-
|
|
60
|
-
/** The cameras rendering the Lod, and what they asked for. */
|
|
61
|
-
readonly requests: CameraRequests;
|
|
56
|
+
/** Whether a camera has asked for levels since the Lod was bound: until then it is pending. */
|
|
57
|
+
private requested;
|
|
62
58
|
/** Its item on a LoadingManager. */
|
|
63
59
|
readonly item: LoadingItem;
|
|
64
60
|
/**
|
|
@@ -83,9 +79,9 @@ export declare class LodLevelLoadManager {
|
|
|
83
79
|
private disposed;
|
|
84
80
|
/** What `LodLevel.hold` answered, each called once the Lod is disposed. */
|
|
85
81
|
private readonly releases;
|
|
86
|
-
/**
|
|
87
|
-
private
|
|
88
|
-
constructor(lod: Object3D<LodEventMap>,
|
|
82
|
+
/** The renderer drawing the Lod and what the cameras rendering it there asked for, once one drew it (see `see`). */
|
|
83
|
+
private bound;
|
|
84
|
+
constructor(lod: Object3D<LodEventMap>,
|
|
89
85
|
/** The LoadingManager item's name, which errors name too: the kind of Lod and its uuid. */
|
|
90
86
|
name: string,
|
|
91
87
|
/** The levels as the Lod was given them: it holds them (see `LodLevel.hold`) until it is disposed. */
|
|
@@ -93,28 +89,32 @@ export declare class LodLevelLoadManager {
|
|
|
93
89
|
/** The levels as levelsToDraw reads them, for the ones that draw nothing and the coarsest that draws something. */
|
|
94
90
|
{ empty, coarsest }: d.Infer<typeof DrawLevels>, prepare: (level: number, loaded: Object3D) => PreparedLevel,
|
|
95
91
|
/** What draws a loaded level, compiled for each render context it is wanted in. */
|
|
96
|
-
drawnBy: (level: number) => readonly Object3D[]
|
|
97
|
-
/** An InstancedLod's read of whether the GPU shows every chunk taken in (see `ChunkWait`); null for a Lod. */
|
|
98
|
-
readChunks: (() => Promise<boolean>) | null);
|
|
92
|
+
drawnBy: (level: number) => readonly Object3D[]);
|
|
99
93
|
/** How far the latest arrival has faded in, in [0, 1]: 1 once it has. */
|
|
100
94
|
get progress(): number;
|
|
101
|
-
|
|
95
|
+
/** The renderer drawing the Lod: the first that drew one of its meshes; null before. */
|
|
96
|
+
get renderer(): Renderer | null;
|
|
102
97
|
/**
|
|
103
|
-
* `
|
|
104
|
-
*
|
|
98
|
+
* `renderer` draws one of the Lod's meshes, as three tells a mesh but not a LOD's `update`: the first binds the Lod
|
|
99
|
+
* to it, once checked to draw it; another throws.
|
|
105
100
|
*/
|
|
106
|
-
|
|
101
|
+
see(renderer: Renderer): void;
|
|
102
|
+
/** Whether `camera` still renders the Lod (see `CameraRequests.rendering`). */
|
|
103
|
+
rendering(camera: Camera): boolean;
|
|
104
|
+
get pending(): boolean;
|
|
107
105
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
106
|
+
* `camera`, a shadow map's when `shadow`, wants the levels of the bits `wanted` (see levelsToLoad) in an update once
|
|
107
|
+
* the Lod is bound to a renderer (see `see`): load what is missing, and answer the bits of the levels loaded now. Outside a
|
|
108
|
+
* Scene a missing level is an error, as no render of it would load it.
|
|
111
109
|
*/
|
|
112
|
-
|
|
110
|
+
request(camera: Camera, wanted: number, shadow: boolean): number;
|
|
113
111
|
/**
|
|
114
|
-
* The height `camera`, a shadow map's when `shadow`, draws at (see CameraRenders.heightOf), which
|
|
115
|
-
* at.
|
|
112
|
+
* The height `camera`, a shadow map's when `shadow`, draws at with `renderer` (see CameraRenders.heightOf), which
|
|
113
|
+
* levels are chosen at.
|
|
116
114
|
*/
|
|
117
|
-
heightOf(camera: Camera, shadow: boolean): number;
|
|
115
|
+
heightOf(camera: Camera, renderer: Renderer, shadow: boolean): number;
|
|
116
|
+
/** The renderer drawing the Lod and its cameras' requests: known once it drew the Lod, before anything loads. */
|
|
117
|
+
private boundOrThrow;
|
|
118
118
|
/** What compiles for `cameras` are for: the shadow maps they drew, and the targets disposed. */
|
|
119
119
|
private compileFor;
|
|
120
120
|
/**
|
|
@@ -137,8 +137,7 @@ export declare class LodLevelLoadManager {
|
|
|
137
137
|
/** Let compiled levels join the loaded ones, between arrivals: what draws never changes halfway through a fade. */
|
|
138
138
|
private join;
|
|
139
139
|
/**
|
|
140
|
-
* Hold the item while levels a camera wants are missing, compiling or arriving,
|
|
141
|
-
* and end it once they are done, so a host waiting for its LoadingManager renders its cameras complete. Called at
|
|
140
|
+
* Hold the item while levels a camera wants are missing, compiling or arriving, and end it once they are done, so a host waiting for its LoadingManager renders its cameras complete. Called at
|
|
142
141
|
* the end of each request.
|
|
143
142
|
*/
|
|
144
143
|
private sync;
|