@drawcall/lod 0.1.2 → 0.2.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 (144) hide show
  1. package/README.md +10 -69
  2. package/dist/at.d.ts +2 -0
  3. package/dist/at.js +8 -0
  4. package/dist/at.js.map +1 -0
  5. package/dist/baked/codec.d.ts +6 -3
  6. package/dist/baked/codec.js +22 -16
  7. package/dist/baked/codec.js.map +1 -1
  8. package/dist/baked/index.d.ts +4 -0
  9. package/dist/baked/index.js +2 -2
  10. package/dist/baked/index.js.map +1 -1
  11. package/dist/baked/low.d.ts +2 -2
  12. package/dist/baked/low.js +4 -4
  13. package/dist/baked/low.js.map +1 -1
  14. package/dist/bounds.d.ts +12 -2
  15. package/dist/bounds.js +72 -10
  16. package/dist/bounds.js.map +1 -1
  17. package/dist/compile.d.ts +4 -0
  18. package/dist/compile.js +100 -0
  19. package/dist/compile.js.map +1 -0
  20. package/dist/deferred.d.ts +12 -0
  21. package/dist/deferred.js +27 -0
  22. package/dist/deferred.js.map +1 -0
  23. package/dist/dispose.d.ts +7 -3
  24. package/dist/dispose.js +33 -4
  25. package/dist/dispose.js.map +1 -1
  26. package/dist/fade.d.ts +5 -13
  27. package/dist/fade.js +62 -28
  28. package/dist/fade.js.map +1 -1
  29. package/dist/impostor/bake/index.d.ts +1 -0
  30. package/dist/impostor/bake/index.js +1 -0
  31. package/dist/impostor/bake/index.js.map +1 -1
  32. package/dist/impostor/bake/materials.js +11 -1
  33. package/dist/impostor/bake/materials.js.map +1 -1
  34. package/dist/impostor/codec.d.ts +2 -7
  35. package/dist/impostor/codec.js +16 -27
  36. package/dist/impostor/codec.js.map +1 -1
  37. package/dist/impostor/mesh/card.js +4 -1
  38. package/dist/impostor/mesh/card.js.map +1 -1
  39. package/dist/impostor/mesh/index.d.ts +6 -4
  40. package/dist/impostor/mesh/index.js +8 -10
  41. package/dist/impostor/mesh/index.js.map +1 -1
  42. package/dist/impostor/mesh/material.d.ts +7 -5
  43. package/dist/impostor/mesh/material.js +29 -26
  44. package/dist/impostor/mesh/material.js.map +1 -1
  45. package/dist/impostor/mesh/surface.d.ts +20 -16
  46. package/dist/impostor/mesh/surface.js +74 -55
  47. package/dist/impostor/mesh/surface.js.map +1 -1
  48. package/dist/impostor/octahedral.d.ts +1 -8
  49. package/dist/impostor/octahedral.js +3 -18
  50. package/dist/impostor/octahedral.js.map +1 -1
  51. package/dist/index.d.ts +7 -6
  52. package/dist/index.js +5 -4
  53. package/dist/index.js.map +1 -1
  54. package/dist/instanced/args.js +2 -2
  55. package/dist/instanced/args.js.map +1 -1
  56. package/dist/instanced/{bounds.d.ts → blocks.d.ts} +25 -9
  57. package/dist/instanced/{bounds.js → blocks.js} +76 -53
  58. package/dist/instanced/blocks.js.map +1 -0
  59. package/dist/instanced/dirty.d.ts +3 -0
  60. package/dist/instanced/dirty.js +40 -5
  61. package/dist/instanced/dirty.js.map +1 -1
  62. package/dist/instanced/index.d.ts +25 -51
  63. package/dist/instanced/index.js +189 -413
  64. package/dist/instanced/index.js.map +1 -1
  65. package/dist/instanced/meshes.d.ts +54 -13
  66. package/dist/instanced/meshes.js +178 -41
  67. package/dist/instanced/meshes.js.map +1 -1
  68. package/dist/instanced/parts.d.ts +14 -0
  69. package/dist/instanced/parts.js +79 -0
  70. package/dist/instanced/parts.js.map +1 -0
  71. package/dist/instanced/raycast.d.ts +13 -0
  72. package/dist/instanced/raycast.js +53 -0
  73. package/dist/instanced/raycast.js.map +1 -0
  74. package/dist/instanced/select.d.ts +17 -9
  75. package/dist/instanced/select.js +114 -63
  76. package/dist/instanced/select.js.map +1 -1
  77. package/dist/instanced/store.d.ts +31 -0
  78. package/dist/instanced/store.js +96 -0
  79. package/dist/instanced/store.js.map +1 -0
  80. package/dist/levels.d.ts +71 -48
  81. package/dist/levels.js +99 -74
  82. package/dist/levels.js.map +1 -1
  83. package/dist/loader/bundle.d.ts +25 -0
  84. package/dist/loader/bundle.js +241 -0
  85. package/dist/loader/bundle.js.map +1 -0
  86. package/dist/loader/cache.d.ts +15 -15
  87. package/dist/loader/cache.js +71 -33
  88. package/dist/loader/cache.js.map +1 -1
  89. package/dist/loader/provenance.d.ts +30 -0
  90. package/dist/loader/provenance.js +105 -0
  91. package/dist/loader/provenance.js.map +1 -0
  92. package/dist/loader/url.d.ts +13 -0
  93. package/dist/loader/url.js +31 -0
  94. package/dist/loader/url.js.map +1 -0
  95. package/dist/loader.d.ts +30 -74
  96. package/dist/loader.js +191 -186
  97. package/dist/loader.js.map +1 -1
  98. package/dist/lod.d.ts +20 -31
  99. package/dist/lod.js +105 -96
  100. package/dist/lod.js.map +1 -1
  101. package/dist/material.js +9 -4
  102. package/dist/material.js.map +1 -1
  103. package/dist/mesh/codec.d.ts +4 -0
  104. package/dist/mesh/codec.js +192 -0
  105. package/dist/mesh/codec.js.map +1 -0
  106. package/dist/queue.d.ts +2 -0
  107. package/dist/queue.js +33 -0
  108. package/dist/queue.js.map +1 -0
  109. package/dist/residency.d.ts +44 -0
  110. package/dist/residency.js +205 -0
  111. package/dist/residency.js.map +1 -0
  112. package/dist/simplify.js +5 -3
  113. package/dist/simplify.js.map +1 -1
  114. package/dist/source/{error.d.ts → deviation.d.ts} +3 -3
  115. package/dist/source/{error.js → deviation.js} +6 -6
  116. package/dist/source/deviation.js.map +1 -0
  117. package/dist/source/source.d.ts +1 -1
  118. package/dist/source/source.js +1 -1
  119. package/dist/three.d.ts +17 -5
  120. package/dist/three.js +24 -3
  121. package/dist/three.js.map +1 -1
  122. package/dist/tsl.d.ts +5 -5
  123. package/dist/tsl.js +12 -19
  124. package/dist/tsl.js.map +1 -1
  125. package/dist/view.d.ts +16 -1
  126. package/dist/view.js +57 -1
  127. package/dist/view.js.map +1 -1
  128. package/dist/wind/index.d.ts +2 -2
  129. package/dist/wind/index.js +31 -28
  130. package/dist/wind/index.js.map +1 -1
  131. package/dist/wind/sway.d.ts +2 -1
  132. package/package.json +9 -3
  133. package/skills/lod/SKILL.md +71 -109
  134. package/dist/impostor/cache.d.ts +0 -15
  135. package/dist/impostor/cache.js +0 -44
  136. package/dist/impostor/cache.js.map +0 -1
  137. package/dist/instanced/bounds.js.map +0 -1
  138. package/dist/lazy.d.ts +0 -64
  139. package/dist/lazy.js +0 -187
  140. package/dist/lazy.js.map +0 -1
  141. package/dist/loader/dispose.d.ts +0 -3
  142. package/dist/loader/dispose.js +0 -25
  143. package/dist/loader/dispose.js.map +0 -1
  144. package/dist/source/error.js.map +0 -1
