@drawcall/lod 0.4.0 → 0.5.1
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/dist/at.js.map +1 -1
- package/dist/bake.js.map +1 -1
- package/dist/baked/codec.js.map +1 -1
- package/dist/baked/coverage.js.map +1 -1
- package/dist/baked/fields.js.map +1 -1
- package/dist/baked/index.js.map +1 -1
- package/dist/baked/interior/faces.js.map +1 -1
- package/dist/baked/interior/material.js.map +1 -1
- package/dist/baked/interior/rooms.js.map +1 -1
- package/dist/baked/low.js.map +1 -1
- package/dist/baked/raster.js.map +1 -1
- package/dist/baked/textures.js.map +1 -1
- package/dist/baked/transfer.js.map +1 -1
- package/dist/baked/unwrap.js.map +1 -1
- package/dist/baked/xatlas.js.map +1 -1
- package/dist/codec/container.js.map +1 -1
- package/dist/codec/mesh.js.map +1 -1
- package/dist/dispose.js.map +1 -1
- package/dist/foliage.js.map +1 -1
- package/dist/impostor/bake/atlas.js.map +1 -1
- package/dist/impostor/bake/fit.js.map +1 -1
- package/dist/impostor/bake/index.js.map +1 -1
- package/dist/impostor/bake/materials.js.map +1 -1
- package/dist/impostor/bake/sheet.js.map +1 -1
- package/dist/impostor/bake/source.js.map +1 -1
- package/dist/impostor/codec.js.map +1 -1
- package/dist/impostor/impostor.js.map +1 -1
- package/dist/impostor/ktx2/encode.js.map +1 -1
- package/dist/impostor/ktx2/transcode.js.map +1 -1
- package/dist/impostor/ktx2/uastc.js.map +1 -1
- package/dist/impostor/ktx2/wasm/encoder.js.map +1 -1
- package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -1
- package/dist/impostor/ktx2/worker.js.map +1 -1
- package/dist/impostor/mesh/card.js.map +1 -1
- package/dist/impostor/mesh/index.js.map +1 -1
- package/dist/impostor/mesh/material.js.map +1 -1
- package/dist/impostor/mesh/surface.js.map +1 -1
- package/dist/impostor/mesh/textures.js.map +1 -1
- package/dist/impostor/octahedral.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/instanced/camera.js.map +1 -1
- package/dist/instanced/clusters.d.ts +18 -4
- package/dist/instanced/clusters.js +32 -11
- package/dist/instanced/clusters.js.map +1 -1
- package/dist/instanced/cull.js.map +1 -1
- package/dist/instanced/instances.js.map +1 -1
- package/dist/instanced/key.js.map +1 -1
- package/dist/instanced/levels.js.map +1 -1
- package/dist/instanced/lists.d.ts +4 -1
- package/dist/instanced/lists.js +4 -2
- package/dist/instanced/lists.js.map +1 -1
- package/dist/instanced/measure.js.map +1 -1
- package/dist/instanced/meshes.js.map +1 -1
- package/dist/instanced/mirror.js.map +1 -1
- package/dist/instanced/raycast.js.map +1 -1
- package/dist/instanced/rows.d.ts +8 -1
- package/dist/instanced/rows.js +10 -2
- package/dist/instanced/rows.js.map +1 -1
- package/dist/instanced/shape.js.map +1 -1
- package/dist/instanced/sort.d.ts +8 -4
- package/dist/instanced/sort.js +27 -21
- package/dist/instanced/sort.js.map +1 -1
- package/dist/instanced/update.d.ts +4 -3
- package/dist/instanced/update.js +20 -14
- package/dist/instanced/update.js.map +1 -1
- package/dist/levels/bounds.js.map +1 -1
- package/dist/levels/cameras.js.map +1 -1
- package/dist/levels/compile/contexts.js.map +1 -1
- package/dist/levels/compile/index.js.map +1 -1
- package/dist/levels/compile/pipelines.js.map +1 -1
- package/dist/levels/compiles.js.map +1 -1
- package/dist/levels/draw.js.map +1 -1
- package/dist/levels/fade.js.map +1 -1
- package/dist/levels/index.js.map +1 -1
- package/dist/levels/item.js.map +1 -1
- package/dist/levels/load.js.map +1 -1
- package/dist/levels/manager.js.map +1 -1
- package/dist/levels/material.js.map +1 -1
- package/dist/levels/renderer.js.map +1 -1
- package/dist/levels/requests.js.map +1 -1
- package/dist/levels/screen.js.map +1 -1
- package/dist/loader/build.js.map +1 -1
- package/dist/loader/context.js.map +1 -1
- package/dist/loader/entry.js.map +1 -1
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/level.js.map +1 -1
- package/dist/loader/node.js.map +1 -1
- package/dist/loader/request.js.map +1 -1
- package/dist/loader/url.js.map +1 -1
- package/dist/lod.js +1 -0
- package/dist/lod.js.map +1 -1
- package/dist/meshopt.js.map +1 -1
- package/dist/node-process.js.map +1 -1
- package/dist/node.js.map +1 -1
- package/dist/simplify/cards.js.map +1 -1
- package/dist/simplify/index.js.map +1 -1
- package/dist/source/detail.d.ts +1 -1
- package/dist/source/detail.js +3 -1
- package/dist/source/detail.js.map +1 -1
- package/dist/source/deviation.js.map +1 -1
- package/dist/source/evaluator.js.map +1 -1
- package/dist/source/frame.js.map +1 -1
- package/dist/source/raycaster.js.map +1 -1
- package/dist/source/sampler.js.map +1 -1
- package/dist/source/source.js.map +1 -1
- package/dist/source/surface.js.map +1 -1
- package/dist/task.js.map +1 -1
- package/dist/three.d.ts +2 -1
- package/dist/three.js +1 -0
- package/dist/three.js.map +1 -1
- package/dist/tsl.js.map +1 -1
- package/dist/typegpu.js.map +1 -1
- package/dist/wind/bounds.js.map +1 -1
- package/dist/wind/hooks.js.map +1 -1
- package/dist/wind/index.js.map +1 -1
- package/dist/wind/sway.js.map +1 -1
- package/package.json +1 -1
- package/skills/lod/SKILL.md +1 -1
package/dist/instanced/sort.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StorageBufferAttribute, StorageInstancedBufferAttribute } from "three/webgpu";
|
|
2
2
|
import { MAX_LEVELS } from "../levels/draw.js";
|
|
3
|
-
import { FLOATS_AT, INTS_AT, UNLISTED, argsBuffer, countsBuffer, drawWords, floatsBuffer, forcedWord, wordsBuffer } from "./rows.js";
|
|
3
|
+
import { BLOCKS_AT, FLOATS_AT, INTS_AT, NO_LIVE_COUNT, UNLISTED, argsBuffer, countsBuffer, drawWords, floatsBuffer, forcedWord, wordsBuffer } from "./rows.js";
|
|
4
4
|
import { BLOCK, MAX_BLOCKS, sortPasses } from "./update.js";
|
|
5
5
|
/** One Lod's sorts: every camera's buffers, and the passes sorting into them. */
|
|
6
6
|
export class Sorter {
|
|
@@ -13,6 +13,8 @@ export class Sorter {
|
|
|
13
13
|
scaled = null;
|
|
14
14
|
/** Where survivors' scaled matrices go while none scale: never written, as no survivor scales. */
|
|
15
15
|
unscaled = new StorageInstancedBufferAttribute(new Float32Array(16), 16);
|
|
16
|
+
/** What the sort reads as live counts while no range has one: never read. */
|
|
17
|
+
noLiveCounts = new StorageBufferAttribute(new Uint32Array(1), 1);
|
|
16
18
|
passes = null;
|
|
17
19
|
/** `listed` tells, as a mask, which levels have an instance list: those that draw something. */
|
|
18
20
|
constructor(listed) {
|
|
@@ -46,15 +48,17 @@ export class Sorter {
|
|
|
46
48
|
return buffers ? { indices: buffers.indices, fades: buffers.fades, args: { attribute: buffers.args, offset: 0 } } : null;
|
|
47
49
|
}
|
|
48
50
|
/**
|
|
49
|
-
* Write `values` as what `camera` sorts by, over the instances of `ranges` (start and
|
|
50
|
-
* all, sorted at the camera's next draw. Its lists grow to hold them, within `limit` bytes per
|
|
51
|
+
* Write `values` as what `camera` sorts by, over the instances of `ranges` (start, count and item of `liveCounts`,
|
|
52
|
+
* flat), `instances` in all, sorted at the camera's next draw. Its lists grow to hold them, within `limit` bytes per
|
|
53
|
+
* buffer.
|
|
51
54
|
*/
|
|
52
|
-
write(camera, values, ranges, instances, limit) {
|
|
55
|
+
write(camera, values, ranges, liveCounts, instances, limit) {
|
|
53
56
|
const buffers = this.cameras.get(camera) ?? this.makeBuffers();
|
|
54
57
|
this.cameras.set(camera, buffers);
|
|
55
58
|
if (instances > buffers.listSize)
|
|
56
59
|
this.grow(buffers, instances, limit);
|
|
57
60
|
this.writeBlocks(buffers, ranges);
|
|
61
|
+
buffers.liveCounts = liveCounts;
|
|
58
62
|
const { levels, loaded, before, progress, eye, scale, ortho, cull, source, reach, frustum } = values;
|
|
59
63
|
const words = buffers.words.array;
|
|
60
64
|
words.set([levels.count, levels.coarsest, forcedWord(levels.forced)], INTS_AT.levels * 4);
|
|
@@ -80,6 +84,7 @@ export class Sorter {
|
|
|
80
84
|
const sort = {
|
|
81
85
|
...buffers,
|
|
82
86
|
matrices,
|
|
87
|
+
liveCounts: buffers.liveCounts ?? this.noLiveCounts,
|
|
83
88
|
scaled: this.scaled?.attribute ?? this.unscaled,
|
|
84
89
|
counts: this.counts,
|
|
85
90
|
draws: this.drawBuffer,
|
|
@@ -108,15 +113,16 @@ export class Sorter {
|
|
|
108
113
|
this.counts.dispose();
|
|
109
114
|
this.scaled?.attribute.dispose();
|
|
110
115
|
this.unscaled.dispose();
|
|
116
|
+
this.noLiveCounts.dispose();
|
|
111
117
|
this.passes?.dispose();
|
|
112
118
|
this.passes = null;
|
|
113
119
|
}
|
|
114
120
|
makeBuffers() {
|
|
115
121
|
return {
|
|
116
|
-
words: wordsBuffer(),
|
|
122
|
+
words: wordsBuffer(1),
|
|
117
123
|
floats: floatsBuffer(),
|
|
118
|
-
blocks: blocksBuffer(1),
|
|
119
124
|
blockCount: 1,
|
|
125
|
+
liveCounts: null,
|
|
120
126
|
indices: new StorageBufferAttribute(new Uint32Array(1), 1),
|
|
121
127
|
fades: new StorageBufferAttribute(new Float32Array(1), 1),
|
|
122
128
|
listSize: 0,
|
|
@@ -138,29 +144,30 @@ export class Sorter {
|
|
|
138
144
|
buffers.fades = new StorageBufferAttribute(new Float32Array(slots), 1);
|
|
139
145
|
buffers.listSize = size;
|
|
140
146
|
}
|
|
141
|
-
/** Write the blocks of `ranges` into `buffers
|
|
147
|
+
/** Write the blocks of `ranges` into `buffers`, growing its words: one empty block for none, as a dispatch visits one at least. */
|
|
142
148
|
writeBlocks(buffers, ranges) {
|
|
143
149
|
let count = 0;
|
|
144
|
-
for (let i = 0; i < ranges.length; i +=
|
|
150
|
+
for (let i = 0; i < ranges.length; i += 3)
|
|
145
151
|
count += Math.ceil((ranges[i + 1] ?? 0) / BLOCK);
|
|
146
152
|
if (count > MAX_BLOCKS)
|
|
147
153
|
throw new RangeError(`Lod: a camera sees ${count} blocks of ${BLOCK} instances, more than one dispatch's ${MAX_BLOCKS}: split the instances across Lods`);
|
|
148
|
-
if (buffers.
|
|
149
|
-
buffers.
|
|
150
|
-
buffers.
|
|
154
|
+
if (buffers.words.array.length < BLOCKS_AT + Math.max(count, 1) * 4) {
|
|
155
|
+
buffers.words.dispose();
|
|
156
|
+
buffers.words = wordsBuffer(count);
|
|
151
157
|
}
|
|
152
|
-
const words = buffers.
|
|
153
|
-
let at =
|
|
154
|
-
for (let i = 0; i < ranges.length; i +=
|
|
158
|
+
const words = buffers.words.array;
|
|
159
|
+
let at = BLOCKS_AT;
|
|
160
|
+
for (let i = 0; i < ranges.length; i += 3) {
|
|
155
161
|
const start = ranges[i] ?? 0;
|
|
156
162
|
const end = start + (ranges[i + 1] ?? 0);
|
|
157
|
-
|
|
158
|
-
|
|
163
|
+
const live = ranges[i + 2] ?? NO_LIVE_COUNT;
|
|
164
|
+
for (let first = start; first < end; first += BLOCK, at += 4)
|
|
165
|
+
words.set([first, end, start, live], at);
|
|
159
166
|
}
|
|
160
167
|
if (count === 0)
|
|
161
|
-
words.set([0, 0],
|
|
168
|
+
words.set([0, 0, 0, NO_LIVE_COUNT], at);
|
|
162
169
|
buffers.blockCount = Math.max(count, 1);
|
|
163
|
-
buffers.
|
|
170
|
+
buffers.words.needsUpdate = true;
|
|
164
171
|
}
|
|
165
172
|
/** Write the layout of `buffers`' lists and the draw count into its row. */
|
|
166
173
|
place(buffers) {
|
|
@@ -177,11 +184,10 @@ export class Sorter {
|
|
|
177
184
|
buffers.words.needsUpdate = true;
|
|
178
185
|
}
|
|
179
186
|
}
|
|
180
|
-
function disposeBuffers({ words, floats,
|
|
181
|
-
for (const attribute of [words, floats,
|
|
187
|
+
function disposeBuffers({ words, floats, indices, fades, args }) {
|
|
188
|
+
for (const attribute of [words, floats, indices, fades, args])
|
|
182
189
|
attribute.dispose();
|
|
183
190
|
}
|
|
184
|
-
const blocksBuffer = (blocks) => new StorageBufferAttribute(new Uint32Array(Math.max(blocks, 1) * 2), 2);
|
|
185
191
|
/** Set bits of `mask`. */
|
|
186
192
|
function countBits(mask) {
|
|
187
193
|
let count = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/instanced/sort.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/instanced/sort.ts"],"names":[],"mappings":"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","sourcesContent":["import { StorageBufferAttribute, StorageInstancedBufferAttribute, type Camera, type Frustum, type IndirectStorageBufferAttribute, type Renderer, type Sphere, type Vector3 } from \"three/webgpu\";\nimport type { d } from \"typegpu\";\nimport { MAX_LEVELS, type DrawLevels } from \"../levels/draw.js\";\nimport type { InstanceSlots } from \"../levels/fade.js\";\nimport type { LodLiveCount } from \"./clusters.js\";\nimport type { Cull } from \"./cull.js\";\nimport { BLOCKS_AT, FLOATS_AT, INTS_AT, NO_LIVE_COUNT, UNLISTED, argsBuffer, countsBuffer, drawWords, floatsBuffer, forcedWord, wordsBuffer, type IndirectDraw } from \"./rows.js\";\nimport { BLOCK, MAX_BLOCKS, sortPasses, type SortPasses } from \"./update.js\";\n\n// A Lod sorts its instances for each camera with two passes of its own (see update.ts), one renderer.compute call at\n// the camera's first level mesh draw. A camera's buffers, its row, blocks, lists and indirect draws, are its own, so a\n// camera's sort reads only what the Lod wrote for it; the counts, which the indirect pass clears, and the draws are\n// shared. After the draws change, every camera sorts again with the values it last sorted with before it next draws.\n\n/** What a Lod sorts by for a camera, everything in its space. */\nexport interface RowValues {\n levels: d.Infer<typeof DrawLevels>;\n /** The level loading state levelsToDraw reads (see LodLevelLoadManager). */\n loaded: number;\n before: number;\n progress: number;\n eye: Vector3;\n /** Pixels per unit of subtense (or of size, for an orthographic camera). */\n scale: number;\n ortho: boolean;\n cull: Cull | null;\n /** One instance's source sphere, and how far its levels and their sway reach. */\n source: Sphere;\n reach: number;\n frustum: Frustum;\n}\n\n/** One camera's buffers. */\ninterface CameraBuffers {\n /** Its row's u32s, followed by the blocks of instances it sorts (see rows.ts), and its f32s. */\n words: StorageBufferAttribute;\n readonly floats: StorageBufferAttribute;\n /** How many blocks it sorts. */\n blockCount: number;\n /** The live counts of the ranges it sorts; null while none has one. */\n liveCounts: LodLiveCount[\"attribute\"] | null;\n /** Its lists: per slot, the instance it draws and its signed fade; `listSize` slots per listed level. */\n indices: StorageBufferAttribute;\n fades: StorageBufferAttribute;\n listSize: number;\n /** Its indirect draws, five words each, in the order of the draws. */\n args: IndirectStorageBufferAttribute;\n /** Whether it sorts at its next draw. */\n due: boolean;\n}\n\n/** One Lod's sorts: every camera's buffers, and the passes sorting into them. */\nexport class Sorter {\n private readonly cameras = new Map<Camera, CameraBuffers>();\n private readonly draws: IndirectDraw[] = [];\n private drawBuffer = drawWords([]);\n private readonly counts = countsBuffer();\n /** Survivors' scaled matrices, made once survivors scale; their CPU array is dropped once a pass wrote them. */\n private scaled: { attribute: StorageInstancedBufferAttribute; capacity: number } | null = null;\n /** Where survivors' scaled matrices go while none scale: never written, as no survivor scales. */\n private readonly unscaled = new StorageInstancedBufferAttribute(new Float32Array(16), 16);\n /** What the sort reads as live counts while no range has one: never read. */\n private readonly noLiveCounts = new StorageBufferAttribute(new Uint32Array(1), 1);\n private passes: SortPasses | null = null;\n\n /** `listed` tells, as a mask, which levels have an instance list: those that draw something. */\n constructor(private readonly listed: number) {}\n\n /** The meshes draw `draws` too, after those they have; where they start among the draws. */\n appendDraws(draws: readonly IndirectDraw[]): number {\n const first = this.draws.length;\n this.draws.push(...draws);\n this.drawBuffer.dispose();\n this.drawBuffer = drawWords(this.draws);\n for (const buffers of this.cameras.values()) {\n buffers.args.dispose();\n buffers.args = argsBuffer(this.draws.length);\n this.place(buffers);\n buffers.due = true;\n }\n return first;\n }\n\n /** Survivors' scaled matrices for `capacity` instances. */\n scaledMatrices(capacity: number): StorageInstancedBufferAttribute {\n if (this.scaled?.capacity !== capacity) {\n this.scaled?.attribute.dispose();\n this.scaled = { attribute: new StorageInstancedBufferAttribute(new Float32Array(capacity * 16), 16), capacity };\n }\n return this.scaled.attribute;\n }\n\n /** Where `camera`'s lists and indirect draws lie; null before a sort was written for it. */\n slotsOf(camera: Camera): InstanceSlots | null {\n const buffers = this.cameras.get(camera);\n return buffers ? { indices: buffers.indices, fades: buffers.fades, args: { attribute: buffers.args, offset: 0 } } : null;\n }\n\n /**\n * Write `values` as what `camera` sorts by, over the instances of `ranges` (start, count and item of `liveCounts`,\n * flat), `instances` in all, sorted at the camera's next draw. Its lists grow to hold them, within `limit` bytes per\n * buffer.\n */\n write(camera: Camera, values: RowValues, ranges: readonly number[], liveCounts: LodLiveCount[\"attribute\"] | null, instances: number, limit: number): void {\n const buffers = this.cameras.get(camera) ?? this.makeBuffers();\n this.cameras.set(camera, buffers);\n if (instances > buffers.listSize) this.grow(buffers, instances, limit);\n this.writeBlocks(buffers, ranges);\n buffers.liveCounts = liveCounts;\n const { levels, loaded, before, progress, eye, scale, ortho, cull, source, reach, frustum } = values;\n const words = buffers.words.array;\n words.set([levels.count, levels.coarsest, forcedWord(levels.forced)], INTS_AT.levels * 4);\n words.set([levels.empty, levels.fades, loaded, before], INTS_AT.masks * 4);\n words.set([Number(ortho), Number(cull !== null), Number(cull?.survivors ?? false)], INTS_AT.flags * 4);\n this.place(buffers);\n const floats = buffers.floats.array;\n floats.set(levels.maxPixels, FLOATS_AT.low * 4);\n floats.set([eye.x, eye.y, eye.z, scale], FLOATS_AT.eye * 4);\n floats.set([source.center.x, source.center.y, source.center.z, source.radius], FLOATS_AT.source * 4);\n floats.set([progress, reach, cull?.near ?? 0, cull?.far ?? 1], FLOATS_AT.values * 4);\n if (cull) floats.set([cull.eye.x, cull.eye.y, cull.eye.z, 0], FLOATS_AT.cullEye * 4);\n frustum.planes.forEach(({ normal, constant }, i) => floats.set([normal.x, normal.y, normal.z, constant], (FLOATS_AT.planes + i) * 4));\n buffers.floats.needsUpdate = true;\n buffers.due = true;\n }\n\n /** Sort for `camera` on `renderer`, in one compute call, if due: before a level mesh draws for it. */\n run(renderer: Renderer, camera: Camera, matrices: StorageInstancedBufferAttribute): void {\n const buffers = this.cameras.get(camera);\n if (!buffers?.due) return;\n const sort = {\n ...buffers,\n matrices,\n liveCounts: buffers.liveCounts ?? this.noLiveCounts,\n scaled: this.scaled?.attribute ?? this.unscaled,\n counts: this.counts,\n draws: this.drawBuffer,\n };\n const passes = (this.passes ??= sortPasses(sort));\n passes.point(sort, buffers.blockCount);\n renderer.compute([passes.update, passes.indirect]);\n buffers.due = false;\n // The pass made the scaled matrices' buffer: only the GPU writes them.\n if (this.scaled && this.scaled.attribute.array.length > 0) this.scaled.attribute.array = new Float32Array(0);\n }\n\n /** `camera` no longer draws the Lod: its buffers are freed. */\n release(camera: Camera): void {\n const buffers = this.cameras.get(camera);\n if (!buffers) return;\n this.cameras.delete(camera);\n disposeBuffers(buffers);\n }\n\n dispose(): void {\n for (const buffers of this.cameras.values()) disposeBuffers(buffers);\n this.cameras.clear();\n this.drawBuffer.dispose();\n this.counts.dispose();\n this.scaled?.attribute.dispose();\n this.unscaled.dispose();\n this.noLiveCounts.dispose();\n this.passes?.dispose();\n this.passes = null;\n }\n\n private makeBuffers(): CameraBuffers {\n return {\n words: wordsBuffer(1),\n floats: floatsBuffer(),\n blockCount: 1,\n liveCounts: null,\n indices: new StorageBufferAttribute(new Uint32Array(1), 1),\n fades: new StorageBufferAttribute(new Float32Array(1), 1),\n listSize: 0,\n args: argsBuffer(this.draws.length),\n due: false,\n };\n }\n\n /** Grow `buffers`' lists to hold `instances` per level, by doubling, each buffer within `limit` bytes. */\n private grow(buffers: CameraBuffers, instances: number, limit: number): void {\n let size = Math.max(buffers.listSize, 1);\n while (size < instances) size *= 2;\n const slots = countBits(this.listed) * size;\n if (slots * 4 > limit)\n throw new RangeError(\n `Lod: lists of ${size} instances for each of its ${countBits(this.listed)} levels take ${slots * 4} bytes, more than the device's storage binding of ${limit} bytes: draw fewer instances in view of one camera per Lod, or raise maxStorageBufferBindingSize in the renderer's requiredLimits`,\n );\n buffers.indices.dispose();\n buffers.fades.dispose();\n buffers.indices = new StorageBufferAttribute(new Uint32Array(slots), 1);\n buffers.fades = new StorageBufferAttribute(new Float32Array(slots), 1);\n buffers.listSize = size;\n }\n\n /** Write the blocks of `ranges` into `buffers`, growing its words: one empty block for none, as a dispatch visits one at least. */\n private writeBlocks(buffers: CameraBuffers, ranges: readonly number[]): void {\n let count = 0;\n for (let i = 0; i < ranges.length; i += 3) count += Math.ceil((ranges[i + 1] ?? 0) / BLOCK);\n if (count > MAX_BLOCKS)\n throw new RangeError(`Lod: a camera sees ${count} blocks of ${BLOCK} instances, more than one dispatch's ${MAX_BLOCKS}: split the instances across Lods`);\n if (buffers.words.array.length < BLOCKS_AT + Math.max(count, 1) * 4) {\n buffers.words.dispose();\n buffers.words = wordsBuffer(count);\n }\n const words = buffers.words.array;\n let at = BLOCKS_AT;\n for (let i = 0; i < ranges.length; i += 3) {\n const start = ranges[i] ?? 0;\n const end = start + (ranges[i + 1] ?? 0);\n const live = ranges[i + 2] ?? NO_LIVE_COUNT;\n for (let first = start; first < end; first += BLOCK, at += 4) words.set([first, end, start, live], at);\n }\n if (count === 0) words.set([0, 0, 0, NO_LIVE_COUNT], at);\n buffers.blockCount = Math.max(count, 1);\n buffers.words.needsUpdate = true;\n }\n\n /** Write the layout of `buffers`' lists and the draw count into its row. */\n private place(buffers: CameraBuffers): void {\n const words = buffers.words.array;\n words[INTS_AT.flags * 4 + 3] = this.draws.length;\n words[INTS_AT.layout * 4] = buffers.listSize;\n let next = 0;\n for (let level = 0; level < MAX_LEVELS; level++) {\n const on = (this.listed & (1 << level)) !== 0;\n words[INTS_AT.starts * 4 + level] = on ? next : UNLISTED;\n if (on) next += buffers.listSize;\n }\n buffers.words.needsUpdate = true;\n }\n}\n\nfunction disposeBuffers({ words, floats, indices, fades, args }: CameraBuffers): void {\n for (const attribute of [words, floats, indices, fades, args]) attribute.dispose();\n}\n\n/** Set bits of `mask`. */\nfunction countBits(mask: number): number {\n let count = 0;\n for (let bits = mask; bits !== 0; bits &= bits - 1) count++;\n return count;\n}\n"]}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { IndirectStorageBufferAttribute, StorageBufferAttribute, StorageInstancedBufferAttribute } from "three/webgpu";
|
|
2
|
+
import type { LodLiveCount } from "./clusters.js";
|
|
2
3
|
/** Instances per block of a range, one workgroup's lanes. */
|
|
3
4
|
export declare const BLOCK = 64;
|
|
4
5
|
/** WebGPU's guaranteed maxComputeWorkgroupsPerDimension: the most blocks one sort visits. */
|
|
5
6
|
export declare const MAX_BLOCKS = 65535;
|
|
6
7
|
/** The buffers the sort passes read and write: pointed at a camera's (row, blocks, lists, args) as it sorts. */
|
|
7
8
|
export interface SortBuffers {
|
|
8
|
-
/** The camera's row
|
|
9
|
+
/** The camera's row, its u32s followed by its blocks, and its f32s (see rows.ts). */
|
|
9
10
|
words: StorageBufferAttribute;
|
|
10
11
|
floats: StorageBufferAttribute;
|
|
11
|
-
/**
|
|
12
|
-
|
|
12
|
+
/** The live counts of the ranges the camera sorts (see `LodCluster.liveCount`). */
|
|
13
|
+
liveCounts: LodLiveCount["attribute"];
|
|
13
14
|
/** The instances' matrices, and survivors' scaled ones, which the level meshes draw while survivors scale. */
|
|
14
15
|
matrices: StorageInstancedBufferAttribute;
|
|
15
16
|
scaled: StorageInstancedBufferAttribute;
|
package/dist/instanced/update.js
CHANGED
|
@@ -3,18 +3,19 @@ import { MAX_LEVELS, levelsToDrawNode } from "../levels/draw.js";
|
|
|
3
3
|
import { column, maxScale, stretch } from "../tsl.js";
|
|
4
4
|
import { toTsl } from "../typegpu.js";
|
|
5
5
|
import { cullScale, instanceOnScreen } from "./measure.js";
|
|
6
|
-
import { DRAW_BYTES, FLOATS_AT, INTS_AT, UNLISTED } from "./rows.js";
|
|
6
|
+
import { BLOCKS_AT, DRAW_BYTES, FLOATS_AT, INTS_AT, NO_LIVE_COUNT, UNLISTED } from "./rows.js";
|
|
7
7
|
// Sorting a Lod's instances into its levels' instance lists for one camera, on the GPU, in two passes it builds once
|
|
8
8
|
// (see sort.ts).
|
|
9
9
|
//
|
|
10
10
|
// One workgroup per block of `BLOCK` instances of the ranges the camera sees (see clusters.ts), one lane per instance:
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
// buffers per stage
|
|
11
|
+
// a lane at or past its range's live count, if it has one, returns at once; updateInstance skips an instance at scale
|
|
12
|
+
// 0, thins it out by `cullDistance`, skips it outside the camera's frustum, measures its height on screen from its
|
|
13
|
+
// matrix with instanceOnScreen, picks what it draws with levelsToDraw, the function the CPU runs too, and appends itself
|
|
14
|
+
// to each level it draws: its index and signed fade go to that level's next free slot. Each level that draws something
|
|
15
|
+
// has a list of `listSize` slots, from the start the row gives; the level's draws start there (their first instance).
|
|
16
|
+
// The indirect pass hands each level's count to the indirect draws of the Lod's meshes and clears the counts for the
|
|
17
|
+
// next camera. Both stay within WebGPU's default limit of 8 storage buffers per stage, the blocks sharing the row's
|
|
18
|
+
// u32s' buffer.
|
|
18
19
|
const cullScaleNode = toTsl("lodCullScale", ["origin", "distance", "near", "far", "survivors"], cullScale);
|
|
19
20
|
const instanceOnScreenNode = toTsl("lodInstanceOnScreen", ["matrix", "source", "grow", "eye", "scale", "ortho"], instanceOnScreen);
|
|
20
21
|
/** Instances per block of a range, one workgroup's lanes. */
|
|
@@ -25,9 +26,14 @@ export const MAX_BLOCKS = 65535;
|
|
|
25
26
|
export function sortPasses(buffers) {
|
|
26
27
|
const nodes = nodesOf(buffers);
|
|
27
28
|
const update = computeKernel(Fn(() => {
|
|
28
|
-
const block =
|
|
29
|
-
const
|
|
30
|
-
|
|
29
|
+
const block = workgroupId.x.mul(4).add(BLOCKS_AT).toVar();
|
|
30
|
+
const word = (i) => nodes.words.element(block.add(i)).toVar();
|
|
31
|
+
const [first, end, start, live] = [word(0), word(1), word(2), word(3)];
|
|
32
|
+
const index = first.add(localId.x).toVar();
|
|
33
|
+
If(index.greaterThanEqual(end), () => void Return());
|
|
34
|
+
If(live.notEqual(uint(NO_LIVE_COUNT)), () => {
|
|
35
|
+
If(index.sub(start).greaterThanEqual(nodes.liveCounts.element(live)), () => void Return());
|
|
36
|
+
});
|
|
31
37
|
updateInstance(nodes, index);
|
|
32
38
|
})(), [BLOCK]);
|
|
33
39
|
const indirect = computeKernel(Fn(() => writeDraws(nodes))(), [1]);
|
|
@@ -39,7 +45,7 @@ export function sortPasses(buffers) {
|
|
|
39
45
|
point(next, blocks) {
|
|
40
46
|
nodes.words.value = next.words;
|
|
41
47
|
nodes.floats.value = next.floats;
|
|
42
|
-
nodes.
|
|
48
|
+
nodes.liveCounts.value = next.liveCounts;
|
|
43
49
|
nodes.matrices.value = next.matrices;
|
|
44
50
|
nodes.scaled.value = next.scaled;
|
|
45
51
|
nodes.indices.value = next.indices;
|
|
@@ -60,7 +66,7 @@ function nodesOf(buffers) {
|
|
|
60
66
|
return {
|
|
61
67
|
words: storage(buffers.words, "uint", 0).setName("lodRowWords").toReadOnly(),
|
|
62
68
|
floats: storage(buffers.floats, "float", 0).setName("lodRowFloats").toReadOnly(),
|
|
63
|
-
|
|
69
|
+
liveCounts: storage(buffers.liveCounts, "uint", 0).setName("lodLiveCounts").toReadOnly(),
|
|
64
70
|
matrices: storage(buffers.matrices, "mat4", 0).setName("lodMatrices").toReadOnly(),
|
|
65
71
|
scaled: storage(buffers.scaled, "mat4", 0).setName("lodScaledMatrices"),
|
|
66
72
|
indices: storage(buffers.indices, "uint", 0).setName("lodSlotIndices"),
|
|
@@ -142,7 +148,7 @@ function updateInstance(nodes, index) {
|
|
|
142
148
|
const append = (at, signed) => {
|
|
143
149
|
const level = uint(at).toVar();
|
|
144
150
|
const start = r.start(level).toVar();
|
|
145
|
-
If(start.notEqual(UNLISTED), () => {
|
|
151
|
+
If(start.notEqual(uint(UNLISTED)), () => {
|
|
146
152
|
const k = atomicAdd(nodes.counts.element(level), uint(1)).toVar();
|
|
147
153
|
If(k.lessThan(listSize), () => {
|
|
148
154
|
const slot = start.add(k).toVar();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/instanced/update.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/instanced/update.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IndirectStorageBufferAttribute, Node, StorageBufferAttribute, StorageInstancedBufferAttribute } from \"three/webgpu\";\nimport {\n Fn,\n If,\n Loop,\n Return,\n atomicAdd,\n atomicLoad,\n atomicStore,\n computeKernel,\n distance,\n dot,\n float,\n int,\n localId,\n mat4,\n storage,\n uint,\n vec4,\n workgroupId,\n} from \"three/tsl\";\nimport { MAX_LEVELS, levelsToDrawNode } from \"../levels/draw.js\";\nimport { column, maxScale, stretch } from \"../tsl.js\";\nimport { toTsl } from \"../typegpu.js\";\nimport type { LodLiveCount } from \"./clusters.js\";\nimport { cullScale, instanceOnScreen } from \"./measure.js\";\nimport { BLOCKS_AT, DRAW_BYTES, FLOATS_AT, INTS_AT, NO_LIVE_COUNT, UNLISTED } from \"./rows.js\";\n\n// Sorting a Lod's instances into its levels' instance lists for one camera, on the GPU, in two passes it builds once\n// (see sort.ts).\n//\n// One workgroup per block of `BLOCK` instances of the ranges the camera sees (see clusters.ts), one lane per instance:\n// a lane at or past its range's live count, if it has one, returns at once; updateInstance skips an instance at scale\n// 0, thins it out by `cullDistance`, skips it outside the camera's frustum, measures its height on screen from its\n// matrix with instanceOnScreen, picks what it draws with levelsToDraw, the function the CPU runs too, and appends itself\n// to each level it draws: its index and signed fade go to that level's next free slot. Each level that draws something\n// has a list of `listSize` slots, from the start the row gives; the level's draws start there (their first instance).\n// The indirect pass hands each level's count to the indirect draws of the Lod's meshes and clears the counts for the\n// next camera. Both stay within WebGPU's default limit of 8 storage buffers per stage, the blocks sharing the row's\n// u32s' buffer.\n\nconst cullScaleNode = toTsl(\"lodCullScale\", [\"origin\", \"distance\", \"near\", \"far\", \"survivors\"], cullScale);\nconst instanceOnScreenNode = toTsl(\"lodInstanceOnScreen\", [\"matrix\", \"source\", \"grow\", \"eye\", \"scale\", \"ortho\"], instanceOnScreen);\n\n/** Instances per block of a range, one workgroup's lanes. */\nexport const BLOCK = 64;\n\n/** WebGPU's guaranteed maxComputeWorkgroupsPerDimension: the most blocks one sort visits. */\nexport const MAX_BLOCKS = 65535;\n\n/** The buffers the sort passes read and write: pointed at a camera's (row, blocks, lists, args) as it sorts. */\nexport interface SortBuffers {\n /** The camera's row, its u32s followed by its blocks, and its f32s (see rows.ts). */\n words: StorageBufferAttribute;\n floats: StorageBufferAttribute;\n /** The live counts of the ranges the camera sorts (see `LodCluster.liveCount`). */\n liveCounts: LodLiveCount[\"attribute\"];\n /** The instances' matrices, and survivors' scaled ones, which the level meshes draw while survivors scale. */\n matrices: StorageInstancedBufferAttribute;\n scaled: StorageInstancedBufferAttribute;\n /** The camera's slots: per slot, the instance it draws and its signed fade. */\n indices: StorageBufferAttribute;\n fades: StorageBufferAttribute;\n /** Per level, how many instances it holds for the camera: counted by updateInstance, cleared by the indirect pass. */\n counts: StorageBufferAttribute;\n /** The Lod's draws (see `drawWords` in rows.ts). */\n draws: StorageBufferAttribute;\n /** The camera's indirect draws, five words each, in the order of `draws`. */\n args: IndirectStorageBufferAttribute;\n}\n\n/** The sort passes over `buffers`, their nodes pointed at other buffers by `point`. */\nexport function sortPasses(buffers: SortBuffers) {\n const nodes = nodesOf(buffers);\n const update = computeKernel(\n Fn(() => {\n const block = workgroupId.x.mul(4).add(BLOCKS_AT).toVar();\n const word = (i: number) => nodes.words.element(block.add(i)).toVar();\n const [first, end, start, live] = [word(0), word(1), word(2), word(3)];\n const index = first.add(localId.x).toVar();\n If(index.greaterThanEqual(end), () => void Return());\n If(live.notEqual(uint(NO_LIVE_COUNT)), () => {\n If(index.sub(start).greaterThanEqual(nodes.liveCounts.element(live)), () => void Return());\n });\n updateInstance(nodes, index);\n })(),\n [BLOCK],\n );\n const indirect = computeKernel(\n Fn(() => writeDraws(nodes))(),\n [1],\n );\n indirect.dispatchSize = [1, 1, 1];\n return {\n update,\n indirect,\n /** Point the passes at `next`, dispatching the update pass over its `blocks` blocks: before they run. */\n point(next: SortBuffers, blocks: number): void {\n nodes.words.value = next.words;\n nodes.floats.value = next.floats;\n nodes.liveCounts.value = next.liveCounts;\n nodes.matrices.value = next.matrices;\n nodes.scaled.value = next.scaled;\n nodes.indices.value = next.indices;\n nodes.fades.value = next.fades;\n nodes.counts.value = next.counts;\n nodes.draws.value = next.draws;\n nodes.args.value = next.args;\n update.dispatchSize = [blocks, 1, 1];\n },\n dispose(): void {\n update.dispose();\n indirect.dispose();\n },\n };\n}\n\nexport type SortPasses = ReturnType<typeof sortPasses>;\n\n/** The storage nodes of `buffers`, as the passes read and write them. */\nfunction nodesOf(buffers: SortBuffers) {\n return {\n words: storage(buffers.words, \"uint\", 0).setName(\"lodRowWords\").toReadOnly(),\n floats: storage(buffers.floats, \"float\", 0).setName(\"lodRowFloats\").toReadOnly(),\n liveCounts: storage(buffers.liveCounts, \"uint\", 0).setName(\"lodLiveCounts\").toReadOnly(),\n matrices: storage(buffers.matrices, \"mat4\", 0).setName(\"lodMatrices\").toReadOnly(),\n scaled: storage(buffers.scaled, \"mat4\", 0).setName(\"lodScaledMatrices\"),\n indices: storage(buffers.indices, \"uint\", 0).setName(\"lodSlotIndices\"),\n fades: storage(buffers.fades, \"float\", 0).setName(\"lodSlotFades\"),\n counts: storage(buffers.counts, \"uint\", 0).setName(\"lodCounts\").toAtomic(),\n draws: storage(buffers.draws, \"uvec4\", 0).setName(\"lodDraws\").toReadOnly(),\n args: storage(buffers.args, \"uint\", 0).setName(\"lodDrawArgs\"),\n };\n}\n\ntype Nodes = ReturnType<typeof nodesOf>;\n\n/** The row's values, by name. */\nfunction rowOf(nodes: Nodes) {\n const u = (k: number, c: number) => nodes.words.element(k * 4 + c).toVar();\n const f = (k: number, c: number) => nodes.floats.element(k * 4 + c);\n const f4 = (k: number) => vec4(f(k, 0), f(k, 1), f(k, 2), f(k, 3)).toVar();\n const eye = f4(FLOATS_AT.eye);\n const values = f4(FLOATS_AT.values);\n return {\n count: int(u(INTS_AT.levels, 0)),\n coarsest: int(u(INTS_AT.levels, 1)),\n forced: int(u(INTS_AT.levels, 2)).sub(1), // see forcedWord\n empty: u(INTS_AT.masks, 0),\n fades: u(INTS_AT.masks, 1),\n loaded: u(INTS_AT.masks, 2),\n before: u(INTS_AT.masks, 3),\n ortho: u(INTS_AT.flags, 0),\n culled: u(INTS_AT.flags, 1),\n survivors: u(INTS_AT.flags, 2),\n drawCount: u(INTS_AT.flags, 3),\n listSize: u(INTS_AT.layout, 0),\n /** The first slot of level `level`'s list, `UNLISTED` for none. */\n start: (level: Node<\"uint\">) => nodes.words.element(uint(INTS_AT.starts * 4).add(level)),\n low: f4(FLOATS_AT.low),\n high: f4(FLOATS_AT.high),\n eye: eye.xyz,\n scale: eye.w,\n source: f4(FLOATS_AT.source),\n progress: values.x,\n reach: values.y,\n near: values.z,\n far: values.w,\n cullEye: f4(FLOATS_AT.cullEye).xyz,\n planes: Array.from({ length: 6 }, (_, i) => f4(FLOATS_AT.planes + i)),\n };\n}\n\n/** Instance `index`, sorted into the lists of the levels it draws for the camera whose row `nodes` read. */\nfunction updateInstance(nodes: Nodes, index: Node<\"uint\">): void {\n const r = rowOf(nodes);\n const { count, coarsest, forced, empty, fades, loaded, before, eye, scale, progress, reach, near, far, ortho, culled, survivors, low, high } = r;\n const m = nodes.matrices.element(index).toVar();\n const hide = () => void Return();\n If(maxScale(m).equal(0), hide);\n const grow = float(1).toVar();\n If(culled.equal(uint(1)), () => {\n const origin = column(m, 3).xyz.toVar();\n grow.assign(cullScaleNode({ origin, distance: distance(origin, r.cullEye), near, far, survivors }));\n If(grow.equal(0), hide);\n If(survivors.equal(uint(1)), () => {\n const scaled = mat4(column(m, 0).mul(grow), column(m, 1).mul(grow), column(m, 2).mul(grow), column(m, 3));\n nodes.scaled.element(index).assign(scaled);\n });\n });\n const onScreen = instanceOnScreenNode({ matrix: m, source: r.source, grow, eye, scale, ortho }).toVar();\n const centre = onScreen.xyz;\n // Outside the camera's frustum: wholly behind one of its planes, with every level and its sway.\n const extent = reach\n .mul(stretch(m))\n .mul(grow)\n .mul(1 + 1e-4)\n .negate();\n for (const plane of r.planes) If(dot(plane.xyz, centre).add(plane.w).lessThan(extent), hide);\n const height = onScreen.w;\n const drawn = levelsToDrawNode({ height, count, low, high, empty, coarsest, forced, fades, loaded, before, progress }).toVar();\n const level = int(drawn.x).toVar();\n const finer = int(drawn.y).toVar();\n const fade = drawn.z.toVar();\n const { listSize } = r;\n /** Append the instance to level `at`'s list with `signed`, if the level has one and its list has room. */\n const append = (at: Node<\"int\">, signed: Node<\"float\">) => {\n const level = uint(at).toVar();\n const start = r.start(level).toVar();\n If(start.notEqual(uint(UNLISTED)), () => {\n const k = atomicAdd(nodes.counts.element(level), uint(1)).toVar();\n If(k.lessThan(listSize), () => {\n const slot = start.add(k).toVar();\n nodes.indices.element(slot).assign(index);\n nodes.fades.element(slot).assign(signed);\n });\n });\n };\n If(level.greaterThanEqual(0), () => append(level, fade));\n // The finer neighbour fading out with it.\n If(finer.greaterThanEqual(0).and(fade.greaterThan(0)), () => append(finer, fade.negate()));\n}\n\n/** Hands each level's count to the indirect draws of its meshes (at most its list's slots), and clears the counts. */\nfunction writeDraws(nodes: Nodes): void {\n const r = rowOf(nodes);\n const { listSize } = r;\n Loop({ start: uint(0), end: r.drawCount, type: \"uint\", condition: \"<\" }, ({ i }) => {\n const draw = nodes.draws.element(i).toVar();\n const first = r.start(draw.x).toVar();\n const base = i.mul(DRAW_BYTES / 4).toVar();\n const words = nodes.args;\n // Indexed: count, instances, first index, base vertex, first instance; else count, instances, first vertex, first\n // instance and an unused word.\n words.element(base).assign(draw.y);\n const held = atomicLoad(nodes.counts.element(draw.x)).toVar();\n words.element(base.add(1)).assign(held.lessThan(listSize).select(held, listSize));\n words.element(base.add(2)).assign(draw.z);\n words.element(base.add(3)).assign(draw.w.equal(1).select(uint(0), first));\n words.element(base.add(4)).assign(draw.w.equal(1).select(first, uint(0)));\n });\n Loop({ start: uint(0), end: uint(MAX_LEVELS), type: \"uint\", condition: \"<\" }, ({ i }) => {\n atomicStore(nodes.counts.element(i), uint(0));\n });\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../../src/levels/bounds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAA+B,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,gGAAgG;AAEhG,MAAM,QAAQ,GAAG,CAAC,GAAS,EAAiB,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1J;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoD,EAAE,GAAW;IAC7F,KAAK,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,4CAA4C,CAAC,CAAC;AACtE,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,QAAQ,CAAC,KAAwC;IAC/D,IAAI,KAAK,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AACjG,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,GAAS;IACrD,MAAM,KAAK,GAAG,CAAC,IAAc,EAAE,SAAkB,EAAQ,EAAE;QACzD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,QAAQ,CAAC,WAAW,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,CAAC"}
|
|
1
|
+
{"version":3,"file":"bounds.js","sourceRoot":"","sources":["../../src/levels/bounds.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAA+B,MAAM,cAAc,CAAC;AAClF,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,gGAAgG;AAEhG,MAAM,QAAQ,GAAG,CAAC,GAAS,EAAiB,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1J;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoD,EAAE,GAAW;IAC7F,KAAK,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,MAAM,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;IACzF,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,4CAA4C,CAAC,CAAC;AACtE,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,QAAQ,CAAC,KAAwC;IAC/D,IAAI,KAAK,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IACxC,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;AACjG,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,GAAS;IACrD,MAAM,KAAK,GAAG,CAAC,IAAc,EAAE,SAAkB,EAAQ,EAAE;QACzD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,QAAQ,CAAC,WAAW,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9E,QAAQ,CAAC,cAAc,KAAK,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC;IACF,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3B,CAAC","sourcesContent":["import { Box3, Sphere, Vector3, type Matrix4, type Object3D } from \"three/webgpu\";\nimport { boundingBox, local } from \"../source/detail.js\";\nimport { isMesh } from \"../three.js\";\n\n// Where a Lod's levels are: the bounds each declares or draws, measured from their full detail.\n\nconst sphereOf = (box: Box3): Sphere | null => (box.isEmpty() ? null : new Sphere(box.getCenter(new Vector3()), box.getSize(new Vector3()).length() / 2));\n\n/**\n * The sphere fades measure for a Lod's levels: level 0's, or the first level's that draws\n * anything when level 0 draws nothing; `own` in that level's own space, `placed` in its\n * parent's (the Lod's). It is the centre and half diagonal of the level's `boundingBox`,\n * which an impostor baked from it shares. `who` names the caller in the error.\n */\nexport function measureLevels(levels: readonly { object?: Object3D; box?: Box3 }[], who: string): { own: Sphere; placed: Sphere } {\n for (const { object, box } of levels) {\n const own = sphereOf(object ? boundingBox(object) : (box ?? new Box3()));\n if (!own) continue;\n return { own, placed: object ? own.clone().applyMatrix4(local(object)) : own.clone() };\n }\n throw new Error(`${who}: no level has visible geometry to measure`);\n}\n\n/** A level's bounds in the space of the Lod that holds it, including an eager object's transform. */\nexport function levelBox(level: { object?: Object3D; box?: Box3 }): Box3 {\n if (level.box) return level.box.clone();\n return level.object ? boundingBox(level.object).applyMatrix4(local(level.object)) : new Box3();\n}\n\n/** Fill absent mesh bounds conservatively from a deferred level's declared box, without reading vertices. */\nexport function prepareBounds(root: Object3D, box: Box3): void {\n const visit = (node: Object3D, placement: Matrix4): void => {\n if (isMesh(node)) {\n if (placement.determinant() === 0) throw new Error(\"Lod: mesh placement must be invertible\");\n const geometry = node.geometry;\n geometry.boundingBox ??= box.clone().applyMatrix4(placement.clone().invert());\n geometry.boundingSphere ??= geometry.boundingBox.getBoundingSphere(new Sphere());\n }\n for (const child of node.children) visit(child, local(child).premultiply(placement));\n };\n visit(root, local(root));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cameras.js","sourceRoot":"","sources":["../../src/levels/cameras.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cameras.js","sourceRoot":"","sources":["../../src/levels/cameras.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector2, Vector4, type Camera, type Renderer, type Scene } from \"three/webgpu\";\nimport { at } from \"../at.js\";\nimport { busy } from \"./renderer.js\";\nimport { renderNow, sameContext, type RenderContext, type ShadowMap, type Target } from \"./compile/contexts.js\";\n\n// What renders tell a Lod of the cameras that draw it.\n\nconst viewport = new Vector4();\nconst canvas = new Vector2();\n\n/**\n * The height `renderer` draws at now, which levels are chosen at: CSS pixels on the canvas, so that a high-density\n * screen picks the levels a standard one does and pays for its extra pixels only in fill; pixels in a render target,\n * except one the canvas's size, which stands in for it (a post-processing target); in a shadow pass, the map's texels.\n */\nexport function drawingHeight(renderer: Renderer, shadow: boolean): number | null {\n const active = renderer.getRenderTarget();\n if (shadow) return active ? active.height : null;\n if (!active) return renderer.getViewport(viewport).w;\n const ratio = active.height === renderer.getDrawingBufferSize(canvas).y ? renderer.getPixelRatio() : 1;\n return active.viewport.w / ratio;\n}\n\n/** What renders told of a camera: the height it last drew at, its render contexts, and the shadow maps it drew. */\ninterface CameraState {\n height: number | null;\n /**\n * Its render contexts, the one it last rendered in first. A context stays the same object while what it describes\n * does, so what was compiled for it stays compiled when the camera renders other scenes or targets between.\n */\n contexts: RenderContext[];\n /** The shadow maps it drew, as a light's shadow camera: an arriving caster's draws are compiled for them too. */\n shadows: ShadowMap[];\n}\n\n/** The render contexts kept per camera: those of a camera that draws several scenes or targets each frame. */\nconst CONTEXTS = 8;\n\n/**\n * What a Lod's renders told of each camera that drew it: the height it draws at, where it rendered, and the shadow\n * maps it drew. A context or shadow map whose target is disposed is passed over, so that no compile revives the target.\n */\nexport class CameraRenders {\n /** Per camera: a side table, as three's Camera has no place for a package's state; a camera let go is let go here. */\n private readonly cameras = new WeakMap<Camera, CameraState>();\n /** The targets disposed since they were last drawn into. */\n private readonly disposed = new WeakSet<Target>();\n /** One listener on each target drawn into, until it is disposed or `dispose` is called. */\n private readonly listeners = new Map<Target, () => void>();\n\n /**\n * The height `camera` draws at, measured from `renderer` while it renders (see `drawingHeight`), else the last it\n * drew at; before it drew, the canvas's.\n */\n heightOf(camera: Camera, renderer: Renderer, shadow: boolean): number {\n const height = busy(renderer) ? drawingHeight(renderer, shadow) : null;\n if (height !== null) this.stateOf(camera).height = height;\n return this.cameras.get(camera)?.height ?? renderer.getSize(canvas).y;\n }\n\n /** Where `camera` last rendered a scene holding the Lod, into a target not disposed. */\n contextOf(camera: Camera): RenderContext | undefined {\n return this.cameras.get(camera)?.contexts.find((context) => !this.isDisposed(context.target));\n }\n\n /**\n * Whether `context` is still one its camera renders in: not one whose target was disposed, nor one evicted by the\n * cap on contexts per camera.\n */\n holds(context: RenderContext): boolean {\n return !this.isDisposed(context.target) && (this.cameras.get(context.camera)?.contexts.includes(context) ?? false);\n }\n\n /** The shadow maps `cameras` drew, into targets not disposed. */\n shadowsOf(cameras: Iterable<Camera>): ShadowMap[] {\n return [...cameras].flatMap((camera) => this.cameras.get(camera)?.shadows ?? []).filter((map) => !this.isDisposed(map.target));\n }\n\n /** Whether `camera`, a light's shadow camera, drew a shadow map whose target is not disposed. */\n drawsShadowMap(camera: Camera): boolean {\n return this.cameras.get(camera)?.shadows.some((map) => !this.isDisposed(map.target)) ?? false;\n }\n\n /**\n * Whether `target` was disposed since it was last drawn into: what draws into it compiles nothing. The output never\n * is.\n */\n isDisposed(target: RenderContext[\"target\"]): boolean {\n return target !== null && this.disposed.has(target);\n }\n\n /** Note what `renderer` rendering `scene` with `camera` tells: the camera's render context, or a shadow map. */\n note(renderer: Renderer, scene: Scene, camera: Camera): void {\n const now = renderNow(renderer, scene, camera);\n if (!now) return;\n const state = this.stateOf(camera);\n if (\"shadow\" in now) {\n const { shadow } = now;\n this.drawnInto(shadow.target);\n const index = state.shadows.findIndex((map) => map.target === shadow.target);\n if (index >= 0) state.shadows[index] = shadow;\n else state.shadows.push(shadow);\n return;\n }\n const { contexts } = state;\n const { target } = now.context;\n if (target) this.drawnInto(target);\n const index = contexts.findIndex((context) => sameContext(context, now.context));\n contexts.unshift(index >= 0 ? at(contexts.splice(index, 1), 0) : now.context);\n if (contexts.length > CONTEXTS) contexts.pop();\n }\n\n /** Stop listening to the targets drawn into. */\n dispose(): void {\n for (const [target, listener] of this.listeners) target.removeEventListener(\"dispose\", listener);\n this.listeners.clear();\n }\n\n /** `target` is drawn into now: live again if it was disposed, and listened to for its disposal. */\n private drawnInto(target: Target): void {\n this.disposed.delete(target);\n if (this.listeners.has(target)) return;\n const listener = () => {\n this.disposed.add(target);\n target.removeEventListener(\"dispose\", listener);\n this.listeners.delete(target);\n };\n this.listeners.set(target, listener);\n target.addEventListener(\"dispose\", listener);\n }\n\n private stateOf(camera: Camera): CameraState {\n let state = this.cameras.get(camera);\n if (!state) this.cameras.set(camera, (state = { height: null, contexts: [], shadows: [] }));\n return state;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contexts.js","sourceRoot":"","sources":["../../../src/levels/compile/contexts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA4BtE,0GAA0G;AAC1G,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,KAAY,EAAE,MAAc;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;IAC1C,yDAAyD;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC;QACxC,OAAO,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtH,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;IACjD,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;AACnG,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAE,CAAgB,EAAW,EAAE,CACzE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC"}
|
|
1
|
+
{"version":3,"file":"contexts.js","sourceRoot":"","sources":["../../../src/levels/compile/contexts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA4BtE,0GAA0G;AAC1G,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,KAAY,EAAE,MAAc;IACxE,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;IAC1C,yDAAyD;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/C,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC;QACxC,OAAO,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtH,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;IACpD,MAAM,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,oBAAoB,EAAE,CAAC;IACjD,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;AACnG,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAE,CAAgB,EAAW,EAAE,CACzE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC","sourcesContent":["import type { Camera, Material, Renderer, Scene } from \"three/webgpu\";\nimport { callDepth, inShadowMap, isOutputPass } from \"../renderer.js\";\n\n// Where cameras render: what a level arriving for a camera is compiled for.\n\nexport interface RenderContext {\n camera: Camera;\n scene: Scene;\n /** The target the render was asked for: null for the output, also while three draws it through its output pass. */\n target: ReturnType<Renderer[\"getRenderTarget\"]>;\n mrt: Parameters<Renderer[\"setMRT\"]>[0];\n cubeFace: number;\n mipLevel: number;\n /** How deep in renders it drew (see `callDepth`). */\n depth: number;\n}\n\n/** A render target a camera or shadow map draws into. */\nexport type Target = NonNullable<RenderContext[\"target\"]>;\n\n/** A shadow map rendered for a scene, with the camera and override material three drew it with. */\nexport interface ShadowMap {\n camera: Camera;\n scene: Scene;\n target: Target;\n overrideMaterial: Material;\n depth: number;\n}\n\n/** What `renderer` rendering `scene` with `camera` is now: a camera's render context, or a shadow map. */\nexport function renderNow(renderer: Renderer, scene: Scene, camera: Camera): { context: RenderContext } | { shadow: ShadowMap } | null {\n const active = renderer.getRenderTarget();\n // A compile, outside renders, prepares draws at depth 0.\n const depth = Math.max(callDepth(renderer), 0);\n if (inShadowMap(scene)) {\n const material = scene.overrideMaterial;\n return active && material ? { shadow: { camera, scene, target: active, overrideMaterial: material, depth } } : null;\n }\n const target = isOutputPass(active) ? null : active;\n const cubeFace = renderer.getActiveCubeFace();\n const mipLevel = renderer.getActiveMipmapLevel();\n return { context: { camera, scene, target, mrt: renderer.getMRT(), cubeFace, mipLevel, depth } };\n}\n\n/** Whether `a` and `b` describe the same render: what was compiled for one is compiled for the other. */\nexport const sameContext = (a: RenderContext, b: RenderContext): boolean =>\n a.scene === b.scene && a.target === b.target && a.mrt === b.mrt && a.cubeFace === b.cubeFace && a.mipLevel === b.mipLevel && a.depth === b.depth;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/levels/compile/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/levels/compile/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Mesh, Object3D, Renderer, Texture } from \"three/webgpu\";\nimport { isMesh, isNode, isTexture } from \"../../three.js\";\nimport type { RenderContext, ShadowMap, Target } from \"./contexts.js\";\nimport { compileMesh, frame, sharePipelines, type CompileTarget } from \"./pipelines.js\";\n\n/** What a compile is for besides its context: shadow maps, and which targets were disposed. */\nexport interface CompileFor {\n /** The shadow maps the scene's level meshes draw into: each mesh that casts compiles for them too. */\n shadows: readonly ShadowMap[];\n /** Whether `target` was disposed: no draw compiles for it, as that would make its textures again. */\n isDisposed(target: Target): boolean;\n}\n\nconst compilers = new WeakMap<Renderer, Compiler>();\n\n/** What `renderer` prepares levels with: one Compiler per renderer, made the first time a level compiles for it. */\nexport function compilerOf(renderer: Renderer): Compiler {\n let compiler = compilers.get(renderer);\n if (!compiler) compilers.set(renderer, (compiler = new Compiler(renderer)));\n return compiler;\n}\n\n/**\n * What a renderer prepares for the levels arriving: the levels share its queue's budget and its pipeline cache, which\n * it shares the readiness of (see `sharePipelines`).\n */\nexport class Compiler {\n /** Uploaded since the last frame. */\n private uploaded = 0;\n /** The last upload: uploads run in turn. */\n private uploads = Promise.resolve();\n /**\n * The last draw compiled for each shader build: material, attributes, target, shadow map and nesting. three starts a\n * build for each draw that misses its cache, even one another draw is building, so a draw that builds alike waits\n * for the last one and finds its build cached.\n */\n private readonly builds = new Map<string, Promise<void>>();\n\n constructor(private readonly renderer: Renderer) {\n sharePipelines(renderer);\n }\n\n /**\n * Prepare the same target and MRT as the camera's draw, even if normal rendering has since restored the canvas, and\n * the shadow maps of `compileFor`, for each mesh that casts. r186 uploads a texture synchronously inside initTexture,\n * and creates a pipeline it meets while rendering synchronously, so each texture and draw is prepared here first.\n * Textures upload paced across frames (see `paced`); every draw then compiles at once, as do the draws of every\n * other level the renderer prepares, so their pipelines are created side by side.\n */\n async compileAsync(object: Object3D, context: RenderContext, { shadows, isDisposed }: CompileFor): Promise<void> {\n const { renderer } = this;\n const { memory } = renderer.info;\n for (const texture of textures(object))\n await this.paced(() => {\n const known = memory.textures;\n renderer.initTexture(texture);\n return memory.textures === known ? 0 : bytesOf(texture);\n });\n const meshes: Mesh[] = [];\n object.traverse((node) => {\n if (isMesh(node)) meshes.push(node);\n });\n const draws: Promise<void>[] = [];\n for (const mesh of meshes) {\n const targets: CompileTarget[] = [{ context, overrideMaterial: null }];\n if (mesh.castShadow)\n for (const { camera, target, overrideMaterial, depth } of shadows.filter((map) => map.scene === context.scene))\n targets.push({ context: { ...context, camera, target, mrt: null, cubeFace: 0, mipLevel: 0, depth }, overrideMaterial });\n // r186 starts only the first material before yielding; isolate one draw so setup sees its captured target/MRT.\n const parts = Array.isArray(mesh.material) ? mesh.geometry.groups.map((group) => [group]) : [mesh.geometry.groups];\n for (const target of targets) for (const part of parts) draws.push(this.compileDraw(mesh, target, part, isDisposed));\n }\n await Promise.all(draws);\n }\n\n /** Run `upload`, which answers the bytes it uploaded, after the next frame if those since the last one reached `FRAME_UPLOAD`. */\n private paced(upload: () => number): Promise<void> {\n const run = this.uploads.then(async () => {\n if (this.uploaded >= FRAME_UPLOAD) await frame();\n const bytes = upload();\n // The next frame empties the budget, whether or not an upload waits for it.\n if (bytes > 0 && this.uploaded === 0) void frame().then(() => void (this.uploaded = 0));\n this.uploaded += bytes;\n });\n this.uploads = run.catch(() => {});\n return run;\n }\n\n /** Compile the draw of `mesh`'s groups `part` for `target`. */\n private compileDraw(mesh: Mesh, target: CompileTarget, part: Group[], isDisposed: CompileFor[\"isDisposed\"]): Promise<void> {\n const { builds } = this;\n const material = Array.isArray(mesh.material) ? mesh.material[part[0]?.materialIndex ?? 0] : mesh.material;\n const key = [\n material ? material.uuid : \"none\",\n Object.keys(mesh.geometry.attributes).sort().join(),\n target.context.target ? target.context.target.texture.id : \"canvas\",\n target.overrideMaterial ? target.overrideMaterial.uuid : \"camera\",\n target.context.depth,\n ].join(\" \");\n const start = () => {\n // Uploads and alike builds may have taken frames: a target disposed meanwhile stays disposed.\n const drawn = target.context.target;\n if (drawn && isDisposed(drawn)) return Promise.resolve();\n const groups = mesh.geometry.groups;\n try {\n mesh.geometry.groups = part;\n return compileMesh(this.renderer, mesh, target);\n } finally {\n mesh.geometry.groups = groups;\n }\n };\n const alike = builds.get(key);\n const own = alike ? alike.then(start) : start();\n const settled = own.then(\n () => {},\n () => {},\n );\n builds.set(key, settled);\n void settled.then(() => {\n if (builds.get(key) === settled) builds.delete(key);\n });\n return own;\n }\n}\n\n/**\n * What texture uploads may add in one frame, in bytes: a 2048² RGBA texture. Uploads run on the GPU's queue before the\n * frame that follows them, which waits for them all. A draw's geometry is not paced: its buffers copy in far less\n * time than a texture of the same size and its mipmaps.\n */\nconst FRAME_UPLOAD = 16 * 2 ** 20;\n\n/** A draw's range of a geometry, as three's groups hold it. */\ntype Group = Mesh[\"geometry\"][\"groups\"][number];\n\nconst sum = (values: number[]) => values.reduce((total, value) => total + value, 0);\n\n/**\n * The bytes `texture` uploads, as three 0.186.1 uploads it: its mip levels', or its image's and the mipmaps three\n * generates from it. An uncompressed cube's image is its six faces, and its mip levels are those after the first, with\n * six images each; a compressed cube's faces carry their own mip levels, unless it has some.\n */\nfunction bytesOf(texture: Texture): number {\n const levels: unknown[] = texture.mipmaps ?? [];\n const cube = Array.isArray(texture.image);\n if (levels.length > 0 && (!cube || Reflect.get(texture, \"isCompressedTexture\") === true)) return bytesIn(levels);\n const bytes = bytesIn(texture.image) + bytesIn(levels);\n return texture.generateMipmaps && levels.length === 0 ? Math.ceil((bytes * 4) / 3) : bytes;\n}\n\n/** The bytes of an image, a mip level, a cube's face or a list of them: its data's, or four per texel. */\nfunction bytesIn(image: unknown): number {\n if (Array.isArray(image)) return sum(image.map(bytesIn));\n if (typeof image !== \"object\" || image === null) return 0;\n if (isTexture(image)) return bytesIn(image.mipmaps?.length ? image.mipmaps : image.image);\n const images: unknown = Reflect.get(image, \"images\");\n if (Array.isArray(images)) return bytesIn(images);\n const data: unknown = Reflect.get(image, \"data\");\n if (ArrayBuffer.isView(data)) return data.byteLength;\n const dimension = (name: string) => {\n const value: unknown = Reflect.get(image, name);\n return typeof value === \"number\" ? value : 1;\n };\n return dimension(\"width\") * dimension(\"height\") * dimension(\"depth\") * 4;\n}\n\n/**\n * The textures `object`'s meshes draw: their materials', those their nodes sample, and those a material keeps in plain\n * objects and arrays for nodes it makes while it builds (an impostor's atlases, a baked mesh's rooms).\n */\nfunction textures(object: Object3D): Set<Texture> {\n const found = new Set<Texture>();\n const visited = new Set<unknown>();\n const visit = (value: unknown) => {\n if (typeof value !== \"object\" || value === null || visited.has(value)) return;\n visited.add(value);\n if (isTexture(value)) found.add(value);\n else if (isNode(value)) {\n visit(Reflect.get(value, \"value\"));\n for (const child of value.getChildren()) visit(child);\n } else if (Array.isArray(value)) for (const entry of value) visit(entry);\n else if ([Object.prototype, null].includes(Object.getPrototypeOf(value)))\n for (const [key, entry] of Object.entries(value)) if (key !== \"userData\") visit(entry);\n };\n object.traverse((node) => {\n if (!isMesh(node)) return;\n // userData is the application's, not what a material binds.\n for (const material of [node.material].flat()) for (const [key, value] of Object.entries(material)) if (key !== \"userData\") visit(value);\n });\n return found;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipelines.js","sourceRoot":"","sources":["../../../src/levels/compile/pipelines.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipelines.js","sourceRoot":"","sources":["../../../src/levels/compile/pipelines.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Material, Mesh, Renderer } from \"three/webgpu\";\nimport type { RenderContext } from \"./contexts.js\";\n\ninterface Pipelines {\n getForRender(object: unknown, promises?: Promise<unknown>[] | null): unknown;\n}\n\n/** The next frame. */\nexport const frame = () => new Promise<void>((resolve) => requestAnimationFrame(() => resolve()));\n\nconst isPipelines = (value: unknown): value is Pipelines =>\n typeof value === \"object\" && value !== null && typeof Reflect.get(value, \"getForRender\") === \"function\";\n\n/**\n * r186 caches a pipeline before it finishes, but a compile reusing it receives none of its promises. Share that\n * pipeline's readiness, not the readiness of every earlier level: wrap r186's `_pipelines.getForRender`, as no public\n * API tells when a cached pipeline is ready. Installed once per renderer, by its Compiler. The adapter\n * follows the renderer's pipeline cache lifetime; pending entries disappear on success or failure and otherwise hold no\n * completed pipelines.\n */\nexport function sharePipelines(renderer: Renderer): void {\n const pipelines: unknown = Reflect.get(renderer, \"_pipelines\");\n if (!isPipelines(pipelines)) throw new Error(\"Lod: three's renderer keeps no render pipelines (lod mirrors r186)\");\n const get = pipelines.getForRender;\n const pending = new WeakMap<object, Promise<void>>();\n pipelines.getForRender = (object, promises) => {\n const before = promises?.length ?? 0;\n const pipeline = get.call(pipelines, object, promises);\n if (!promises) return pipeline;\n if (typeof pipeline !== \"object\" || pipeline === null) throw new Error(\"Lod: three returned no render pipeline\");\n let ready = pending.get(pipeline);\n if (!ready) {\n ready = pipelineReady(renderer, pipeline, promises.slice(before));\n pending.set(pipeline, ready);\n const clear = () => pending.delete(pipeline);\n void ready.then(clear, clear);\n }\n promises.push(ready);\n return pipeline;\n };\n}\n\n/**\n * A cached pipeline may have been started by the host before the adapter was installed: wait until the backend's data\n * for it holds a pipeline or an error. r186's `_isDeviceLost` is read as no public API tells a lost device.\n */\nasync function pipelineReady(renderer: Renderer, pipeline: object, started: readonly Promise<unknown>[]): Promise<void> {\n await Promise.all(started);\n const get: unknown = Reflect.get(renderer.backend, \"get\");\n if (typeof get !== \"function\") throw new Error(\"Lod: three's backend keeps no pipeline data\");\n for (;;) {\n const data: unknown = Reflect.apply(get, renderer.backend, [pipeline]);\n if (typeof data !== \"object\" || data === null) throw new Error(\"Lod: three's backend has no render pipeline data\");\n if (Reflect.get(data, \"error\") === true) throw new Error(\"Lod: render pipeline compilation failed\");\n if (Reflect.get(renderer, \"_isDeviceLost\") === true) throw new Error(\"Lod: device lost while compiling a render pipeline\");\n if (Reflect.get(data, \"pipeline\")) return;\n await frame();\n }\n}\n\n/** What a level's draws are compiled for: the camera's draw, or a shadow map's with the material three overrides with. */\nexport interface CompileTarget {\n context: RenderContext;\n overrideMaterial: Material | null;\n}\n\n/**\n * What r186's renderObject gives an override material for one draw, and puts back once it has handed the draw on.\n * This and `DRAWN` mirror three 0.186.1's Renderer.renderObject; a three that sets other keys builds shadow shaders\n * in the frame again.\n */\nconst DRAW_STATE = [\"colorNode\", \"depthNode\", \"positionNode\", \"side\", \"displacementMap\", \"displacementScale\", \"displacementBias\"];\n/** The keys a draw adds to an override material that lacks them, in the order it adds them. */\nconst DRAWN = [\"alphaMap\", \"displacementMap\", \"displacementScale\", \"displacementBias\"];\n\n/**\n * A copy of the shadow map's override material for compiling one draw. r186's compileAsync builds the draw only after\n * renderObject has put back the per-draw state it gave the override (the caster's shadow nodes and side), so with the\n * shared material it would prepare a pipeline the shadow map never draws with. The copy holds the state of the draw.\n * It is not disposed: that would release the pipeline before the shadow map draws with it.\n */\nfunction keepingDrawState(material: Material): Material {\n const copy = material.clone();\n // The build's cache key lists a material's keys in order. clone() leaves out those three adds to its shadow material,\n // its flag and those its draws set, which the copy gets in the order the shared material has them once it drew.\n for (const key of [...Object.keys(material), ...DRAWN])\n if (!key.startsWith(\"_\") && !Object.hasOwn(copy, key)) Reflect.set(copy, key, Reflect.get(material, key) ?? null);\n for (const key of DRAW_STATE) {\n let value: unknown = Reflect.get(copy, key);\n let given = false;\n Object.defineProperty(copy, key, {\n get: () => value,\n set: (next: unknown) => {\n if (given) return;\n given = true;\n value = next;\n },\n });\n }\n return copy;\n}\n\nexport function compileMesh(renderer: Renderer, mesh: Mesh, { context, overrideMaterial }: CompileTarget): Promise<void> {\n const { camera, scene } = context;\n const target = renderer.getRenderTarget();\n const mrt = renderer.getMRT();\n const cubeFace = renderer.getActiveCubeFace();\n const mipLevel = renderer.getActiveMipmapLevel();\n const culled = mesh.frustumCulled;\n const visible = mesh.visible;\n const children = mesh.children;\n const background = scene.background;\n const backgroundNode = scene.backgroundNode;\n const override = scene.overrideMaterial;\n try {\n renderer.setRenderTarget(context.target, context.cubeFace, context.mipLevel);\n renderer.setMRT(context.mrt);\n scene.overrideMaterial = overrideMaterial && keepingDrawState(overrideMaterial);\n // Demanded levels can still be hidden or outside the last camera's frustum.\n mesh.frustumCulled = false;\n mesh.visible = true;\n mesh.children = [];\n // r186 compiles backgrounds first, which would postpone this mesh until after renderer state is restored.\n scene.background = null;\n scene.backgroundNode = null;\n return atDepth(renderer, context.depth, () => renderer.compileAsync(mesh, camera, scene));\n } finally {\n scene.background = background;\n scene.backgroundNode = backgroundNode;\n scene.overrideMaterial = override;\n mesh.children = children;\n mesh.frustumCulled = culled;\n mesh.visible = visible;\n renderer.setRenderTarget(target, cubeFace, mipLevel);\n renderer.setMRT(mrt);\n }\n}\n\n/** three's render contexts, which a compile takes at depth 0. */\ninterface RenderContexts {\n get(target: unknown, mrt: unknown, depth?: number): unknown;\n}\n\nconst isRenderContexts = (value: unknown): value is RenderContexts =>\n typeof value === \"object\" && value !== null && typeof Reflect.get(value, \"get\") === \"function\";\n\n/**\n * Run `compile`, which starts a compileAsync, so that it prepares draws for renders `depth` deep. Mirrors three r186\n * (0.186.1): compileAsync takes its render context, as a render of its own, with the first `_renderContexts.get` of\n * its synchronous start. Only that call is given `depth`; renders the compile starts meanwhile take their own. A three\n * that no longer makes that call fails here rather than compiling for the wrong depth. No public API compiles for a\n * depth other than 0.\n */\nexport function atDepth(renderer: Renderer, depth: number, compile: () => Promise<void>): Promise<void> {\n if (depth === 0) return compile();\n const contexts: unknown = Reflect.get(renderer, \"_renderContexts\");\n if (!isRenderContexts(contexts)) throw new Error(\"Lod: three's renderer keeps no render contexts\");\n const own = Object.hasOwn(contexts, \"get\");\n const get = contexts.get;\n let taken = false;\n const restore = () => {\n if (own) contexts.get = get;\n else Reflect.deleteProperty(contexts, \"get\");\n };\n contexts.get = (target, mrt) => {\n taken = true;\n restore();\n return get.call(contexts, target, mrt, depth);\n };\n let result: Promise<void>;\n try {\n result = compile();\n } finally {\n if (!taken) restore();\n }\n // compileAsync returns at once on a lost device, which is no fault of three's version; r186's `_isDeviceLost` alone\n // tells it.\n if (taken || Reflect.get(renderer, \"_isDeviceLost\") === true) return result;\n void result.catch(() => {});\n throw new Error(\"Lod: three's compileAsync took no render context as it started (lod mirrors three r186)\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiles.js","sourceRoot":"","sources":["../../src/levels/compiles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;GAGG;AACH,MAAM,OAAO,eAAe;IAQP;IAEA;IATnB,qHAAqH;IACpG,OAAO,GAAG,IAAI,OAAO,EAAyB,CAAC;IAChE,gFAAgF;IAC/D,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEzD;IACE,yDAAyD;IACxC,GAA4D;IAC7E,yCAAyC;IACxB,MAAgC;QAFhC,QAAG,GAAH,GAAG,CAAyD;QAE5D,WAAM,GAAN,MAAM,CAA0B;IAChD,CAAC;IAEJ,gGAAgG;IAChG,KAAK,CAAC,OAAsB,EAAE,IAAY;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,0HAA0H;IAC1H,OAAO,CAAC,OAAsB,EAAE,IAAY;QAC1C,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO;QACvB,qEAAqE;QACrE,MAAM,IAAI,GAAG,QAAQ,EAAE;aACpB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aACnC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC7C,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,mHAAmH;IACnH,OAAO,CAAC,QAAwB;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"compiles.js","sourceRoot":"","sources":["../../src/levels/compiles.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;GAGG;AACH,MAAM,OAAO,eAAe;IAQP;IAEA;IATnB,qHAAqH;IACpG,OAAO,GAAG,IAAI,OAAO,EAAyB,CAAC;IAChE,gFAAgF;IAC/D,IAAI,GAAG,IAAI,GAAG,EAAyB,CAAC;IAEzD;IACE,yDAAyD;IACxC,GAA4D;IAC7E,yCAAyC;IACxB,MAAgC;QAFhC,QAAG,GAAH,GAAG,CAAyD;QAE5D,WAAM,GAAN,MAAM,CAA0B;IAChD,CAAC;IAEJ,gGAAgG;IAChG,KAAK,CAAC,OAAsB,EAAE,IAAY;QACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,0HAA0H;IAC1H,OAAO,CAAC,OAAsB,EAAE,IAAY;QAC1C,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO;QACvB,qEAAqE;QACrE,MAAM,IAAI,GAAG,QAAQ,EAAE;aACpB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aACnC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC7C,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,mHAAmH;IACnH,OAAO,CAAC,QAAwB;QAC9B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAAE,IAAI,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sEAAsE;IACtE,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;CACF","sourcesContent":["import type { Camera } from \"three/webgpu\";\nimport { nextTask } from \"../task.js\";\nimport type { RenderContext } from \"./compile/contexts.js\";\nimport type { CameraRequests } from \"./requests.js\";\n\n/**\n * A Lod's background compiles of its loaded levels, per render context: which levels each context's compile has\n * started for, so that each compiles once per context, and the compiles still running.\n */\nexport class ContextCompiles {\n /** Per render context, the bits of the levels whose compile for it has started: a context dropped drops its bits. */\n private readonly claimed = new WeakMap<RenderContext, number>();\n /** The compiles running, each with the camera whose context it compiles for. */\n private readonly runs = new Map<Promise<void>, Camera>();\n\n constructor(\n /** Compile the loaded levels of `bits` for `context`. */\n private readonly run: (context: RenderContext, bits: number) => Promise<void>,\n /** Called with what a compile throws. */\n private readonly failed: (error: unknown) => void,\n ) {}\n\n /** Mark the levels of `bits` as compiling for `context`, and answer those that were not yet. */\n claim(context: RenderContext, bits: number): number {\n const claimed = this.claimed.get(context) ?? 0;\n this.claimed.set(context, claimed | bits);\n return bits & ~claimed;\n }\n\n /** Compile the loaded levels of `bits` for `context` in the background, once the render that asked for them has ended. */\n compile(context: RenderContext, bits: number): void {\n if (bits === 0) return;\n // A render runs within one task: the next starts after it has ended.\n const done = nextTask()\n .then(() => this.run(context, bits))\n .catch((error: unknown) => this.failed(error))\n .finally(() => this.runs.delete(done));\n this.runs.set(done, context.camera);\n }\n\n /** Whether a compile runs for a camera still rendering the Lod: one for a camera that stopped holds nothing up. */\n running(requests: CameraRequests): boolean {\n for (const camera of this.runs.values()) if (requests.rendering(camera)) return true;\n return false;\n }\n\n /** The compiles running, each settling once its compile has ended. */\n tasks(): Iterable<Promise<void>> {\n return this.runs.keys();\n }\n}\n"]}
|