@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.
Files changed (204) hide show
  1. package/README.md +5 -8
  2. package/dist/bake.d.ts +16 -2
  3. package/dist/bake.js +92 -4
  4. package/dist/bake.js.map +1 -1
  5. package/dist/baked/index.d.ts +2 -2
  6. package/dist/baked/index.js +2 -2
  7. package/dist/baked/interior/faces.js +4 -2
  8. package/dist/baked/interior/faces.js.map +1 -1
  9. package/dist/baked/interior/material.js +1 -1
  10. package/dist/baked/interior/material.js.map +1 -1
  11. package/dist/baked/interior/rooms.d.ts +1 -1
  12. package/dist/baked/interior/rooms.js +1 -1
  13. package/dist/dispose.d.ts +3 -3
  14. package/dist/dispose.js +6 -6
  15. package/dist/dispose.js.map +1 -1
  16. package/dist/foliage.d.ts +32 -0
  17. package/dist/foliage.js +137 -0
  18. package/dist/foliage.js.map +1 -0
  19. package/dist/impostor/bake/index.d.ts +3 -3
  20. package/dist/impostor/bake/index.js +12 -3
  21. package/dist/impostor/bake/index.js.map +1 -1
  22. package/dist/impostor/bake/source.d.ts +2 -1
  23. package/dist/impostor/bake/source.js +2 -2
  24. package/dist/impostor/bake/source.js.map +1 -1
  25. package/dist/impostor/impostor.d.ts +1 -1
  26. package/dist/impostor/impostor.js +1 -1
  27. package/dist/impostor/ktx2/encode.js +5 -2
  28. package/dist/impostor/ktx2/encode.js.map +1 -1
  29. package/dist/impostor/ktx2/uastc.js +3 -2
  30. package/dist/impostor/ktx2/uastc.js.map +1 -1
  31. package/dist/impostor/ktx2/worker.js +0 -2
  32. package/dist/impostor/ktx2/worker.js.map +1 -1
  33. package/dist/impostor/mesh/card.d.ts +1 -1
  34. package/dist/impostor/mesh/index.d.ts +2 -2
  35. package/dist/impostor/mesh/index.js +3 -3
  36. package/dist/impostor/mesh/index.js.map +1 -1
  37. package/dist/index.d.ts +3 -6
  38. package/dist/index.js +3 -6
  39. package/dist/index.js.map +1 -1
  40. package/dist/instanced/camera.d.ts +13 -25
  41. package/dist/instanced/camera.js +17 -42
  42. package/dist/instanced/camera.js.map +1 -1
  43. package/dist/instanced/clusters.d.ts +68 -0
  44. package/dist/instanced/clusters.js +172 -0
  45. package/dist/instanced/clusters.js.map +1 -0
  46. package/dist/instanced/cull.d.ts +3 -3
  47. package/dist/instanced/cull.js +2 -2
  48. package/dist/instanced/cull.js.map +1 -1
  49. package/dist/instanced/instances.d.ts +39 -0
  50. package/dist/instanced/instances.js +104 -0
  51. package/dist/instanced/instances.js.map +1 -0
  52. package/dist/instanced/key.d.ts +1 -1
  53. package/dist/instanced/key.js +1 -1
  54. package/dist/instanced/key.js.map +1 -1
  55. package/dist/instanced/levels.d.ts +9 -9
  56. package/dist/instanced/levels.js +7 -6
  57. package/dist/instanced/levels.js.map +1 -1
  58. package/dist/instanced/lists.d.ts +29 -39
  59. package/dist/instanced/lists.js +45 -62
  60. package/dist/instanced/lists.js.map +1 -1
  61. package/dist/instanced/measure.d.ts +2 -2
  62. package/dist/instanced/measure.js +2 -2
  63. package/dist/instanced/meshes.d.ts +11 -9
  64. package/dist/instanced/meshes.js +26 -16
  65. package/dist/instanced/meshes.js.map +1 -1
  66. package/dist/instanced/mirror.d.ts +16 -12
  67. package/dist/instanced/mirror.js +51 -12
  68. package/dist/instanced/mirror.js.map +1 -1
  69. package/dist/instanced/raycast.d.ts +6 -9
  70. package/dist/instanced/raycast.js +15 -18
  71. package/dist/instanced/raycast.js.map +1 -1
  72. package/dist/instanced/rows.d.ts +22 -73
  73. package/dist/instanced/rows.js +24 -189
  74. package/dist/instanced/rows.js.map +1 -1
  75. package/dist/instanced/shape.d.ts +3 -1
  76. package/dist/instanced/shape.js +6 -3
  77. package/dist/instanced/shape.js.map +1 -1
  78. package/dist/instanced/sort.d.ts +36 -34
  79. package/dist/instanced/sort.js +168 -132
  80. package/dist/instanced/sort.js.map +1 -1
  81. package/dist/instanced/update.d.ts +17 -12
  82. package/dist/instanced/update.js +64 -85
  83. package/dist/instanced/update.js.map +1 -1
  84. package/dist/levels/compile/index.d.ts +4 -2
  85. package/dist/levels/compile/index.js +10 -2
  86. package/dist/levels/compile/index.js.map +1 -1
  87. package/dist/levels/compile/pipelines.d.ts +1 -1
  88. package/dist/levels/compile/pipelines.js +1 -6
  89. package/dist/levels/compile/pipelines.js.map +1 -1
  90. package/dist/levels/draw.d.ts +1 -1
  91. package/dist/levels/draw.js +3 -3
  92. package/dist/levels/fade.d.ts +13 -22
  93. package/dist/levels/fade.js +17 -38
  94. package/dist/levels/fade.js.map +1 -1
  95. package/dist/levels/index.d.ts +7 -7
  96. package/dist/levels/index.js +1 -1
  97. package/dist/levels/item.d.ts +10 -10
  98. package/dist/levels/item.js +15 -23
  99. package/dist/levels/item.js.map +1 -1
  100. package/dist/levels/load.d.ts +1 -1
  101. package/dist/levels/load.js +5 -3
  102. package/dist/levels/load.js.map +1 -1
  103. package/dist/levels/manager.d.ts +30 -31
  104. package/dist/levels/manager.js +75 -62
  105. package/dist/levels/manager.js.map +1 -1
  106. package/dist/levels/material.d.ts +2 -2
  107. package/dist/levels/material.js +2 -2
  108. package/dist/levels/renderer.d.ts +8 -5
  109. package/dist/levels/renderer.js +20 -4
  110. package/dist/levels/renderer.js.map +1 -1
  111. package/dist/levels/requests.d.ts +4 -1
  112. package/dist/levels/requests.js +3 -1
  113. package/dist/levels/requests.js.map +1 -1
  114. package/dist/loader/context.d.ts +9 -11
  115. package/dist/loader/context.js +12 -7
  116. package/dist/loader/context.js.map +1 -1
  117. package/dist/loader/entry.d.ts +4 -0
  118. package/dist/loader/entry.js +43 -0
  119. package/dist/loader/entry.js.map +1 -0
  120. package/dist/loader/index.d.ts +49 -35
  121. package/dist/loader/index.js +123 -135
  122. package/dist/loader/index.js.map +1 -1
  123. package/dist/loader/level.js +5 -5
  124. package/dist/loader/level.js.map +1 -1
  125. package/dist/loader/node.d.ts +26 -0
  126. package/dist/loader/node.js +199 -0
  127. package/dist/loader/node.js.map +1 -0
  128. package/dist/loader/request.d.ts +11 -44
  129. package/dist/loader/request.js +7 -47
  130. package/dist/loader/request.js.map +1 -1
  131. package/dist/loader/url.d.ts +10 -9
  132. package/dist/loader/url.js +21 -17
  133. package/dist/loader/url.js.map +1 -1
  134. package/dist/lod.d.ts +122 -62
  135. package/dist/lod.js +332 -187
  136. package/dist/lod.js.map +1 -1
  137. package/dist/meshopt.d.ts +1 -1
  138. package/dist/meshopt.js +3 -2
  139. package/dist/meshopt.js.map +1 -1
  140. package/dist/node-process.d.ts +5 -0
  141. package/dist/node-process.js +6 -0
  142. package/dist/node-process.js.map +1 -0
  143. package/dist/node.d.ts +2 -0
  144. package/dist/node.js +5 -0
  145. package/dist/node.js.map +1 -0
  146. package/dist/simplify/index.d.ts +2 -2
  147. package/dist/simplify/index.js +7 -7
  148. package/dist/simplify/index.js.map +1 -1
  149. package/dist/source/detail.d.ts +7 -2
  150. package/dist/source/detail.js +26 -22
  151. package/dist/source/detail.js.map +1 -1
  152. package/dist/source/sampler.js +5 -2
  153. package/dist/source/sampler.js.map +1 -1
  154. package/dist/three.d.ts +8 -7
  155. package/dist/three.js +5 -4
  156. package/dist/three.js.map +1 -1
  157. package/dist/wind/bounds.js +1 -1
  158. package/dist/wind/bounds.js.map +1 -1
  159. package/dist/wind/hooks.d.ts +1 -1
  160. package/dist/wind/hooks.js +1 -1
  161. package/dist/wind/index.d.ts +3 -3
  162. package/dist/wind/index.js +11 -9
  163. package/dist/wind/index.js.map +1 -1
  164. package/package.json +10 -6
  165. package/skills/lod/SKILL.md +65 -54
  166. package/dist/gpu.d.ts +0 -39
  167. package/dist/gpu.js +0 -41
  168. package/dist/gpu.js.map +0 -1
  169. package/dist/instanced/chunk.d.ts +0 -97
  170. package/dist/instanced/chunk.js +0 -156
  171. package/dist/instanced/chunk.js.map +0 -1
  172. package/dist/instanced/chunks.d.ts +0 -60
  173. package/dist/instanced/chunks.js +0 -208
  174. package/dist/instanced/chunks.js.map +0 -1
  175. package/dist/instanced/index.d.ts +0 -120
  176. package/dist/instanced/index.js +0 -290
  177. package/dist/instanced/index.js.map +0 -1
  178. package/dist/instanced/pages/buffers.d.ts +0 -37
  179. package/dist/instanced/pages/buffers.js +0 -15
  180. package/dist/instanced/pages/buffers.js.map +0 -1
  181. package/dist/instanced/pages/chunk.d.ts +0 -51
  182. package/dist/instanced/pages/chunk.js +0 -81
  183. package/dist/instanced/pages/chunk.js.map +0 -1
  184. package/dist/instanced/pages/index.d.ts +0 -74
  185. package/dist/instanced/pages/index.js +0 -269
  186. package/dist/instanced/pages/index.js.map +0 -1
  187. package/dist/instanced/pages/passes.d.ts +0 -21
  188. package/dist/instanced/pages/passes.js +0 -52
  189. package/dist/instanced/pages/passes.js.map +0 -1
  190. package/dist/instanced/pages/slots.d.ts +0 -11
  191. package/dist/instanced/pages/slots.js +0 -90
  192. package/dist/instanced/pages/slots.js.map +0 -1
  193. package/dist/instanced/pages/workgroup.d.ts +0 -14
  194. package/dist/instanced/pages/workgroup.js +0 -38
  195. package/dist/instanced/pages/workgroup.js.map +0 -1
  196. package/dist/levels/wait.d.ts +0 -27
  197. package/dist/levels/wait.js +0 -61
  198. package/dist/levels/wait.js.map +0 -1
  199. package/dist/loader/cache.d.ts +0 -12
  200. package/dist/loader/cache.js +0 -68
  201. package/dist/loader/cache.js.map +0 -1
  202. package/dist/loader/dependencies.d.ts +0 -32
  203. package/dist/loader/dependencies.js +0 -113
  204. package/dist/loader/dependencies.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"shape.js","sourceRoot":"","sources":["../../src/instanced/shape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shape.js","sourceRoot":"","sources":["../../src/instanced/shape.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { StorageInstancedBufferAttribute, type Camera, type Frustum, type Renderer, type Sphere, type Vector3 } from "three/webgpu";
2
2
  import type { d } from "typegpu";
3
- import type { DrawLevels } from "../levels/draw.js";
3
+ import { type DrawLevels } from "../levels/draw.js";
4
4
  import type { InstanceSlots } from "../levels/fade.js";
5
+ import type { LodLiveCount } from "./clusters.js";
5
6
  import type { Cull } from "./cull.js";
6
- import { type InstancePagePool } from "./pages/index.js";
7
7
  import { type IndirectDraw } from "./rows.js";
8
- /** What one InstancedLod sorts by for a camera, everything in its space. */
8
+ /** What a Lod sorts by for a camera, everything in its space. */
9
9
  export interface RowValues {
10
10
  levels: d.Infer<typeof DrawLevels>;
11
11
  /** The level loading state levelsToDraw reads (see LodLevelLoadManager). */
@@ -22,42 +22,44 @@ export interface RowValues {
22
22
  reach: number;
23
23
  frustum: Frustum;
24
24
  }
25
- /** The rows of every InstancedLod of a LodGpu, every camera's buffers, and the passes sorting into them. */
25
+ /** One Lod's sorts: every camera's buffers, and the passes sorting into them. */
26
26
  export declare class Sorter {
27
- private readonly renderer;
28
- private readonly pool;
29
- private readonly layout;
27
+ private readonly listed;
30
28
  private readonly cameras;
31
- /** Survivors' scaled matrices, made once a row scales them; their CPU array is dropped once a pass wrote them. */
29
+ private readonly draws;
30
+ private drawBuffer;
31
+ private readonly counts;
32
+ /** Survivors' scaled matrices, made once survivors scale; their CPU array is dropped once a pass wrote them. */
32
33
  private scaled;
33
34
  /** Where survivors' scaled matrices go while none scale: never written, as no survivor scales. */
34
35
  private readonly unscaled;
36
+ /** What the sort reads as live counts while no range has one: never read. */
37
+ private readonly noLiveCounts;
35
38
  private passes;
36
- private isDisposed;
37
- constructor(renderer: Renderer, pool: InstancePagePool);
38
- /** A row for an InstancedLod whose levels of `listed`, a mask, list up to `listSize` instances each. */
39
- register(listed: number, listSize: number): number;
40
- /** Free `row`: its InstancedLod is disposed. */
41
- unregister(row: number): void;
42
- /** `row` draws `draws` too, after those it has; where they start among its draws. */
43
- appendDraws(row: number, draws: readonly IndirectDraw[]): number;
44
- /** Survivors' scaled matrices, every pool index's: one buffer, as pool indices are unique to their InstancedLod. */
45
- get scaledMatrices(): StorageInstancedBufferAttribute;
46
- /** An InstancedLod draws for `camera`: its buffers are made with the first. */
47
- hold(camera: Camera): void;
48
- /** An InstancedLod stops drawing for `camera`, its row `row` dropped from it; the last frees its buffers. */
49
- release(camera: Camera, row: number): void;
50
- /** Where `row`'s lists and draws lie for `camera`. */
51
- slotsOf(camera: Camera, row: number): InstanceSlots;
52
- /** Write `values` as what `row` sorts by for `camera`, sorted at the camera's next draw. */
53
- write(camera: Camera, row: number, values: RowValues): void;
54
- /** Sort every row due for `camera`, in one compute call: before a level mesh draws for it. */
55
- run(camera: Camera): void;
56
- /** Whether it was disposed: then it takes no InstancedLod and no camera. */
57
- get disposed(): boolean;
39
+ /** `listed` tells, as a mask, which levels have an instance list: those that draw something. */
40
+ constructor(listed: number);
41
+ /** The meshes draw `draws` too, after those they have; where they start among the draws. */
42
+ appendDraws(draws: readonly IndirectDraw[]): number;
43
+ /** Survivors' scaled matrices for `capacity` instances. */
44
+ scaledMatrices(capacity: number): StorageInstancedBufferAttribute;
45
+ /** Where `camera`'s lists and indirect draws lie; null before a sort was written for it. */
46
+ slotsOf(camera: Camera): InstanceSlots | null;
47
+ /**
48
+ * Write `values` as what `camera` sorts by, over the instances of `ranges` (start, count and item of `liveCounts`,
49
+ * flat), `instances` in all, sorted at the camera's next draw. Its lists grow to hold them, within `limit` bytes per
50
+ * buffer.
51
+ */
52
+ write(camera: Camera, values: RowValues, ranges: readonly number[], liveCounts: LodLiveCount["attribute"] | null, instances: number, limit: number): void;
53
+ /** Sort for `camera` on `renderer`, in one compute call, if due: before a level mesh draws for it. */
54
+ run(renderer: Renderer, camera: Camera, matrices: StorageInstancedBufferAttribute): void;
55
+ /** `camera` no longer draws the Lod: its buffers are freed. */
56
+ release(camera: Camera): void;
58
57
  dispose(): void;
59
- private check;
60
- private layOut;
61
- private buffersOf;
62
- private sortBuffers;
58
+ private makeBuffers;
59
+ /** Grow `buffers`' lists to hold `instances` per level, by doubling, each buffer within `limit` bytes. */
60
+ private grow;
61
+ /** Write the blocks of `ranges` into `buffers`, growing its words: one empty block for none, as a dispatch visits one at least. */
62
+ private writeBlocks;
63
+ /** Write the layout of `buffers`' lists and the draw count into its row. */
64
+ private place;
63
65
  }
@@ -1,162 +1,198 @@
1
- import { StorageInstancedBufferAttribute } from "three/webgpu";
2
- import { releaseArrays } from "./pages/index.js";
3
- import { FLOATS_AT, FLOAT_ROW, INTS_AT, INT_ROW, RowLayout, disposeBuffers, floatsOf, forcedWord, markWords, setSorting, wordsOf, } from "./rows.js";
4
- import { sortPasses } from "./update.js";
5
- /** The rows of every InstancedLod of a LodGpu, every camera's buffers, and the passes sorting into them. */
1
+ import { StorageBufferAttribute, StorageInstancedBufferAttribute } from "three/webgpu";
2
+ import { MAX_LEVELS } from "../levels/draw.js";
3
+ import { BLOCKS_AT, FLOATS_AT, INTS_AT, NO_LIVE_COUNT, UNLISTED, argsBuffer, countsBuffer, drawWords, floatsBuffer, forcedWord, wordsBuffer } from "./rows.js";
4
+ import { BLOCK, MAX_BLOCKS, sortPasses } from "./update.js";
5
+ /** One Lod's sorts: every camera's buffers, and the passes sorting into them. */
6
6
  export class Sorter {
7
- renderer;
8
- pool;
9
- layout = new RowLayout();
7
+ listed;
10
8
  cameras = new Map();
11
- /** Survivors' scaled matrices, made once a row scales them; their CPU array is dropped once a pass wrote them. */
9
+ draws = [];
10
+ drawBuffer = drawWords([]);
11
+ counts = countsBuffer();
12
+ /** Survivors' scaled matrices, made once survivors scale; their CPU array is dropped once a pass wrote them. */
12
13
  scaled = null;
13
14
  /** Where survivors' scaled matrices go while none scale: never written, as no survivor scales. */
14
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);
15
18
  passes = null;
16
- isDisposed = false;
17
- constructor(renderer, pool) {
18
- this.renderer = renderer;
19
- this.pool = pool;
20
- }
21
- /** A row for an InstancedLod whose levels of `listed`, a mask, list up to `listSize` instances each. */
22
- register(listed, listSize) {
23
- this.check();
24
- return this.layout.register(listed, listSize);
25
- }
26
- /** Free `row`: its InstancedLod is disposed. */
27
- unregister(row) {
28
- for (const buffers of this.cameras.values())
29
- idle(buffers, row);
30
- this.layout.unregister(row);
31
- }
32
- /** `row` draws `draws` too, after those it has; where they start among its draws. */
33
- appendDraws(row, draws) {
34
- return this.layout.appendDraws(row, draws);
35
- }
36
- /** Survivors' scaled matrices, every pool index's: one buffer, as pool indices are unique to their InstancedLod. */
37
- get scaledMatrices() {
38
- return (this.scaled ??= new StorageInstancedBufferAttribute(new Float32Array(this.pool.capacity * 16), 16));
39
- }
40
- /** An InstancedLod draws for `camera`: its buffers are made with the first. */
41
- hold(camera) {
42
- this.check();
43
- this.layOut();
44
- const buffers = this.cameras.get(camera) ?? this.layout.makeBuffers();
45
- buffers.users++;
46
- this.cameras.set(camera, buffers);
47
- }
48
- /** An InstancedLod stops drawing for `camera`, its row `row` dropped from it; the last frees its buffers. */
49
- release(camera, row) {
19
+ /** `listed` tells, as a mask, which levels have an instance list: those that draw something. */
20
+ constructor(listed) {
21
+ this.listed = listed;
22
+ }
23
+ /** The meshes draw `draws` too, after those they have; where they start among the draws. */
24
+ appendDraws(draws) {
25
+ const first = this.draws.length;
26
+ this.draws.push(...draws);
27
+ this.drawBuffer.dispose();
28
+ this.drawBuffer = drawWords(this.draws);
29
+ for (const buffers of this.cameras.values()) {
30
+ buffers.args.dispose();
31
+ buffers.args = argsBuffer(this.draws.length);
32
+ this.place(buffers);
33
+ buffers.due = true;
34
+ }
35
+ return first;
36
+ }
37
+ /** Survivors' scaled matrices for `capacity` instances. */
38
+ scaledMatrices(capacity) {
39
+ if (this.scaled?.capacity !== capacity) {
40
+ this.scaled?.attribute.dispose();
41
+ this.scaled = { attribute: new StorageInstancedBufferAttribute(new Float32Array(capacity * 16), 16), capacity };
42
+ }
43
+ return this.scaled.attribute;
44
+ }
45
+ /** Where `camera`'s lists and indirect draws lie; null before a sort was written for it. */
46
+ slotsOf(camera) {
50
47
  const buffers = this.cameras.get(camera);
51
- if (!buffers)
52
- return;
53
- idle(buffers, row);
54
- if (--buffers.users > 0)
55
- return;
56
- this.cameras.delete(camera);
57
- disposeBuffers(buffers);
58
- }
59
- /** Where `row`'s lists and draws lie for `camera`. */
60
- slotsOf(camera, row) {
61
- this.layOut();
62
- const { indices, fades, args } = this.buffersOf(camera);
63
- return { indices, fades, args: { attribute: args, offset: this.layout.argsOffset(row) } };
64
- }
65
- /** Write `values` as what `row` sorts by for `camera`, sorted at the camera's next draw. */
66
- write(camera, row, values) {
67
- this.layOut();
68
- const buffers = this.buffersOf(camera);
48
+ return buffers ? { indices: buffers.indices, fades: buffers.fades, args: { attribute: buffers.args, offset: 0 } } : null;
49
+ }
50
+ /**
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.
54
+ */
55
+ write(camera, values, ranges, liveCounts, instances, limit) {
56
+ const buffers = this.cameras.get(camera) ?? this.makeBuffers();
57
+ this.cameras.set(camera, buffers);
58
+ if (instances > buffers.listSize)
59
+ this.grow(buffers, instances, limit);
60
+ this.writeBlocks(buffers, ranges);
61
+ buffers.liveCounts = liveCounts;
69
62
  const { levels, loaded, before, progress, eye, scale, ortho, cull, source, reach, frustum } = values;
70
- const words = wordsOf(buffers);
71
- const base = row * INT_ROW * 4;
72
- words.set([levels.count, levels.coarsest, forcedWord(levels.forced)], base + INTS_AT.levels * 4);
73
- words.set([levels.empty, levels.fades, loaded, before], base + INTS_AT.masks * 4);
74
- words.set([Number(ortho), Number(cull !== null), Number(cull?.survivors ?? false)], base + INTS_AT.flags * 4);
75
- this.layout.place(buffers, row);
76
- setSorting(buffers, row, 1);
77
- markWords(buffers, base, INT_ROW * 4);
78
- const floats = floatsOf(buffers);
79
- const at = row * FLOAT_ROW * 4;
80
- floats.set(levels.maxPixels, at + FLOATS_AT.low * 4);
81
- floats.set([eye.x, eye.y, eye.z, scale], at + FLOATS_AT.eye * 4);
82
- floats.set([source.center.x, source.center.y, source.center.z, source.radius], at + FLOATS_AT.source * 4);
83
- floats.set([progress, reach, cull?.near ?? 0, cull?.far ?? 1], at + FLOATS_AT.values * 4);
63
+ const words = buffers.words.array;
64
+ words.set([levels.count, levels.coarsest, forcedWord(levels.forced)], INTS_AT.levels * 4);
65
+ words.set([levels.empty, levels.fades, loaded, before], INTS_AT.masks * 4);
66
+ words.set([Number(ortho), Number(cull !== null), Number(cull?.survivors ?? false)], INTS_AT.flags * 4);
67
+ this.place(buffers);
68
+ const floats = buffers.floats.array;
69
+ floats.set(levels.maxPixels, FLOATS_AT.low * 4);
70
+ floats.set([eye.x, eye.y, eye.z, scale], FLOATS_AT.eye * 4);
71
+ floats.set([source.center.x, source.center.y, source.center.z, source.radius], FLOATS_AT.source * 4);
72
+ floats.set([progress, reach, cull?.near ?? 0, cull?.far ?? 1], FLOATS_AT.values * 4);
84
73
  if (cull)
85
- floats.set([cull.eye.x, cull.eye.y, cull.eye.z, 0], at + FLOATS_AT.cullEye * 4);
86
- frustum.planes.forEach(({ normal, constant }, i) => floats.set([normal.x, normal.y, normal.z, constant], at + (FLOATS_AT.planes + i) * 4));
87
- buffers.floats.addUpdateRange(at, FLOAT_ROW * 4);
74
+ floats.set([cull.eye.x, cull.eye.y, cull.eye.z, 0], FLOATS_AT.cullEye * 4);
75
+ frustum.planes.forEach(({ normal, constant }, i) => floats.set([normal.x, normal.y, normal.z, constant], (FLOATS_AT.planes + i) * 4));
88
76
  buffers.floats.needsUpdate = true;
89
- buffers.held.add(row);
90
- buffers.due.add(row);
77
+ buffers.due = true;
91
78
  }
92
- /** Sort every row due for `camera`, in one compute call: before a level mesh draws for it. */
93
- run(camera) {
94
- this.layOut();
79
+ /** Sort for `camera` on `renderer`, in one compute call, if due: before a level mesh draws for it. */
80
+ run(renderer, camera, matrices) {
95
81
  const buffers = this.cameras.get(camera);
96
- if (!buffers || buffers.due.size === 0)
82
+ if (!buffers?.due)
97
83
  return;
98
- const sort = this.sortBuffers(buffers);
99
- const { scaled } = this;
100
- const passes = (this.passes ??= sortPasses(sort, this.pool.pages));
101
- passes.point(sort, this.layout.length);
102
- this.renderer.compute([passes.update, passes.indirect]);
103
- buffers.whole = false;
104
- // Sorted: the rows wait as they are until written again, their sorting bits cleared with the next upload.
105
- for (const row of buffers.due)
106
- setSorting(buffers, row, 0);
107
- buffers.due.clear();
84
+ const sort = {
85
+ ...buffers,
86
+ matrices,
87
+ liveCounts: buffers.liveCounts ?? this.noLiveCounts,
88
+ scaled: this.scaled?.attribute ?? this.unscaled,
89
+ counts: this.counts,
90
+ draws: this.drawBuffer,
91
+ };
92
+ const passes = (this.passes ??= sortPasses(sort));
93
+ passes.point(sort, buffers.blockCount);
94
+ renderer.compute([passes.update, passes.indirect]);
95
+ buffers.due = false;
108
96
  // The pass made the scaled matrices' buffer: only the GPU writes them.
109
- if (scaled && scaled.array.length > 0)
110
- releaseArrays([scaled]);
97
+ if (this.scaled && this.scaled.attribute.array.length > 0)
98
+ this.scaled.attribute.array = new Float32Array(0);
111
99
  }
112
- /** Whether it was disposed: then it takes no InstancedLod and no camera. */
113
- get disposed() {
114
- return this.isDisposed;
100
+ /** `camera` no longer draws the Lod: its buffers are freed. */
101
+ release(camera) {
102
+ const buffers = this.cameras.get(camera);
103
+ if (!buffers)
104
+ return;
105
+ this.cameras.delete(camera);
106
+ disposeBuffers(buffers);
115
107
  }
116
108
  dispose() {
117
- this.isDisposed = true;
118
109
  for (const buffers of this.cameras.values())
119
110
  disposeBuffers(buffers);
120
111
  this.cameras.clear();
121
- this.layout.dispose();
122
- this.scaled?.dispose();
112
+ this.drawBuffer.dispose();
113
+ this.counts.dispose();
114
+ this.scaled?.attribute.dispose();
123
115
  this.unscaled.dispose();
116
+ this.noLiveCounts.dispose();
124
117
  this.passes?.dispose();
125
118
  this.passes = null;
126
119
  }
127
- check() {
128
- if (this.isDisposed)
129
- throw new Error("LodGpu: disposed");
130
- }
131
- layOut() {
132
- this.layout.layOut(this.cameras.values());
133
- }
134
- buffersOf(camera) {
135
- const buffers = this.cameras.get(camera);
136
- if (!buffers)
137
- throw new Error("LodGpu: no buffers for the camera");
138
- return buffers;
139
- }
140
- sortBuffers({ words, floats, indices, fades, args }) {
120
+ makeBuffers() {
141
121
  return {
142
- words,
143
- floats,
144
- indices,
145
- fades,
146
- args,
147
- matrices: this.pool.matrices,
148
- scaled: this.scaled ?? this.unscaled,
149
- counts: this.layout.counts,
150
- occupied: this.pool.occupied,
151
- draws: this.layout.draws,
122
+ words: wordsBuffer(1),
123
+ floats: floatsBuffer(),
124
+ blockCount: 1,
125
+ liveCounts: null,
126
+ indices: new StorageBufferAttribute(new Uint32Array(1), 1),
127
+ fades: new StorageBufferAttribute(new Float32Array(1), 1),
128
+ listSize: 0,
129
+ args: argsBuffer(this.draws.length),
130
+ due: false,
152
131
  };
153
132
  }
133
+ /** Grow `buffers`' lists to hold `instances` per level, by doubling, each buffer within `limit` bytes. */
134
+ grow(buffers, instances, limit) {
135
+ let size = Math.max(buffers.listSize, 1);
136
+ while (size < instances)
137
+ size *= 2;
138
+ const slots = countBits(this.listed) * size;
139
+ if (slots * 4 > limit)
140
+ throw new RangeError(`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`);
141
+ buffers.indices.dispose();
142
+ buffers.fades.dispose();
143
+ buffers.indices = new StorageBufferAttribute(new Uint32Array(slots), 1);
144
+ buffers.fades = new StorageBufferAttribute(new Float32Array(slots), 1);
145
+ buffers.listSize = size;
146
+ }
147
+ /** Write the blocks of `ranges` into `buffers`, growing its words: one empty block for none, as a dispatch visits one at least. */
148
+ writeBlocks(buffers, ranges) {
149
+ let count = 0;
150
+ for (let i = 0; i < ranges.length; i += 3)
151
+ count += Math.ceil((ranges[i + 1] ?? 0) / BLOCK);
152
+ if (count > MAX_BLOCKS)
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`);
154
+ if (buffers.words.array.length < BLOCKS_AT + Math.max(count, 1) * 4) {
155
+ buffers.words.dispose();
156
+ buffers.words = wordsBuffer(count);
157
+ }
158
+ const words = buffers.words.array;
159
+ let at = BLOCKS_AT;
160
+ for (let i = 0; i < ranges.length; i += 3) {
161
+ const start = ranges[i] ?? 0;
162
+ const end = start + (ranges[i + 1] ?? 0);
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);
166
+ }
167
+ if (count === 0)
168
+ words.set([0, 0, 0, NO_LIVE_COUNT], at);
169
+ buffers.blockCount = Math.max(count, 1);
170
+ buffers.words.needsUpdate = true;
171
+ }
172
+ /** Write the layout of `buffers`' lists and the draw count into its row. */
173
+ place(buffers) {
174
+ const words = buffers.words.array;
175
+ words[INTS_AT.flags * 4 + 3] = this.draws.length;
176
+ words[INTS_AT.layout * 4] = buffers.listSize;
177
+ let next = 0;
178
+ for (let level = 0; level < MAX_LEVELS; level++) {
179
+ const on = (this.listed & (1 << level)) !== 0;
180
+ words[INTS_AT.starts * 4 + level] = on ? next : UNLISTED;
181
+ if (on)
182
+ next += buffers.listSize;
183
+ }
184
+ buffers.words.needsUpdate = true;
185
+ }
186
+ }
187
+ function disposeBuffers({ words, floats, indices, fades, args }) {
188
+ for (const attribute of [words, floats, indices, fades, args])
189
+ attribute.dispose();
154
190
  }
155
- /** `buffers` no longer sort `row`: its InstancedLod lets go of the camera, or is disposed. */
156
- function idle(buffers, row) {
157
- if (!buffers.held.delete(row))
158
- return;
159
- buffers.due.delete(row);
160
- setSorting(buffers, row, 0);
191
+ /** Set bits of `mask`. */
192
+ function countBits(mask) {
193
+ let count = 0;
194
+ for (let bits = mask; bits !== 0; bits &= bits - 1)
195
+ count++;
196
+ return count;
161
197
  }
162
198
  //# sourceMappingURL=sort.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/instanced/sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAuE,MAAM,cAAc,CAAC;AAKpI,OAAO,EAAE,aAAa,EAAyB,MAAM,kBAAkB,CAAC;AACxE,OAAO,EACL,SAAS,EACT,SAAS,EACT,OAAO,EACP,OAAO,EACP,SAAS,EACT,cAAc,EACd,QAAQ,EACR,UAAU,EACV,SAAS,EACT,UAAU,EACV,OAAO,GAGR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAqC,MAAM,aAAa,CAAC;AA6B5E,4GAA4G;AAC5G,MAAM,OAAO,MAAM;IAWE;IACA;IAXF,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IACzB,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5D,kHAAkH;IAC1G,MAAM,GAA2C,IAAI,CAAC;IAC9D,kGAAkG;IACjF,QAAQ,GAAG,IAAI,+BAA+B,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAClF,MAAM,GAAsB,IAAI,CAAC;IACjC,UAAU,GAAG,KAAK,CAAC;IAE3B,YACmB,QAAkB,EAClB,IAAsB;QADtB,aAAQ,GAAR,QAAQ,CAAU;QAClB,SAAI,GAAJ,IAAI,CAAkB;IACtC,CAAC;IAEJ,wGAAwG;IACxG,QAAQ,CAAC,MAAc,EAAE,QAAgB;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,gDAAgD;IAChD,UAAU,CAAC,GAAW;QACpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,qFAAqF;IACrF,WAAW,CAAC,GAAW,EAAE,KAA8B;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,oHAAoH;IACpH,IAAI,cAAc;QAChB,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,+BAA+B,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,+EAA+E;IAC/E,IAAI,CAAC,MAAc;QACjB,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACtE,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IAED,6GAA6G;IAC7G,OAAO,CAAC,MAAc,EAAE,GAAW;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACnB,IAAI,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC;YAAE,OAAO;QAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,sDAAsD;IACtD,OAAO,CAAC,MAAc,EAAE,GAAW;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC5F,CAAC;IAED,4FAA4F;IAC5F,KAAK,CAAC,MAAc,EAAE,GAAW,EAAE,MAAiB;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QACrG,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC;QAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAClF,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC9G,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAChC,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5B,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,GAAG,GAAG,SAAS,GAAG,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1G,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,IAAI,IAAI;YAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QAC1F,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3I,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;QACjD,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,8FAA8F;IAC9F,GAAG,CAAC,MAAc;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACxB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;QACtB,0GAA0G;QAC1G,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG;YAAE,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACpB,uEAAuE;QACvE,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,4EAA4E;IAC5E,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAEO,KAAK;QACX,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC;IAEO,MAAM;QACZ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEO,SAAS,CAAC,MAAc;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,WAAW,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAiB;QACxE,OAAO;YACL,KAAK;YACL,MAAM;YACN,OAAO;YACP,KAAK;YACL,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ;YACpC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAC5B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SACzB,CAAC;IACJ,CAAC;CACF;AAED,8FAA8F;AAC9F,SAAS,IAAI,CAAC,OAAsB,EAAE,GAAW;IAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;QAAE,OAAO;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,UAAU,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/instanced/sort.ts"],"names":[],"mappings":"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"}
@@ -1,30 +1,35 @@
1
1
  import type { IndirectStorageBufferAttribute, StorageBufferAttribute, StorageInstancedBufferAttribute } from "three/webgpu";
2
- /** The buffers the sort passes read and write: pointed at a camera's (rows, lists, args) as it sorts. */
2
+ import type { LodLiveCount } from "./clusters.js";
3
+ /** Instances per block of a range, one workgroup's lanes. */
4
+ export declare const BLOCK = 64;
5
+ /** WebGPU's guaranteed maxComputeWorkgroupsPerDimension: the most blocks one sort visits. */
6
+ export declare const MAX_BLOCKS = 65535;
7
+ /** The buffers the sort passes read and write: pointed at a camera's (row, blocks, lists, args) as it sorts. */
3
8
  export interface SortBuffers {
4
- /** Every row, for the camera: its u32s and its f32s (see rows.ts). */
9
+ /** The camera's row, its u32s followed by its blocks, and its f32s (see rows.ts). */
5
10
  words: StorageBufferAttribute;
6
11
  floats: StorageBufferAttribute;
7
- /** The pool's matrices, and survivors' scaled ones, which the level meshes draw while survivors scale. */
12
+ /** The live counts of the ranges the camera sorts (see `LodCluster.liveCount`). */
13
+ liveCounts: LodLiveCount["attribute"];
14
+ /** The instances' matrices, and survivors' scaled ones, which the level meshes draw while survivors scale. */
8
15
  matrices: StorageInstancedBufferAttribute;
9
16
  scaled: StorageInstancedBufferAttribute;
10
- /** The camera's slots: per slot, the pool index it draws and its signed fade. */
17
+ /** The camera's slots: per slot, the instance it draws and its signed fade. */
11
18
  indices: StorageBufferAttribute;
12
19
  fades: StorageBufferAttribute;
13
- /** Per row and level, how many instances it holds for the camera: counted by updateInstance, cleared by the indirect pass. */
20
+ /** Per level, how many instances it holds for the camera: counted by updateInstance, cleared by the indirect pass. */
14
21
  counts: StorageBufferAttribute;
15
- /** How many pages chunks hold, then each with its row (see pages/buffers.ts). */
16
- occupied: StorageBufferAttribute;
17
- /** Every row's draws, from its first (see `drawWords` in rows.ts). */
22
+ /** The Lod's draws (see `drawWords` in rows.ts). */
18
23
  draws: StorageBufferAttribute;
19
24
  /** The camera's indirect draws, five words each, in the order of `draws`. */
20
25
  args: IndirectStorageBufferAttribute;
21
26
  }
22
- /** The sort passes over `buffers`, their nodes pointed at other buffers by `point`, for a pool of `pages` pages. */
23
- export declare function sortPasses(buffers: SortBuffers, pages: number): {
27
+ /** The sort passes over `buffers`, their nodes pointed at other buffers by `point`. */
28
+ export declare function sortPasses(buffers: SortBuffers): {
24
29
  update: import("three/webgpu").ComputeNode;
25
30
  indirect: import("three/webgpu").ComputeNode;
26
- /** Point the passes at `buffers`, and dispatch the indirect pass over `rows` rows: before they run. */
27
- point(next: SortBuffers, rows: number): void;
31
+ /** Point the passes at `next`, dispatching the update pass over its `blocks` blocks: before they run. */
32
+ point(next: SortBuffers, blocks: number): void;
28
33
  dispose(): void;
29
34
  };
30
35
  export type SortPasses = ReturnType<typeof sortPasses>;