@@ -1,7 +1,6 @@
1
1
  import { type IndirectStorageBufferAttribute, StorageBufferAttribute, StorageInstancedBufferAttribute, Vector3, type ComputeNode, type Node, type Renderer, type Sphere } from "three/webgpu";
2
- export { ARGS_BYTES } from "./args.js";
3
2
  /** The slots every level draws from, `count` per level that draws, from its `first`. */
4
- export interface Slots {
3
+ interface Slots {
5
4
  readonly matrices: StorageInstancedBufferAttribute;
6
5
  readonly fades: StorageBufferAttribute;
7
6
  /** RGB and a pad per slot, once the instances have colours */
@@ -15,10 +14,7 @@ export interface IndirectDraw {
15
14
  indexed: boolean;
16
15
  }
17
16
  export declare class Selection {
18
- /** One instance's bounding sphere, in its own space. */
19
- private readonly sphere;
20
17
  private draws;
21
- private fallback;
22
18
  /** The instances' matrices, as `setMatrixAt` writes them. */
23
19
  readonly matrices: StorageBufferAttribute;
24
20
  /** The instances' colours (RGB, padded to four floats), once there are any. */
@@ -44,6 +40,14 @@ export declare class Selection {
44
40
  } & Node<"float">>;
45
41
  private readonly counts;
46
42
  private slice;
43
+ private readonly routes;
44
+ private readonly previous;
45
+ private readonly starts;
46
+ private readonly bounds;
47
+ readonly progress: import("three/webgpu").UniformNode<"float", number>;
48
+ private readonly drawCount;
49
+ private readonly records;
50
+ private readonly arguments;
47
51
  private readonly argsStart;
48
52
  private kernels;
49
53
  /**
@@ -61,10 +65,13 @@ export declare class Selection {
61
65
  /** One instance's bounding sphere, in its own space. */
62
66
  sphere: Sphere,
63
67
  /** Per level, whether it draws anything. */
64
- drawing: readonly boolean[], draws: readonly IndirectDraw[], fallback?: readonly number[]);
68
+ drawing: readonly boolean[], draws: readonly IndirectDraw[], fallback: readonly number[]);
65
69
  private allocate;
66
- /** Lazy levels reserve slots up front, so installing draws keeps every shader binding valid. */
67
- replace(draws: readonly IndirectDraw[], fallback: readonly number[]): void;
70
+ /** Slots and kernels survive arrivals; only the variable-size draw table is replaced. */
71
+ append(draws: readonly IndirectDraw[]): number;
72
+ /** Residency is data, including the previous route for the arrival's dither fade. */
73
+ route(fallback: readonly number[], fade?: boolean): void;
74
+ private writeDraws;
68
75
  /** Select for this view next; the uniforms are set and compared here. */
69
76
  aim(eye: Vector3, scale: number, ortho: boolean, fades: boolean, forced: number | null, levels: readonly {
70
77
  maxPixels: number;
@@ -80,5 +87,6 @@ export declare class Selection {
80
87
  private passes;
81
88
  /** The pass that fills the slots. */
82
89
  private selectPass;
83
- private handOverPass;
90
+ private argumentsPass;
84
91
  }
92
+ export {};
@@ -1,14 +1,12 @@
1
- import { StorageBufferAttribute, StorageInstancedBufferAttribute, Vector3, } from "three/webgpu";
2
- import { Fn, If, Return, atomicAdd, atomicLoad, atomicStore, distance, float, instanceIndex, int, max, smoothstep, storage, uint, uniform, vec4, } from "three/tsl";
1
+ import { StorageBufferAttribute, StorageInstancedBufferAttribute, Vector3, Vector4, } from "three/webgpu";
2
+ import { Fn, If, Loop, Return, atomicAdd, atomicLoad, atomicStore, distance, float, instanceIndex, int, max, smoothstep, storage, uint, uniform, vec4, } from "three/tsl";
3
+ import { at } from "../at.js";
3
4
  import { FADE } from "../levels.js";
4
5
  import { maxScale } from "../tsl.js";
5
6
  import { ARGS_BYTES, args } from "./args.js";
6
- export { ARGS_BYTES } from "./args.js";
7
7
  const CURRENT = [];
8
8
  export class Selection {
9
- sphere;
10
9
  draws;
11
- fallback;
12
10
  /** The instances' matrices, as `setMatrixAt` writes them. */
13
11
  matrices;
14
12
  /** The instances' colours (RGB, padded to four floats), once there are any. */
@@ -37,7 +35,18 @@ export class Selection {
37
35
  maxPixels;
38
36
  counts;
39
37
  slice;
40
- // Allocation location must not specialize the handover shader for every crowd.
38
+ routes;
39
+ previous;
40
+ // Crowd dimensions are data; equal ladders share shader modules regardless of capacity.
41
+ starts;
42
+ bounds = uniform(new Vector4());
43
+ progress = uniform(1);
44
+ drawCount = uniform(0, "uint");
45
+ records = storage(new StorageBufferAttribute(new Uint32Array(4), 4), "uvec4", 0)
46
+ .setName("lodDraws")
47
+ .toReadOnly();
48
+ arguments = storage(new StorageBufferAttribute(new Uint32Array(5), 1), "uint", 0).setName("lodDrawArgs");
49
+ // Allocation location must not specialize the arguments pass for every crowd.
41
50
  argsStart = uniform(0, "uint");
42
51
  kernels = null;
43
52
  /**
@@ -55,49 +64,71 @@ export class Selection {
55
64
  /** One instance's bounding sphere, in its own space. */
56
65
  sphere,
57
66
  /** Per level, whether it draws anything. */
58
- drawing, draws, fallback = drawing.map((_, i) => i)) {
59
- this.sphere = sphere;
67
+ drawing, draws, fallback) {
60
68
  this.draws = draws;
61
- this.fallback = fallback;
62
69
  const count = matrices.length / 16;
63
70
  this.count = count;
64
71
  this.matrices = new StorageBufferAttribute(matrices, 16);
65
72
  let next = 0;
66
73
  this.first = drawing.map((draws) => (draws ? next++ * count : null));
74
+ this.starts = this.first.map((first) => uniform(first ?? 0, "uint"));
75
+ this.bounds.value.set(sphere.center.x, sphere.center.y, sphere.center.z, sphere.radius);
67
76
  const slots = Math.max(next * count, 1);
68
77
  this.slots = { matrices: new StorageInstancedBufferAttribute(slots, 16), fades: new StorageBufferAttribute(slots, 1), colors: null };
69
78
  this.maxPixels = drawing.map(() => uniform(0));
70
79
  this.counts = new StorageBufferAttribute(new Uint32Array(drawing.length), 1);
71
80
  this.slice = this.allocate(draws);
72
81
  this.argsStart.value = this.argsOffset / 4;
82
+ this.routes = fallback.map((level) => uniform(level, "int"));
83
+ this.previous = fallback.map((level) => uniform(level, "int"));
84
+ this.writeDraws(draws);
73
85
  }
74
86
  allocate(draws) {
75
87
  const values = new Uint32Array((draws.length * ARGS_BYTES) / 4);
76
88
  draws.forEach((draw, k) => {
77
- const at = (k * ARGS_BYTES) / 4;
78
- const first = this.first[draw.level];
79
- if (first === null || first === undefined)
89
+ const base = (k * ARGS_BYTES) / 4;
90
+ const first = at(this.first, draw.level);
91
+ if (first === null)
80
92
  throw new Error("InstancedLod: a draw of a level that draws nothing");
81
93
  // indexed: count, instances, first index, base vertex, first instance;
82
94
  // else: count, instances, first vertex, first instance.
83
- values[at] = draw.count;
84
- values[at + 2] = draw.start;
85
- values[at + (draw.indexed ? 4 : 3)] = first;
95
+ values[base] = draw.count;
96
+ values[base + 2] = draw.start;
97
+ values[base + (draw.indexed ? 4 : 3)] = first;
86
98
  });
87
99
  return args.take(values);
88
100
  }
89
- /** Lazy levels reserve slots up front, so installing draws keeps every shader binding valid. */
90
- replace(draws, fallback) {
101
+ /** Slots and kernels survive arrivals; only the variable-size draw table is replaced. */
102
+ append(draws) {
103
+ const offset = this.draws.length * ARGS_BYTES;
91
104
  const previous = this.slice;
92
- this.slice = this.allocate(draws);
93
- this.draws = draws;
94
- this.fallback = fallback;
105
+ this.draws = [...this.draws, ...draws];
106
+ this.slice = this.allocate(this.draws);
95
107
  this.argsStart.value = this.argsOffset / 4;
108
+ this.writeDraws(this.draws);
96
109
  previous.dispose();
97
- for (const kernel of this.kernels ?? [])
98
- kernel.dispose();
99
- this.kernels = null;
100
110
  this.changed();
111
+ return offset;
112
+ }
113
+ /** Residency is data, including the previous route for the arrival's dither fade. */
114
+ route(fallback, fade = false) {
115
+ fallback.forEach((level, i) => {
116
+ const route = at(this.routes, i);
117
+ const previous = at(this.previous, i);
118
+ previous.value = fade ? route.value : level;
119
+ route.value = level;
120
+ });
121
+ this.progress.value = fade ? 0 : 1;
122
+ this.changed();
123
+ }
124
+ writeDraws(draws) {
125
+ const values = new Uint32Array(Math.max(draws.length, 1) * 4);
126
+ draws.forEach((draw, i) => values.set([draw.level, draw.count, draw.start, Number(draw.indexed)], i * 4));
127
+ const previous = this.records.value;
128
+ this.records.value = new StorageBufferAttribute(values, 4);
129
+ this.arguments.value = this.args;
130
+ this.drawCount.value = draws.length;
131
+ previous.dispose();
101
132
  }
102
133
  /** Select for this view next; the uniforms are set and compared here. */
103
134
  aim(eye, scale, ortho, fades, forced, levels, stable) {
@@ -106,7 +137,7 @@ export class Selection {
106
137
  this.ortho.value === Number(ortho) &&
107
138
  this.fades.value === Number(fades) &&
108
139
  this.forced.value === (forced ?? -1) &&
109
- levels.every((level, l) => this.maxPixels[l]?.value === Math.min(level.maxPixels, 3.4e38));
140
+ levels.every((level, l) => at(this.maxPixels, l).value === Math.min(level.maxPixels, 3.4e38));
110
141
  // The caller can prove that changed views still produce the same solid slots.
111
142
  const reuse = stable !== undefined && stable === this.stable;
112
143
  this.stable = stable;
@@ -121,9 +152,7 @@ export class Selection {
121
152
  this.forced.value = forced ?? -1;
122
153
  // any finite stand-in for level 0's Infinity
123
154
  levels.forEach((level, l) => {
124
- const uniform = this.maxPixels[l];
125
- if (uniform)
126
- uniform.value = Math.min(level.maxPixels, 3.4e38);
155
+ at(this.maxPixels, l).value = Math.min(level.maxPixels, 3.4e38);
127
156
  });
128
157
  }
129
158
  /** The instances changed since the last selection. */
@@ -172,27 +201,28 @@ export class Selection {
172
201
  kernel.dispose();
173
202
  this.kernels = null;
174
203
  this.slice.dispose();
204
+ this.records.value.dispose();
175
205
  }
176
206
  passes() {
177
- this.kernels ??= [this.selectPass(), this.handOverPass()];
207
+ this.kernels ??= [this.selectPass(), this.argumentsPass()];
178
208
  return this.kernels;
179
209
  }
180
210
  /** The pass that fills the slots. */
181
211
  selectPass() {
182
- const { count, sphere, colors, slots } = this;
183
- const matrices = storage(this.matrices, "mat4", count).setName("lodSourceMatrices");
184
- const sources = colors ? storage(colors, "vec4", count).setName("lodSourceColors") : null;
185
- const counts = storage(this.counts, "uint", this.first.length).setName("lodCounts").toAtomic();
212
+ const { count, colors, slots } = this;
213
+ const matrices = storage(this.matrices, "mat4", 0).setName("lodSourceMatrices");
214
+ const sources = colors ? storage(colors, "vec4", 0).setName("lodSourceColors") : null;
215
+ const counts = storage(this.counts, "uint", 0).setName("lodCounts").toAtomic();
186
216
  const out = {
187
- matrices: storage(slots.matrices, "mat4", slots.matrices.count).setName("lodSlotMatrices"),
188
- fades: storage(slots.fades, "float", slots.fades.count).setName("lodSlotFades"),
189
- colors: slots.colors && storage(slots.colors, "vec4", slots.colors.count).setName("lodSlotColors"),
217
+ matrices: storage(slots.matrices, "mat4", 0).setName("lodSlotMatrices"),
218
+ fades: storage(slots.fades, "float", 0).setName("lodSlotFades"),
219
+ colors: slots.colors && storage(slots.colors, "vec4", 0).setName("lodSlotColors"),
190
220
  };
191
221
  return Fn(() => {
192
222
  const m = matrices.element(instanceIndex).toVar();
193
- const r = float(sphere.radius).mul(maxScale(m)).toVar();
223
+ const r = this.bounds.w.mul(maxScale(m)).toVar();
194
224
  If(r.equal(0), () => Return());
195
- const centre = m.mul(vec4(sphere.center.x, sphere.center.y, sphere.center.z, 1)).xyz;
225
+ const centre = m.mul(vec4(this.bounds.xyz, 1)).xyz;
196
226
  const size = r.mul(2).mul(this.scale);
197
227
  const height = this.ortho
198
228
  .equal(uint(1))
@@ -212,18 +242,41 @@ export class Selection {
212
242
  If(this.forced.greaterThanEqual(0), () => void chosen.assign(this.forced));
213
243
  const t = float(0).toVar();
214
244
  If(this.fades.equal(uint(1)).and(chosen.greaterThan(0)), () => void t.assign(smoothstep(top.mul(1 - FADE), top, height)));
215
- const deferred = this.fallback.some((target, level) => target !== level);
216
- const selected = deferred ? chosen.toVar() : chosen;
245
+ const selected = chosen.toVar();
217
246
  const finer = chosen.sub(1).toVar();
218
- if (deferred) {
219
- this.fallback.forEach((target, level) => {
220
- If(chosen.equal(level), () => {
221
- selected.assign(target);
222
- finer.assign(this.fallback[level - 1] ?? target);
223
- });
247
+ const before = chosen.toVar();
248
+ const beforeFiner = chosen.sub(1).toVar();
249
+ this.routes.forEach((route, level) => {
250
+ If(chosen.equal(level), () => {
251
+ selected.assign(route);
252
+ finer.assign(this.routes[level - 1] ?? route);
253
+ before.assign(this.previous[level] ?? route);
254
+ beforeFiner.assign(this.previous[level - 1] ?? this.previous[level] ?? route);
255
+ });
256
+ });
257
+ const afterFade = selected.equal(finer).select(float(0), t).toVar();
258
+ const beforeFade = before.equal(beforeFiner).select(float(0), t).toVar();
259
+ t.assign(afterFade);
260
+ // Mirrors residency.handover: only two slots per instance, including at a height boundary.
261
+ If(this.progress.lessThan(1).and(before.notEqual(selected).or(beforeFiner.notEqual(finer))), () => {
262
+ If(this.progress.lessThan(1 / 3), () => {
263
+ selected.assign(before);
264
+ finer.assign(beforeFiner);
265
+ t.assign(beforeFade.greaterThan(0).select(beforeFade.add(float(1).sub(beforeFade).mul(this.progress).mul(3)), float(0)));
266
+ })
267
+ .ElseIf(this.progress.lessThan(2 / 3), () => {
268
+ selected.assign(afterFade.greaterThan(0).select(finer, selected));
269
+ finer.assign(beforeFade.greaterThan(0).select(beforeFiner, before));
270
+ t.assign(float(1).sub(this.progress.sub(1 / 3).mul(3)));
271
+ })
272
+ .Else(() => {
273
+ t.assign(afterFade.greaterThan(0).select(float(1).sub(float(1)
274
+ .sub(afterFade)
275
+ .mul(this.progress.sub(2 / 3))
276
+ .mul(3)), float(0)));
224
277
  });
225
278
  If(selected.equal(finer), () => void t.assign(0));
226
- }
279
+ });
227
280
  const emit = (level, first, fade) => {
228
281
  const slot = atomicAdd(counts.element(level), uint(1)).add(first).toVar();
229
282
  out.matrices.element(slot).assign(m);
@@ -234,28 +287,26 @@ export class Selection {
234
287
  this.first.forEach((first, level) => {
235
288
  if (first === null)
236
289
  return;
237
- If(selected.equal(level), () => emit(level, first, t));
290
+ const start = at(this.starts, level);
291
+ If(selected.equal(level), () => emit(level, start, t));
238
292
  // The finer neighbour fading out with it.
239
- If(finer.equal(level).and(t.greaterThan(0)), () => emit(level, first, t.negate()));
293
+ If(finer.equal(level).and(t.greaterThan(0)), () => emit(level, start, t.negate()));
240
294
  });
241
295
  })().compute(count);
242
296
  }
243
- handOverPass() {
244
- const counts = storage(this.counts, "uint", this.first.length).setName("lodCounts").toAtomic();
245
- const args = storage(this.args, "uint", this.args.count).setName("lodDrawArgs");
297
+ argumentsPass() {
298
+ const counts = storage(this.counts, "uint", 0).setName("lodCounts").toAtomic();
246
299
  return Fn(() => {
247
- this.draws.forEach((draw, k) => {
248
- const at = this.argsStart.add((k * ARGS_BYTES) / 4);
249
- const first = this.first[draw.level];
250
- if (first === null || first === undefined)
251
- throw new Error("InstancedLod: a draw of a level that draws nothing");
252
- // A new/reused slice may already have a GPU page. Initialize its fixed fields
253
- // here too; uploading the CPU page would erase other crowds' live counts.
254
- args.element(at).assign(uint(draw.count));
255
- args.element(at.add(1)).assign(atomicLoad(counts.element(draw.level)));
256
- args.element(at.add(2)).assign(uint(draw.start));
257
- args.element(at.add(3)).assign(uint(draw.indexed ? 0 : first));
258
- args.element(at.add(4)).assign(uint(draw.indexed ? first : 0));
300
+ Loop({ start: uint(0), end: this.drawCount, type: "uint", condition: "<" }, ({ i }) => {
301
+ const draw = this.records.element(i).toVar();
302
+ const first = uint(0).toVar();
303
+ this.starts.forEach((value, level) => If(draw.x.equal(level), () => void first.assign(value)));
304
+ const base = this.argsStart.add(i.mul(ARGS_BYTES / 4));
305
+ this.arguments.element(base).assign(draw.y);
306
+ this.arguments.element(base.add(1)).assign(atomicLoad(counts.element(draw.x)));
307
+ this.arguments.element(base.add(2)).assign(draw.z);
308
+ this.arguments.element(base.add(3)).assign(draw.w.equal(1).select(uint(0), first));
309
+ this.arguments.element(base.add(4)).assign(draw.w.equal(1).select(first, uint(0)));
259
310
  });
260
311
  this.first.forEach((_, l) => atomicStore(counts.element(l), uint(0)));
261
312
  })().compute(1);
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/instanced/select.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sourceRoot":"","sources":["../../src/instanced/select.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Matrix4, type Color } from "three/webgpu";
2
+ import type { Blocks } from "./blocks.js";
3
+ import type { Selection } from "./select.js";
4
+ /** The CPU side of every instance, as `setMatrixAt` and `setColorAt` write it, and its edits not yet measured and uploaded. */
5
+ export declare class Store {
6
+ readonly count: number;
7
+ /** Instance matrices, 16 floats each: the selection uploads them from here. */
8
+ readonly matrices: Float32Array;
9
+ /** Instance colours, 4 floats each, once `setColor` was called. */
10
+ colors: Float32Array | null;
11
+ /** Each instance's bounding sphere, centre and radius, in the InstancedLod's space. */
12
+ readonly spheres: Float32Array;
13
+ private readonly matrixChanges;
14
+ private readonly colorChanges;
15
+ /** Where edits upload to, while there is one. */
16
+ private selection;
17
+ constructor(count: number);
18
+ check(index: number): void;
19
+ setMatrix(index: number, matrix: Matrix4): void;
20
+ getMatrix(index: number, matrix: Matrix4): Matrix4;
21
+ setColor(index: number, color: Color): void;
22
+ /** White unless set. */
23
+ getColor(index: number, color: Color): Color;
24
+ /** Upload edits to `selection` from now on, colours included once there are any; null stops uploading. */
25
+ attach(selection: Selection | null): void;
26
+ /** Take `source`'s matrices and colours, all of them pending. */
27
+ copy(source: Store): void;
28
+ /** Measure only changed matrices into `blocks`; matrix and colour uploads have separate ranges. */
29
+ measure(blocks: Blocks): void;
30
+ private measureChanges;
31
+ }
@@ -0,0 +1,96 @@
1
+ import { Matrix4 } from "three/webgpu";
2
+ import { Dirty, upload } from "./dirty.js";
3
+ const IDENTITY = new Matrix4();
4
+ /** The CPU side of every instance, as `setMatrixAt` and `setColorAt` write it, and its edits not yet measured and uploaded. */
5
+ export class Store {
6
+ count;
7
+ /** Instance matrices, 16 floats each: the selection uploads them from here. */
8
+ matrices;
9
+ /** Instance colours, 4 floats each, once `setColor` was called. */
10
+ colors = null;
11
+ /** Each instance's bounding sphere, centre and radius, in the InstancedLod's space. */
12
+ spheres;
13
+ matrixChanges;
14
+ colorChanges;
15
+ /** Where edits upload to, while there is one. */
16
+ selection = null;
17
+ constructor(count) {
18
+ this.count = count;
19
+ this.matrices = new Float32Array(count * 16);
20
+ this.spheres = new Float32Array(count * 4);
21
+ for (let i = 0; i < count; i++)
22
+ IDENTITY.toArray(this.matrices, i * 16);
23
+ this.matrixChanges = new Dirty(count);
24
+ this.colorChanges = new Dirty(count);
25
+ this.matrixChanges.all();
26
+ }
27
+ check(index) {
28
+ if (!Number.isInteger(index) || index < 0 || index >= this.count)
29
+ throw new Error(`InstancedLod: index ${index} is not in 0..${this.count - 1}`);
30
+ }
31
+ setMatrix(index, matrix) {
32
+ this.check(index);
33
+ matrix.toArray(this.matrices, index * 16);
34
+ this.matrixChanges.add(index);
35
+ }
36
+ getMatrix(index, matrix) {
37
+ this.check(index);
38
+ return matrix.fromArray(this.matrices, index * 16);
39
+ }
40
+ setColor(index, color) {
41
+ this.check(index);
42
+ if (!this.colors) {
43
+ this.colors = new Float32Array(this.count * 4).fill(1);
44
+ if (this.selection) {
45
+ this.selection.useColors(this.colors);
46
+ this.colorChanges.all();
47
+ }
48
+ }
49
+ color.toArray(this.colors, index * 4);
50
+ this.colorChanges.add(index);
51
+ }
52
+ /** White unless set. */
53
+ getColor(index, color) {
54
+ this.check(index);
55
+ return this.colors ? color.fromArray(this.colors, index * 4) : color.setRGB(1, 1, 1);
56
+ }
57
+ /** Upload edits to `selection` from now on, colours included once there are any; null stops uploading. */
58
+ attach(selection) {
59
+ this.selection = selection;
60
+ if (selection && this.colors)
61
+ selection.useColors(this.colors);
62
+ }
63
+ /** Take `source`'s matrices and colours, all of them pending. */
64
+ copy(source) {
65
+ this.matrices.set(source.matrices);
66
+ this.colors = source.colors?.slice() ?? null;
67
+ this.matrixChanges.all();
68
+ if (this.colors)
69
+ this.colorChanges.all();
70
+ }
71
+ /** Measure only changed matrices into `blocks`; matrix and colour uploads have separate ranges. */
72
+ measure(blocks) {
73
+ if (this.matrixChanges.empty && this.colorChanges.empty)
74
+ return;
75
+ this.measureChanges(blocks);
76
+ }
77
+ // Keep the closure-bearing work out of the unchanged path: V8 can allocate a
78
+ // lexical context on entry even when a function returns before its callbacks.
79
+ measureChanges(blocks) {
80
+ const { selection } = this;
81
+ const matricesChanged = !this.matrixChanges.empty;
82
+ this.matrixChanges.drain((start, end) => {
83
+ blocks.measure(start, end);
84
+ if (selection)
85
+ upload(selection.matrices, start, end);
86
+ });
87
+ this.colorChanges.drain((start, end) => {
88
+ if (selection?.colors)
89
+ upload(selection.colors, start, end);
90
+ });
91
+ selection?.changed();
92
+ if (matricesChanged)
93
+ blocks.refit();
94
+ }
95
+ }
96
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/instanced/store.ts"],"names":[],"mappings":"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"}