@drawcall/lod 0.5.0 → 0.5.2

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 (103) hide show
  1. package/dist/at.js.map +1 -1
  2. package/dist/bake.js.map +1 -1
  3. package/dist/baked/codec.js.map +1 -1
  4. package/dist/baked/coverage.js.map +1 -1
  5. package/dist/baked/fields.js.map +1 -1
  6. package/dist/baked/index.js.map +1 -1
  7. package/dist/baked/interior/faces.js.map +1 -1
  8. package/dist/baked/interior/material.js.map +1 -1
  9. package/dist/baked/interior/rooms.js.map +1 -1
  10. package/dist/baked/low.js.map +1 -1
  11. package/dist/baked/raster.js.map +1 -1
  12. package/dist/baked/textures.js.map +1 -1
  13. package/dist/baked/transfer.js.map +1 -1
  14. package/dist/baked/unwrap.js.map +1 -1
  15. package/dist/baked/xatlas.js.map +1 -1
  16. package/dist/codec/container.js.map +1 -1
  17. package/dist/codec/mesh.js.map +1 -1
  18. package/dist/dispose.js.map +1 -1
  19. package/dist/foliage.js.map +1 -1
  20. package/dist/impostor/bake/atlas.js.map +1 -1
  21. package/dist/impostor/bake/fit.js.map +1 -1
  22. package/dist/impostor/bake/index.js.map +1 -1
  23. package/dist/impostor/bake/materials.js.map +1 -1
  24. package/dist/impostor/bake/sheet.js.map +1 -1
  25. package/dist/impostor/bake/source.js.map +1 -1
  26. package/dist/impostor/codec.js.map +1 -1
  27. package/dist/impostor/impostor.js.map +1 -1
  28. package/dist/impostor/ktx2/encode.js.map +1 -1
  29. package/dist/impostor/ktx2/transcode.js.map +1 -1
  30. package/dist/impostor/ktx2/uastc.js.map +1 -1
  31. package/dist/impostor/ktx2/wasm/encoder.js.map +1 -1
  32. package/dist/impostor/ktx2/wasm/transcoder.js.map +1 -1
  33. package/dist/impostor/ktx2/worker.js.map +1 -1
  34. package/dist/impostor/mesh/card.js.map +1 -1
  35. package/dist/impostor/mesh/index.js.map +1 -1
  36. package/dist/impostor/mesh/material.js.map +1 -1
  37. package/dist/impostor/mesh/surface.js.map +1 -1
  38. package/dist/impostor/mesh/textures.js.map +1 -1
  39. package/dist/impostor/octahedral.js.map +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/dist/instanced/camera.js.map +1 -1
  42. package/dist/instanced/clusters.js.map +1 -1
  43. package/dist/instanced/cull.js.map +1 -1
  44. package/dist/instanced/instances.js.map +1 -1
  45. package/dist/instanced/key.js.map +1 -1
  46. package/dist/instanced/levels.js.map +1 -1
  47. package/dist/instanced/lists.js.map +1 -1
  48. package/dist/instanced/measure.js.map +1 -1
  49. package/dist/instanced/meshes.js.map +1 -1
  50. package/dist/instanced/mirror.js.map +1 -1
  51. package/dist/instanced/raycast.js.map +1 -1
  52. package/dist/instanced/rows.js.map +1 -1
  53. package/dist/instanced/shape.js.map +1 -1
  54. package/dist/instanced/sort.js.map +1 -1
  55. package/dist/instanced/update.js.map +1 -1
  56. package/dist/levels/bounds.js.map +1 -1
  57. package/dist/levels/cameras.js.map +1 -1
  58. package/dist/levels/compile/contexts.js.map +1 -1
  59. package/dist/levels/compile/index.js.map +1 -1
  60. package/dist/levels/compile/pipelines.js.map +1 -1
  61. package/dist/levels/compiles.js.map +1 -1
  62. package/dist/levels/draw.js.map +1 -1
  63. package/dist/levels/fade.js.map +1 -1
  64. package/dist/levels/index.js.map +1 -1
  65. package/dist/levels/item.js.map +1 -1
  66. package/dist/levels/load.js.map +1 -1
  67. package/dist/levels/manager.js.map +1 -1
  68. package/dist/levels/material.js.map +1 -1
  69. package/dist/levels/renderer.js.map +1 -1
  70. package/dist/levels/requests.js.map +1 -1
  71. package/dist/levels/screen.js.map +1 -1
  72. package/dist/loader/build.js.map +1 -1
  73. package/dist/loader/context.js.map +1 -1
  74. package/dist/loader/entry.js.map +1 -1
  75. package/dist/loader/index.js.map +1 -1
  76. package/dist/loader/level.js.map +1 -1
  77. package/dist/loader/node.js +8 -0
  78. package/dist/loader/node.js.map +1 -1
  79. package/dist/loader/request.js.map +1 -1
  80. package/dist/loader/url.js.map +1 -1
  81. package/dist/lod.js.map +1 -1
  82. package/dist/meshopt.js.map +1 -1
  83. package/dist/node-process.js.map +1 -1
  84. package/dist/node.js.map +1 -1
  85. package/dist/simplify/cards.js.map +1 -1
  86. package/dist/simplify/index.js.map +1 -1
  87. package/dist/source/detail.js.map +1 -1
  88. package/dist/source/deviation.js.map +1 -1
  89. package/dist/source/evaluator.js.map +1 -1
  90. package/dist/source/frame.js.map +1 -1
  91. package/dist/source/raycaster.js.map +1 -1
  92. package/dist/source/sampler.js.map +1 -1
  93. package/dist/source/source.js.map +1 -1
  94. package/dist/source/surface.js.map +1 -1
  95. package/dist/task.js.map +1 -1
  96. package/dist/three.js.map +1 -1
  97. package/dist/tsl.js.map +1 -1
  98. package/dist/typegpu.js.map +1 -1
  99. package/dist/wind/bounds.js.map +1 -1
  100. package/dist/wind/hooks.js.map +1 -1
  101. package/dist/wind/index.js.map +1 -1
  102. package/dist/wind/sway.js.map +1 -1
  103. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/instanced/lists.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/instanced/lists.ts"],"names":[],"mappings":"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","sourcesContent":["import { Frustum, Matrix4, type Camera, type Renderer, type StorageInstancedBufferAttribute } from \"three/webgpu\";\nimport { has } from \"../levels/draw.js\";\nimport type { InstanceSlots } from \"../levels/fade.js\";\nimport { emptyLevels, type LodLevel } from \"../levels/index.js\";\nimport type { LodLiveCount } from \"./clusters.js\";\nimport { Key } from \"./key.js\";\nimport { Sorter, type RowValues } from \"./sort.js\";\nimport type { IndirectDraw } from \"./rows.js\";\n\n// Each camera that draws a Lod has lists of its own: per level the instances it draws and their fades, and the indirect\n// draws of every level mesh. updateInstance fills them on the GPU (see update.ts), and is skipped for a camera while\n// nothing it reads changed since its last run.\n\n/** What one camera's sort reads besides its lists, everything in the Lod's space. */\nexport interface SortInputs extends Omit<RowValues, \"frustum\"> {\n /** The instances the camera sees, as start, count and item of `liveCounts`, flat (see clusters.ts), and how many in all. */\n ranges: readonly number[];\n instances: number;\n /** The live counts of the ranges, which only the GPU knows; null while none has one. */\n liveCounts: LodLiveCount[\"attribute\"] | null;\n /** Whether every range it sees lies wholly inside its frustum. */\n inside: boolean;\n /**\n * The bit of the one level each instance draws, without a fade, at any height its range's instances can have, with\n * no cullDistance and no arrival under way; else 0. Inside the camera's frustum, its lists then hold every instance\n * at that level however the camera moves.\n */\n onlyLevel: number;\n /** Bumped whenever what the instances' storage holds changed. */\n version: number;\n}\n\n/** One camera's lists: what it last sorted with, which a sort is skipped for. */\nexport interface CameraLists {\n /** The camera's frustum in the Lod's space, as its last update found it (see `frustumIn`). */\n readonly frustum: Frustum;\n /** Whether a sort was written for the camera: until then the level meshes draw nothing for it. */\n written: boolean;\n readonly sortKey: Key;\n}\n\nconst projection = new Matrix4();\n\n/** What a camera's sort key starts with: how it lies to the instances it sees, which says what else the key holds. */\nconst MODE = {\n /** It sees none: nothing draws, and no sort runs. */\n hidden: 0,\n /** The key holds everything the sort reads. */\n seen: 1,\n /** Every range wholly inside its frustum, each instance drawing one level without a fade and none culled: the key holds the level. */\n oneLevel: 2,\n /** Every range wholly inside an orthographic camera's frustum, none culled: heights are alike from anywhere, so no eye. */\n orthoInside: 3,\n} as const;\n\n/** The lists of every camera drawing one Lod, and the sorts filling them. */\nexport class InstanceLists {\n private readonly cameras = new Map<Camera, CameraLists>();\n private readonly sorter: Sorter;\n\n /** `listed` tells per level whether it has an instance list: whether it draws something. */\n constructor(listed: readonly boolean[]) {\n this.sorter = new Sorter(listed.reduce((mask, on, i) => (on ? mask | (1 << i) : mask), 0));\n }\n\n /** `camera`'s lists, made the first time it asks. */\n of(camera: Camera): CameraLists {\n const found = this.cameras.get(camera);\n if (found) return found;\n const lists: CameraLists = { frustum: new Frustum(), written: false, sortKey: new Key() };\n this.cameras.set(camera, lists);\n return lists;\n }\n\n /** Where `camera`'s lists and indirect draws lie; null before a sort was written for it. */\n slots(camera: Camera): InstanceSlots | null {\n return this.sorter.slotsOf(camera);\n }\n\n /** Every camera draws `draws` too, after the draws it has; where they start. */\n appendDraws(draws: readonly IndirectDraw[]): number {\n return this.sorter.appendDraws(draws);\n }\n\n /** Survivors' scaled matrices for `capacity` instances. */\n scaledMatrices(capacity: number): StorageInstancedBufferAttribute {\n return this.sorter.scaledMatrices(capacity);\n }\n\n /** Sort for `camera` at its next draw, unless nothing it sorts by changed since its last sort; `limit` bounds its buffers. */\n sort(camera: Camera, sort: SortInputs, limit: number): void {\n const lists = this.of(camera);\n const { levels, eye, scale, ortho, cull, loaded, before, progress, source, reach, ranges } = sort;\n const mode = modeOf(sort);\n // No level mesh draws for the camera (see Lod.sort): its lists are not read. The key still holds what the last\n // sort read, which a camera that looks back at the instances as it was matches: that sort's lists still hold.\n if (mode === MODE.hidden) return;\n const key = lists.sortKey.start().put(mode).put(sort.version);\n for (const value of ranges) key.put(value);\n if (mode === MODE.oneLevel) key.put(sort.onlyLevel);\n else if (mode === MODE.orthoInside) key.screen(scale, ortho, levels, cull, source).put(loaded).put(before).put(progress).put(reach);\n else if (mode === MODE.seen) {\n for (const { normal, constant } of lists.frustum.planes) key.put(normal.x).put(normal.y).put(normal.z).put(constant);\n key.camera(eye, scale, ortho, levels, cull, source).put(loaded).put(before).put(progress).put(reach);\n }\n // Live counts may change at any time: their ranges sort at every update.\n if (!key.end() && !sort.liveCounts) return;\n const values = { levels, eye, scale, ortho, cull, loaded, before, progress, source, reach, frustum: lists.frustum };\n this.sorter.write(camera, values, ranges, sort.liveCounts, sort.instances, limit);\n lists.written = true;\n }\n\n /** Sort for `camera` on `renderer`, reading `matrices`, if due: before a level mesh draws for it. */\n drawFor(renderer: Renderer, camera: Camera, matrices: StorageInstancedBufferAttribute): void {\n this.sorter.run(renderer, camera, matrices);\n }\n\n /** Give back the lists of every camera other than `camera` that `rendering` says stopped drawing, as a clone made for one frame does. */\n prune(camera: Camera, rendering: (camera: Camera) => boolean): void {\n for (const other of [...this.cameras.keys()]) if (other !== camera && !rendering(other)) this.forget(other);\n }\n\n dispose(): void {\n this.cameras.clear();\n this.sorter.dispose();\n }\n\n private forget(camera: Camera): void {\n this.cameras.delete(camera);\n this.sorter.release(camera);\n }\n}\n\n/** Set `lists`' frustum to `camera`'s in the space of `space`, a world matrix, and return it. */\nexport function frustumIn(lists: CameraLists, camera: Camera, space: Matrix4): Frustum {\n projection.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse).multiply(space);\n return lists.frustum.setFromProjectionMatrix(projection, camera.coordinateSystem, camera.reversedDepth);\n}\n\n/**\n * How the camera lies to `sort`'s instances (see MODE). Wholly inside its frustum, with no cullDistance, no instance is\n * culled wherever the camera is: instances that all draw one level fill its list alike, and an orthographic camera\n * measures their heights alike from anywhere.\n */\nfunction modeOf({ ranges, inside, cull, onlyLevel, ortho }: SortInputs): number {\n if (ranges.length === 0) return MODE.hidden;\n if (cull !== null || !inside) return MODE.seen;\n return onlyLevel !== 0 ? MODE.oneLevel : ortho ? MODE.orthoInside : MODE.seen;\n}\n\n/** Per level of `inputs`, whether it has an instance list: whether it draws something. */\nexport function listedOf(inputs: readonly LodLevel[]): boolean[] {\n const empty = emptyLevels(inputs);\n return inputs.map((_, i) => !has(empty, i));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"names":["Matrix4","Vector3","d","std","tgpu","drawnLevel","levelsToDraw","MAX_SURVIVOR_SCALE","xorshift","globalThis","__TYPEGPU_AUTONAME__","a","fn","u32","$","__TYPEGPU_META__","WeakMap","set","f","value","h","v","name","undefined","ast","params","type","body","externals","d.u32","originHash","vec3f","f32","origin","bits","bitcastF32toU32","x","y","z","__tsover_div","std.bitcastF32toU32","d.f32","cullScale","distance","near","far","survivors","share","clamp","__tsover_sub","min","sqrt","std.clamp","std.min","std.sqrt","longestAxis","mat4x4f","matrix","length","mul","vec4f","xyz","max","std.length","std.mul","d.vec4f","std.max","instanceOnScreen","source","grow","eye","scale","ortho","centre","size","__tsover_mul","w","std.distance","instance","toVec3f","instanceLevel","matrices","offset","cull","camera","loaded","fromArray","getMaxScaleOnAxis","setFromMatrixPosition","distanceTo","Number","levels","center","radius","height","elements"],"sources":["../../src/instanced/measure.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Matrix4","Vector3","d","std","tgpu","drawnLevel","levelsToDraw","MAX_SURVIVOR_SCALE","xorshift","globalThis","__TYPEGPU_AUTONAME__","a","fn","u32","$","__TYPEGPU_META__","WeakMap","set","f","value","h","v","name","undefined","ast","params","type","body","externals","d.u32","originHash","vec3f","f32","origin","bits","bitcastF32toU32","x","y","z","__tsover_div","std.bitcastF32toU32","d.f32","cullScale","distance","near","far","survivors","share","clamp","__tsover_sub","min","sqrt","std.clamp","std.min","std.sqrt","longestAxis","mat4x4f","matrix","length","mul","vec4f","xyz","max","std.length","std.mul","d.vec4f","std.max","instanceOnScreen","source","grow","eye","scale","ortho","centre","size","__tsover_mul","w","std.distance","instance","toVec3f","instanceLevel","matrices","offset","cull","camera","loaded","fromArray","getMaxScaleOnAxis","setFromMatrixPosition","distanceTo","Number","levels","center","radius","height","elements"],"sources":["../../src/instanced/measure.ts"],"sourcesContent":["import { Matrix4, Vector3, type Sphere } from \"three/webgpu\";\nimport { d, std, tgpu } from \"typegpu\";\nimport { drawnLevel, levelsToDraw } from \"../levels/draw.js\";\nimport type { LocalCamera } from \"./camera.js\";\nimport type { Cull } from \"./cull.js\";\n\n// How one instance draws, the same on the CPU and in the sort (see update.ts): whether cullDistance thins it out and\n// how much its survivors grow, and its height on screen.\n\n/** The largest a survivor of `cullDistance` grows: what it reaches where 1/64 of the instances draw. */\nexport const MAX_SURVIVOR_SCALE = 8;\n\n/** Three xorshift steps: shifts and xors only, exact in JavaScript's 32-bit integer operators as on the GPU. */\nconst xorshift = tgpu.fn(\n [d.u32],\n d.u32,\n)((value) => {\n \"use gpu\";\n let h = d.u32(value);\n h = d.u32(h ^ (h << 13));\n h = d.u32(h ^ (h >>> 17));\n h = d.u32(h ^ (h << 5));\n return h;\n});\n\n/**\n * The bits of `origin`, an instance's translation, hashed into [0, 1): what thins it out (see `CullDistance`), the\n * same on the CPU and the GPU.\n */\nexport const originHash = tgpu.fn(\n [d.vec3f],\n d.f32,\n)((origin) => {\n \"use gpu\";\n const bits = std.bitcastF32toU32(origin);\n let h = xorshift(bits.x ^ d.u32(0x9e3779b9));\n h = xorshift(h ^ bits.y);\n h = xorshift(h ^ bits.z);\n h = xorshift(h);\n return d.f32(h >>> 8) / 16777216;\n});\n\n/**\n * How an instance at `origin`, `distance` from the cullDistance camera, draws (see `CullDistance`): 0 thinned out,\n * else the scale it draws at: 1, or with `survivors` 1/√share, share the share of instances drawn at its distance.\n */\nexport const cullScale = tgpu.fn(\n [d.vec3f, d.f32, d.f32, d.f32, d.u32],\n d.f32,\n)((origin, distance, near, far, survivors) => {\n \"use gpu\";\n const share = std.clamp((far - distance) / (far - near), 0, 1);\n if (originHash(origin) >= share) return 0;\n if (survivors === 0) return 1;\n return std.min(1 / std.sqrt(share), MAX_SURVIVOR_SCALE);\n});\n\n/** The longest `matrix` scales an axis. */\nconst longestAxis = tgpu.fn(\n [d.mat4x4f],\n d.f32,\n)((matrix) => {\n \"use gpu\";\n const x = std.length(std.mul(matrix, d.vec4f(1, 0, 0, 0)).xyz);\n const y = std.length(std.mul(matrix, d.vec4f(0, 1, 0, 0)).xyz);\n const z = std.length(std.mul(matrix, d.vec4f(0, 0, 1, 0)).xyz);\n return std.max(x, std.max(y, z));\n});\n\n/**\n * Where an instance at `matrix` stands for a camera, `source` the source's sphere (centre, radius) grown by `grow`:\n * the source's centre (xyz), and its height on screen (w) seen from `eye` with `scale` pixels per unit of subtense, or\n * of size with `ortho` 1, as a Lod measures its own on the CPU (see screen.ts: 2 r q / d).\n */\nexport const instanceOnScreen = tgpu.fn(\n [d.mat4x4f, d.vec4f, d.f32, d.vec3f, d.f32, d.u32],\n d.vec4f,\n)((matrix, source, grow, eye, scale, ortho) => {\n \"use gpu\";\n const centre = std.mul(matrix, d.vec4f(std.mul(source.xyz, grow), 1)).xyz;\n const size = source.w * longestAxis(matrix) * grow * 2 * scale;\n if (ortho === 1) return d.vec4f(centre, size);\n return d.vec4f(centre, size / std.max(std.distance(centre, eye), 1e-6));\n});\n\nconst instance = new Matrix4();\nconst origin = new Vector3();\n\nconst toVec3f = ({ x, y, z }: Vector3) => d.vec3f(x, y, z);\n\n/**\n * The level the instance at `offset` of `matrices` draws most of its pixels with (see `Lod.getLevelAt`), thinned out\n * by `cull` and seen by `camera`, both in the Lod's space, of the levels of `loaded`, `source` the\n * source's sphere; null if it draws nothing.\n */\nexport function instanceLevel(\n matrices: ArrayLike<number>,\n offset: number,\n cull: Cull | null,\n camera: LocalCamera,\n source: Sphere,\n loaded: number,\n): number | null {\n instance.fromArray(matrices, offset);\n if (instance.getMaxScaleOnAxis() === 0) return null;\n origin.setFromMatrixPosition(instance);\n const grow = cull ? cullScale(toVec3f(origin), origin.distanceTo(cull.eye), cull.near, cull.far, Number(cull.survivors)) : 1;\n if (grow === 0) return null;\n const { levels, eye, scale, ortho } = camera;\n const { center, radius } = source;\n const height = instanceOnScreen(d.mat4x4f(...instance.elements), d.vec4f(center.x, center.y, center.z, radius), grow, toVec3f(eye), scale, Number(ortho)).w;\n return drawnLevel(levelsToDraw(height, levels, loaded, loaded, 1));\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"meshes.js","sourceRoot":"","sources":["../../src/instanced/meshes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meshes.js","sourceRoot":"","sources":["../../src/instanced/meshes.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Box3, BufferGeometry, type Camera, type Color, IndirectStorageBufferAttribute, type Layers, Matrix4, Mesh, type Object3D, type Sphere } from \"three/webgpu\";\nimport { setFadeSource, type DrawnInstances, type InstanceSlots } from \"../levels/fade.js\";\nimport { levelMaterial } from \"../levels/material.js\";\nimport { impostorInstances, type ImpostorMesh } from \"../impostor/mesh/index.js\";\nimport { isImpostorMesh, isInstancedMesh, isLOD, isLine, isMesh, isPoints, isSprite, rejectSkinned } from \"../three.js\";\nimport { DRAW_BYTES, type IndirectDraw } from \"./rows.js\";\n\n// The meshes that draw a Lod's level: one plain three Mesh per mesh and material group of its object, or an\n// ImpostorMesh for an impostor, each drawing every instance in its level's list for a camera with one indirect draw.\n\nconst IDENTITY = new Matrix4();\n/** One indirect draw of nothing: what a level mesh draws before its Lod's first sort for a camera. */\nconst NOTHING = new IndirectStorageBufferAttribute(new Uint32Array(DRAW_BYTES / 4), 1);\n\n/** A mesh of a level's object and one of its material groups, placed in the instance's space. */\nexport interface Part {\n template: Mesh;\n placement: Matrix4;\n group: number;\n draw: IndirectDraw;\n}\n\n/** What every level mesh of one Lod draws from. */\nexport interface MeshInputs {\n /** The instances, which a mesh made later draws too. */\n readonly instances: DrawnInstances;\n /**\n * Around every instance, in the Lod's space: what its meshes are culled by, and their box, which three's\n * Box3.setFromObject reads.\n */\n readonly bounds: Sphere;\n readonly box: Box3;\n /** Per camera, the instances in each level's list and where its indirect draws lie. */\n readonly slots: (camera: Camera) => InstanceSlots | null;\n /** One instance's bounding radius in its own space, which shadow casters are cut off at. */\n readonly radius: number;\n /** The Lod's layers, which its meshes are on. */\n readonly layers: Layers;\n /**\n * Where `camera`'s indirect draws lie as `renderer` draws a mesh for it, its lists sorted: the camera's due sort runs\n * now; null before the Lod's first sort for it. Never throws: three is rendering.\n */\n readonly drawFor: (renderer: unknown, camera: Camera) => InstanceSlots[\"args\"] | null;\n}\n\n/** `object`'s meshes and material groups, placed once in the instance's space, for level `level`. */\nexport function partsOf(object: Object3D, level: number): Part[] {\n rejectSkinned(object, \"Lod\");\n object.updateWorldMatrix(true, true);\n const outside = object.parent ? object.parent.matrixWorld.clone().invert() : new Matrix4();\n const found: Part[] = [];\n object.traverse((node) => {\n if (isLOD(node)) throw new Error(`Lod: levels cannot contain a LOD (\"${node.name}\")`);\n if (isInstancedMesh(node) && !isImpostorMesh(node)) throw new Error(`Lod: levels cannot contain an InstancedMesh (\"${node.name}\")`);\n if (isLine(node) || isPoints(node) || isSprite(node)) throw new Error(`Lod: levels draw meshes, not the line, points or sprite \"${node.name}\"`);\n if (!isMesh(node)) return;\n const placement = outside.clone().multiply(node.matrixWorld);\n ranges(node).forEach((range, group) => found.push({ template: node, placement, group, draw: { level, ...range } }));\n });\n return found;\n}\n\n/** The index (or vertex) ranges `mesh` draws, clipped to its draw range, in group order, empty draws included. */\nfunction ranges(mesh: Mesh): Array<{ count: number; start: number; indexed: boolean }> {\n const { geometry } = mesh;\n const indexed = geometry.index !== null;\n const total = geometry.index?.count ?? geometry.getAttribute(\"position\").count;\n const groups = Array.isArray(mesh.material) ? geometry.groups : [{ start: 0, count: total }];\n return groups.map(({ start, count }) => {\n const first = Math.min(total, Math.max(0, start, geometry.drawRange.start));\n const end = Math.min(total, start + count, geometry.drawRange.start + geometry.drawRange.count);\n return { count: Math.max(0, end - first), start: first, indexed };\n });\n}\n\n/** A level's meshes, which draw once their indirect draws lie among a camera's (see `drawFrom`). */\nexport interface LevelMeshes {\n readonly meshes: Mesh[];\n /** The meshes' indirect draws, in order. */\n readonly draws: IndirectDraw[];\n /** Draw from the camera's draw `first` on, where `draws` were appended (see `InstanceSlots.args`). */\n drawFrom(first: number): void;\n}\n\n/** The meshes drawing `parts`, tinted by `tint`. */\nexport function levelMeshes(parts: readonly Part[], tint: Color, inputs: MeshInputs): LevelMeshes {\n let first: number | null = null;\n const offset = (i: number) => (first === null ? null : (first + i) * DRAW_BYTES);\n return {\n meshes: parts.map((part, i) => levelMesh(part, () => offset(i), tint, inputs)),\n draws: parts.map((part) => part.draw),\n drawFrom: (start) => void (first = start),\n };\n}\n\n/** Release `mesh`, which may never have been added. */\nexport function freeMesh(mesh: Mesh): void {\n // ImpostorMesh.dispose also destroys its instance buffers, which are the Lod's.\n if (isImpostorMesh(mesh)) mesh.material.release();\n mesh.geometry.dispose();\n}\n\n/** Point every mesh of `meshes` at `instances`, which changed: survivors scale or no longer do, or the attributes were replaced. */\nexport function drawInstances(meshes: readonly Mesh[], instances: DrawnInstances): void {\n for (const mesh of meshes) {\n if (isImpostorMesh(mesh)) mesh.instanceMatrix = instances.matrices;\n Object.assign(mesh, { instanceColor: instances.colors });\n }\n}\n\n/**\n * Material group `group` of `template` drawn for every instance in level `level`'s list, from byte `offset()` of a\n * camera's draws, once there is one, on the Lod's layers. Only the Lod's raycast hits its instances.\n */\nfunction levelMesh({ template, placement, group }: Part, offset: () => number | null, tint: Color, inputs: MeshInputs): Mesh {\n const { instances, bounds, box, slots, radius, layers, drawFor } = inputs;\n // An impostor card is placed in the shader; any other mesh draws its geometry moved into the instance's space, so\n // the instance matrix is all it needs.\n const mesh = isImpostorMesh(template) ? card(template, placement, inputs) : plain(template, placement, group, instances);\n setFadeSource(mesh, {\n slots,\n radius,\n tint,\n level: isImpostorMesh(template) ? undefined : { instances, space: placement.clone().invert() },\n });\n mesh.name = template.name;\n mesh.castShadow = template.castShadow;\n mesh.receiveShadow = template.receiveShadow;\n mesh.layers = layers;\n mesh.raycast = () => {};\n if (!isImpostorMesh(mesh)) mesh.geometry.boundingSphere = bounds;\n mesh.geometry.boundingBox = box;\n const previous = mesh.onBeforeRender;\n // Each camera draws the instances in its own lists. A level compiling to join draws nothing yet: its pipelines do not\n // depend on the indirect draw.\n mesh.onBeforeRender = (renderer, scene, camera, geometry, material, drawn) => {\n previous.call(mesh, renderer, scene, camera, geometry, material, drawn);\n const start = offset();\n if (start === null) return;\n const args = drawFor(renderer, camera);\n if (args) mesh.geometry.setIndirect(args.attribute, args.offset + start);\n else mesh.geometry.setIndirect(NOTHING, 0);\n };\n return mesh;\n}\n\n/**\n * A plain mesh drawing `template`'s geometry moved by `placement`, with a geometry of its own, which its draws point\n * at their camera's indirect draws, over the moved one's buffers.\n */\nfunction plain(template: Mesh, placement: Matrix4, group: number, instances: DrawnInstances): Mesh {\n const moved = placed(template.geometry, placement);\n const geometry = new BufferGeometry();\n geometry.index = moved.index;\n for (const [name, attribute] of Object.entries(moved.attributes)) geometry.setAttribute(name, attribute);\n geometry.morphAttributes = moved.morphAttributes;\n // three's NodeMaterial multiplies a draw's colour by the varying vInstanceColor wherever its object has an\n // instanceColor; placeInstances (see fade.ts) writes it.\n return Object.assign(new Mesh(geometry, groupMaterial(template, group)), { instanceColor: instances.colors });\n}\n\n/** An impostor's cards for the instances in a level's list. */\nfunction card(template: ImpostorMesh, placement: Matrix4, { instances, bounds }: MeshInputs): ImpostorMesh {\n const mesh = impostorInstances(template, 0, placement);\n // Indirect draws give the count. Three otherwise keys a card's shader by its count, one per object.\n mesh.count = 1;\n mesh.instanceMatrix = instances.matrices;\n mesh.instanceColor = instances.colors;\n mesh.boundingSphere = bounds;\n return mesh;\n}\n\n/** The level material of `mesh`'s material group `group`. */\nfunction groupMaterial(mesh: Mesh, group: number) {\n if (!Array.isArray(mesh.material)) return levelMaterial(mesh.material);\n const index = mesh.geometry.groups[group]?.materialIndex ?? 0;\n const material = mesh.material[index];\n if (!material) throw new Error(`Lod: \"${mesh.name}\" has no material ${index}`);\n return levelMaterial(material);\n}\n\n/**\n * Placed copies of geometries, shared by every Lod drawing the same mesh the same way: a side table, as three's\n * BufferGeometry has no room for a package's state.\n */\nconst copies = new WeakMap<BufferGeometry, Array<{ placement: Matrix4; geometry: BufferGeometry }>>();\n\n/** `geometry` moved by `placement`: itself for the identity, else a copy made once. */\nfunction placed(geometry: BufferGeometry, placement: Matrix4): BufferGeometry {\n if (placement.equals(IDENTITY)) return geometry;\n const known = copies.get(geometry) ?? [];\n copies.set(geometry, known);\n const hit = known.find((entry) => entry.placement.equals(placement));\n if (hit) return hit.geometry;\n const copy = geometry.clone();\n const box = copy.boundingBox;\n const sphere = copy.boundingSphere;\n // applyMatrix4 otherwise recomputes both bounds by walking the transformed vertices.\n copy.boundingBox = null;\n copy.boundingSphere = null;\n // Translations leave normals and tangents unchanged; scanning them stalls large source arrivals.\n if (placement.clone().setPosition(0, 0, 0).equals(IDENTITY)) {\n const position = copy.getAttribute(\"position\");\n if (position) {\n position.applyMatrix4(placement);\n position.needsUpdate = true;\n }\n } else copy.applyMatrix4(placement);\n copy.boundingBox = box?.applyMatrix4(placement) ?? null;\n copy.boundingSphere = sphere?.applyMatrix4(placement) ?? null;\n geometry.addEventListener(\"dispose\", () => copy.dispose());\n known.push({ placement: placement.clone(), geometry: copy });\n return copy;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mirror.js","sourceRoot":"","sources":["../../src/instanced/mirror.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mirror.js","sourceRoot":"","sources":["../../src/instanced/mirror.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,+BAA+B,EAAiC,MAAM,cAAc,CAAC;AAE9F,oHAAoH;AACpH,iHAAiH;AACjH,yHAAyH;AACzH,6GAA6G;AAE7G,kEAAkE;AAClE,MAAM,OAAO,MAAM;IAKI;IAJZ,SAAS,CAAkC;IACpD,4CAA4C;IACpC,OAAO,CAAS;IAExB,YAAqB,MAAgC;QAAhC,WAAM,GAAN,MAAM,CAA0B;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,+BAA+B,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,gHAAgH;IAChH,OAAO;QACL,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACnC,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,YAAY;YAAE,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3F,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3B,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,sHAAsH;AACtH,MAAM,OAAO,WAAW;IAID;IAHZ,SAAS,CAAkC;IAC5C,OAAO,CAAS;IAExB,YAAqB,MAAgC;QAAhC,WAAM,GAAN,MAAM,CAA0B;QACnD,IAAI,CAAC,SAAS,GAAG,IAAI,+BAA+B,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5F,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,2HAA2H;IAC3H,OAAO;QACL,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QACnC,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QACjH,KAAK,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACnE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACtB,SAAS,CAAC,cAAc,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3B,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,6FAA6F;IACrF,IAAI,CAAC,KAAa,EAAE,GAAW;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACrC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACrC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { StorageInstancedBufferAttribute, type InstancedBufferAttribute } from \"three/webgpu\";\n\n// Storage attributes the GPU reads a Lod's CPU attributes through, uploading what the app marks changed in them, as\n// three uploads an InstancedMesh's: binding the app's own attribute through storage() would flag it as a storage\n// attribute, which three then pads (an RGB colour to four floats) and treats as one wherever else the app draws it. Each\n// takes and clears the source's update ranges, so an InstancedMesh also drawing the source uploads it whole.\n\n/** A CPU instanceMatrix's mirror, over the source's own array. */\nexport class Mirror {\n readonly attribute: StorageInstancedBufferAttribute;\n /** The source's version it last took in. */\n private version: number;\n\n constructor(readonly source: InstancedBufferAttribute) {\n this.attribute = new StorageInstancedBufferAttribute(source.array, 16);\n this.version = source.version;\n }\n\n /** Take in the source's edits: the ranges the app marked changed, all of it without any. Whether it changed. */\n refresh(): boolean {\n const { source, attribute } = this;\n if (source.version === this.version) return false;\n this.version = source.version;\n for (const { start, count } of source.updateRanges) attribute.addUpdateRange(start, count);\n source.clearUpdateRanges();\n attribute.needsUpdate = true;\n return true;\n }\n\n dispose(): void {\n this.attribute.dispose();\n }\n}\n\n/** A CPU instanceColor's mirror: its RGB padded to the four floats a storage colour holds, in an array of its own. */\nexport class ColorMirror {\n readonly attribute: StorageInstancedBufferAttribute;\n private version: number;\n\n constructor(readonly source: InstancedBufferAttribute) {\n this.attribute = new StorageInstancedBufferAttribute(new Float32Array(source.count * 4), 4);\n this.copy(0, source.count);\n this.version = source.version;\n }\n\n /** Take in the source's edits: the instances of the ranges the app marked changed, all without any. Whether it changed. */\n refresh(): boolean {\n const { source, attribute } = this;\n if (source.version === this.version) return false;\n this.version = source.version;\n const ranges = source.updateRanges.length > 0 ? source.updateRanges : [{ start: 0, count: source.array.length }];\n for (const { start, count } of ranges) {\n const first = Math.floor(start / 3);\n const end = Math.min(Math.ceil((start + count) / 3), source.count);\n this.copy(first, end);\n attribute.addUpdateRange(first * 4, (end - first) * 4);\n }\n source.clearUpdateRanges();\n attribute.needsUpdate = true;\n return true;\n }\n\n dispose(): void {\n this.attribute.dispose();\n }\n\n /** Copy instances `first` to `end` (exclusive) of the source, white's alpha padding them. */\n private copy(first: number, end: number): void {\n const from = this.source.array;\n const to = this.attribute.array;\n for (let i = first; i < end; i++) {\n to[i * 4] = from[i * 3] ?? 0;\n to[i * 4 + 1] = from[i * 3 + 1] ?? 0;\n to[i * 4 + 2] = from[i * 3 + 2] ?? 0;\n to[i * 4 + 3] = 1;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"raycast.js","sourceRoot":"","sources":["../../src/instanced/raycast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAA+D,MAAM,cAAc,CAAC;AACjH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAStC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AACtB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAC5B,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;AAC5B,MAAM,IAAI,GAAmB,EAAE,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAa,EAAE,MAAqB,EAAE,QAA2B,EAAE,KAAa,EAAE,SAAoB,EAAE,UAA0B;IACjK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,6GAA6G;IAC7G,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;IACxC,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACpF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAAE,SAAS;QACnE,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM;YACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAClL,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,SAAS,MAAM,CAAC,IAAU,EAAE,WAAoB,EAAE,SAAoB;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;IAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAC/B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"raycast.js","sourceRoot":"","sources":["../../src/instanced/raycast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAA+D,MAAM,cAAc,CAAC;AACjH,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAStC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;AACtB,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;AAC5B,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;AAC/B,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;AAC5B,MAAM,IAAI,GAAmB,EAAE,CAAC;AAEhC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAa,EAAE,MAAqB,EAAE,QAA2B,EAAE,KAAa,EAAE,SAAoB,EAAE,UAA0B;IACjK,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,6GAA6G;IAC7G,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,CAAC;IACxC,KAAK,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACpF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAAE,SAAS;QACnE,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM;YACpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;gBAAE,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IAClL,CAAC;AACH,CAAC;AAED,6DAA6D;AAC7D,SAAS,MAAM,CAAC,IAAU,EAAE,WAAoB,EAAE,SAAoB;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;IAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAChB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IAC/B,IAAI,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;IACzB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { Matrix4, Ray, Sphere, type Intersection, type Mesh, type Object3D, type Raycaster } from \"three/webgpu\";\nimport { stretch } from \"../three.js\";\nimport type { Part } from \"./meshes.js\";\n\n/** A Lod's source level as a raycast meets it: its parts, and the sphere around every level in an instance's space. */\nexport interface RaycastSource {\n readonly parts: readonly Part[];\n readonly rest: Sphere;\n}\n\nconst inverse = new Matrix4();\nconst ray = new Ray();\nconst sphere = new Sphere();\nconst instance = new Matrix4();\nconst world = new Matrix4();\nconst hits: Intersection[] = [];\n\n/**\n * Hits on the first `count` instances of `matrices`, `lod`'s, of `source`'s meshes, each raycast where an instance\n * stands, with `instanceId` set as on an InstancedMesh's hits.\n */\nexport function raycastInstances(lod: Object3D, source: RaycastSource, matrices: ArrayLike<number>, count: number, raycaster: Raycaster, intersects: Intersection[]): void {\n ray.copy(raycaster.ray).applyMatrix4(inverse.copy(lod.matrixWorld).invert());\n // A mesh of several material groups is a part per group: it is hit once. A mesh's parts share its placement.\n const meshes = new Map<Mesh, Matrix4>();\n for (const { template, placement } of source.parts) meshes.set(template, placement);\n for (let index = 0; index < count; index++) {\n instance.fromArray(matrices, index * 16);\n sphere.center.copy(source.rest.center).applyMatrix4(instance);\n sphere.radius = source.rest.radius * stretch(instance);\n if (sphere.radius === 0 || !ray.intersectsSphere(sphere)) continue;\n for (const [mesh, placement] of meshes)\n for (const hit of hitsAt(mesh, world.multiplyMatrices(lod.matrixWorld, instance).multiply(placement), raycaster)) intersects.push({ ...hit, object: lod, instanceId: index });\n }\n}\n\n/** `mesh`'s own raycast, as if it stood at `matrixWorld`. */\nfunction hitsAt(mesh: Mesh, matrixWorld: Matrix4, raycaster: Raycaster): Intersection[] {\n const own = mesh.matrixWorld;\n hits.length = 0;\n mesh.matrixWorld = matrixWorld;\n try {\n mesh.raycast(raycaster, hits);\n } finally {\n mesh.matrixWorld = own;\n }\n return hits;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rows.js","sourceRoot":"","sources":["../../src/instanced/rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,oHAAoH;AACpH,2EAA2E;AAE3E,+CAA+C;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAW,CAAC;AACxF,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAW,CAAC;AAE3G,8EAA8E;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAEzD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,sFAAsF;AACtF,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAU7B,+GAA+G;AAC/G,MAAM,UAAU,SAAS,CAAC,KAA8B;IACtD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1G,OAAO,IAAI,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AAExC,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnI,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,IAAI,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjG,0GAA0G;AAC1G,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7F,sGAAsG;AACtG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,8BAA8B,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"rows.js","sourceRoot":"","sources":["../../src/instanced/rows.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,oHAAoH;AACpH,2EAA2E;AAE3E,+CAA+C;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,CAAC;AAE5B;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAW,CAAC;AACxF,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAW,CAAC;AAE3G,8EAA8E;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AAEzD,2CAA2C;AAC3C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAAC;AAEnC,sFAAsF;AACtF,MAAM,CAAC,MAAM,UAAU,GAAG,EAAE,CAAC;AAU7B,+GAA+G;AAC/G,MAAM,UAAU,SAAS,CAAC,KAA8B;IACtD,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1G,OAAO,IAAI,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;AAExC,iEAAiE;AACjE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnI,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,IAAI,YAAY,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjG,0GAA0G;AAC1G,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7F,sGAAsG;AACtG,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,8BAA8B,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC","sourcesContent":["import { IndirectStorageBufferAttribute, StorageBufferAttribute } from \"three/webgpu\";\nimport { MAX_LEVELS } from \"../levels/draw.js\";\n\n// What a Lod sorts by for one camera, as the sort passes read it (see update.ts): its row, of u32s and of f32s, and\n// after the row's u32s, in their buffer, the blocks of instances it sorts.\n\n/** vec4s of the row's u32s and of its f32s. */\nexport const INT_ROW = 6;\nexport const FLOAT_ROW = 12;\n\n/**\n * Where each vec4 of the row lies. Of its u32s (`INTS_AT`): `levels`, the level count, the coarsest level and the forced\n * level as `forcedWord` writes it; `masks`, the levels that draw nothing, whether they fade (1 or 0), those loaded and\n * those loaded before; `flags`, whether the camera is orthographic, cullDistance is set and its survivors scale (1 or\n * 0), and the draw count; `layout`, slots per list; `starts`, per level the first slot of its list, `UNLISTED` for none.\n * Of its f32s (`FLOATS_AT`): maxPixels of levels 0 to 3 and 4 to 7, the camera in the Lod's space (eye and pixels per\n * unit of subtense, or of size, ortho), one instance's source sphere, the arrival's progress, the reach of every level\n * and its sway, cullDistance's near and far, cullDistance's camera, and the frustum's six planes.\n */\nexport const INTS_AT = { levels: 0, masks: 1, flags: 2, layout: 3, starts: 4 } as const;\nexport const FLOATS_AT = { low: 0, high: 1, eye: 2, source: 3, values: 4, cullEye: 5, planes: 6 } as const;\n\n/** The forced level as the row holds it: one more, so that 0 is none (-1). */\nexport const forcedWord = (forced: number) => forced + 1;\n\n/** The start of a level without a list. */\nexport const UNLISTED = 0xffffffff;\n\n/** Bytes per indirect draw, including the unused final word of a non-indexed draw. */\nexport const DRAW_BYTES = 20;\n\n/** One indirect draw: a level's mesh, drawing `count` indices (or vertices) from `start`. */\nexport interface IndirectDraw {\n level: number;\n count: number;\n start: number;\n indexed: boolean;\n}\n\n/** The words of `draws` as the indirect pass reads them: level, count, start and whether indexed, per draw. */\nexport function drawWords(draws: readonly IndirectDraw[]): StorageBufferAttribute {\n const values = new Uint32Array(Math.max(draws.length, 1) * 4);\n draws.forEach((draw, i) => values.set([draw.level, draw.count, draw.start, Number(draw.indexed)], i * 4));\n return new StorageBufferAttribute(values, 4);\n}\n\n/**\n * Where the blocks start among the u32s: four per block, its first instance, its range's end and start, and its range's\n * item of live counts, NO_LIVE_COUNT for none (see `LodCluster.liveCount`).\n */\nexport const BLOCKS_AT = INT_ROW * 4;\nexport const NO_LIVE_COUNT = 0xffffffff;\n\n/** The row's u32s and room for `blocks` blocks, one at least. */\nexport const wordsBuffer = (blocks: number) => new StorageBufferAttribute(new Uint32Array(BLOCKS_AT + Math.max(blocks, 1) * 4), 4);\nexport const floatsBuffer = () => new StorageBufferAttribute(new Float32Array(FLOAT_ROW * 4), 4);\n/** Per level, how many instances its list holds for the camera sorting: the indirect pass clears them. */\nexport const countsBuffer = () => new StorageBufferAttribute(new Uint32Array(MAX_LEVELS), 1);\n/** Indirect draws only the GPU writes, zero until a sort writes them: nothing draws before a sort. */\nexport const argsBuffer = (draws: number) => new IndirectStorageBufferAttribute(new Uint32Array(Math.max(draws, 1) * (DRAW_BYTES / 4)), 1);\n"]}
@@ -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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","sourcesContent":["import { Box3, Sphere, Vector3 } from \"three/webgpu\";\nimport { levelBox, measureLevels } from \"../levels/bounds.js\";\nimport type { LodLevel } from \"../levels/index.js\";\n\n/** One instance of a Lod as its levels measure it, in its own space: what heights, bounds and fades are measured by. */\nexport class InstanceShape {\n /** The source's sphere, which heights are measured by. */\n readonly source = new Sphere();\n /** Around every level, unloaded ones included. */\n readonly rest = new Sphere();\n /** The source's radius in its own space, which default thresholds are measured from. */\n readonly ownRadius: number = 0;\n /** The source's radius padded for sway, where fades and shadow casters are cut off (see `wind`). */\n fadeRadius = 0;\n /** The diagonal of every level's box: how much a cluster's box shows of its instances' scale. */\n readonly extent: number = 0;\n /** Every level's box. */\n private readonly envelope = new Box3();\n /** How far levels sway beyond `rest`, relative to it. */\n private sway = 0;\n\n /** The shape of `inputs`, the levels given; none without levels. */\n constructor(inputs: readonly LodLevel[]) {\n if (inputs.length === 0) return;\n const { own, placed } = measureLevels(inputs, \"Lod\");\n this.ownRadius = own.radius;\n this.source.copy(placed);\n this.rest.copy(placed);\n this.fadeRadius = placed.radius;\n for (const input of inputs) this.envelope.union(levelBox(input));\n // Metadata includes unloaded levels, so later arrivals cannot pass the envelope.\n if (this.envelope.isEmpty()) return;\n this.extent = this.envelope.getSize(new Vector3()).length();\n const { center } = this.rest;\n const { min, max } = this.envelope;\n this.rest.radius = Math.max(\n this.rest.radius,\n Math.hypot(\n Math.max(Math.abs(min.x - center.x), Math.abs(max.x - center.x)),\n Math.max(Math.abs(min.y - center.y), Math.abs(max.y - center.y)),\n Math.max(Math.abs(min.z - center.z), Math.abs(max.z - center.z)),\n ),\n );\n }\n\n /** The radius around the source's centre that every level and its sway stay within. */\n get reach(): number {\n return this.rest.radius * (1 + this.sway);\n }\n\n /** How far from the instance's origin every level and its sway reach. */\n get originReach(): number {\n return this.rest.center.length() + this.reach;\n }\n\n /** Sway as wind of `slope` above `baseY` moves it, the source's fade radius padded by `padding`. */\n wind(padding: number, slope: number, baseY: number): void {\n this.fadeRadius = this.source.radius + padding;\n // The wind's shape comes from the source, but taller or offset levels sway farther.\n const reach = slope * Math.max(Math.abs(this.envelope.min.y - baseY), Math.abs(this.envelope.max.y - baseY));\n this.sway = this.rest.radius > 0 ? reach / this.rest.radius : 0;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/instanced/sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAA4G,MAAM,cAAc,CAAC;AAEjM,OAAO,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAIhE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAqB,MAAM,WAAW,CAAC;AAClL,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AA4C7E,iFAAiF;AACjF,MAAM,OAAO,MAAM;IAcY;IAbZ,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC3C,KAAK,GAAmB,EAAE,CAAC;IACpC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,GAAG,YAAY,EAAE,CAAC;IACzC,gHAAgH;IACxG,MAAM,GAA4E,IAAI,CAAC;IAC/F,kGAAkG;IACjF,QAAQ,GAAG,IAAI,+BAA+B,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1F,6EAA6E;IAC5D,YAAY,GAAG,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAsB,IAAI,CAAC;IAEzC,gGAAgG;IAChG,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,4FAA4F;IAC5F,WAAW,CAAC,KAA8B;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2DAA2D;IAC3D,cAAc,CAAC,QAAgB;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,+BAA+B,CAAC,IAAI,YAAY,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;QAClH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,4FAA4F;IAC5F,OAAO,CAAC,MAAc;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3H,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAc,EAAE,MAAiB,EAAE,MAAyB,EAAE,UAA4C,EAAE,SAAiB,EAAE,KAAa;QAChJ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QAChC,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,KAAK,CAAC,KAAK,CAAC;QAClC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC3E,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,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC5D,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,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrF,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,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACrF,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,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtI,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QAClC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,sGAAsG;IACtG,GAAG,CAAC,QAAkB,EAAE,MAAc,EAAE,QAAyC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,GAAG;YAAE,OAAO;QAC1B,MAAM,IAAI,GAAG;YACX,GAAG,OAAO;YACV,QAAQ;YACR,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY;YACnD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,QAAQ;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACvC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC;QACpB,uEAAuE;QACvE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/G,CAAC;IAED,+DAA+D;IAC/D,OAAO,CAAC,MAAc;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,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,UAAU,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,YAAY,EAAE;YACtB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D,KAAK,EAAE,IAAI,sBAAsB,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACnC,GAAG,EAAE,KAAK;SACX,CAAC;IACJ,CAAC;IAED,0GAA0G;IAClG,IAAI,CAAC,OAAsB,EAAE,SAAiB,EAAE,KAAa;QACnE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzC,OAAO,IAAI,GAAG,SAAS;YAAE,IAAI,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC5C,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK;YACnB,MAAM,IAAI,UAAU,CAClB,iBAAiB,IAAI,8BAA8B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,GAAG,CAAC,qDAAqD,KAAK,mIAAmI,CAChS,CAAC;QACJ,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,GAAG,IAAI,sBAAsB,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,mIAAmI;IAC3H,WAAW,CAAC,OAAsB,EAAE,MAAyB;QACnE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5F,IAAI,KAAK,GAAG,UAAU;YACpB,MAAM,IAAI,UAAU,CAAC,sBAAsB,KAAK,cAAc,KAAK,wCAAwC,UAAU,mCAAmC,CAAC,CAAC;QAC5J,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,IAAI,EAAE,GAAG,SAAS,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;YAC5C,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,KAAK,EAAE,EAAE,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,4EAA4E;IACpE,KAAK,CAAC,OAAsB;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACjD,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9C,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzD,IAAI,EAAE;gBAAE,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACnC,CAAC;CACF;AAED,SAAS,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAiB;IAC5E,KAAK,MAAM,SAAS,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;QAAE,SAAS,CAAC,OAAO,EAAE,CAAC;AACrF,CAAC;AAED,0BAA0B;AAC1B,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,EAAE,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"sort.js","sourceRoot":"","sources":["../../src/instanced/sort.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,+BAA+B,EAA4G,MAAM,cAAc,CAAC;AAEjM,OAAO,EAAE,UAAU,EAAmB,MAAM,mBAAmB,CAAC;AAIhE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAqB,MAAM,WAAW,CAAC;AAClL,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAmB,MAAM,aAAa,CAAC;AA4C7E,iFAAiF;AACjF,MAAM,OAAO,MAAM;IAcY;IAbZ,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC3C,KAAK,GAAmB,EAAE,CAAC;IACpC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;IAClB,MAAM,GAAG,YAAY,EAAE,CAAC;IACzC,gHAAgH;IACxG,MAAM,GAA4E,IAAI,CAAC;IAC/F,kGAAkG;IACjF,QAAQ,GAAG,IAAI,+BAA+B,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1F,6EAA6E;IAC5D,YAAY,GAAG,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAsB,IAAI,CAAC;IAEzC,gGAAgG;IAChG,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,4FAA4F;IAC5F,WAAW,CAAC,KAA8B;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2DAA2D;IAC3D,cAAc,CAAC,QAAgB;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,+BAA+B,CAAC,IAAI,YAAY,CAAC,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;QAClH,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;IAC/B,CAAC;IAED,4FAA4F;IAC5F,OAAO,CAAC,MAAc;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3H,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,MAAc,EAAE,MAAiB,EAAE,MAAyB,EAAE,UAA4C,EAAE,SAAiB,EAAE,KAAa;QAChJ,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAClC,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;QAChC,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,KAAK,CAAC,KAAK,CAAC;QAClC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC3E,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,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAC5D,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,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrG,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrF,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,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;QACrF,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,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtI,OAAO,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;QAClC,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,sGAAsG;IACtG,GAAG,CAAC,QAAkB,EAAE,MAAc,EAAE,QAAyC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,EAAE,GAAG;YAAE,OAAO;QAC1B,MAAM,IAAI,GAAG;YACX,GAAG,OAAO;YACV,QAAQ;YACR,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY;YACnD,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,QAAQ;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,UAAU;SACvB,CAAC;QACF,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACvC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC;QACpB,uEAAuE;QACvE,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;IAC/G,CAAC;IAED,+DAA+D;IAC/D,OAAO,CAAC,MAAc;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,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,UAAU,CAAC,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAEO,WAAW;QACjB,OAAO;YACL,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,YAAY,EAAE;YACtB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1D,KAAK,EAAE,IAAI,sBAAsB,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YACnC,GAAG,EAAE,KAAK;SACX,CAAC;IACJ,CAAC;IAED,0GAA0G;IAClG,IAAI,CAAC,OAAsB,EAAE,SAAiB,EAAE,KAAa;QACnE,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACzC,OAAO,IAAI,GAAG,SAAS;YAAE,IAAI,IAAI,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC5C,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK;YACnB,MAAM,IAAI,UAAU,CAClB,iBAAiB,IAAI,8BAA8B,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,GAAG,CAAC,qDAAqD,KAAK,mIAAmI,CAChS,CAAC;QACJ,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,KAAK,GAAG,IAAI,sBAAsB,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,mIAAmI;IAC3H,WAAW,CAAC,OAAsB,EAAE,MAAyB;QACnE,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC;YAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5F,IAAI,KAAK,GAAG,UAAU;YACpB,MAAM,IAAI,UAAU,CAAC,sBAAsB,KAAK,cAAc,KAAK,wCAAwC,UAAU,mCAAmC,CAAC,CAAC;QAC5J,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,IAAI,EAAE,GAAG,SAAS,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;YAC5C,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,IAAI,KAAK,EAAE,EAAE,IAAI,CAAC;gBAAE,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzG,CAAC;QACD,IAAI,KAAK,KAAK,CAAC;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACnC,CAAC;IAED,4EAA4E;IACpE,KAAK,CAAC,OAAsB;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACjD,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC7C,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9C,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YACzD,IAAI,EAAE;gBAAE,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;QACnC,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACnC,CAAC;CACF;AAED,SAAS,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAiB;IAC5E,KAAK,MAAM,SAAS,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC;QAAE,SAAS,CAAC,OAAO,EAAE,CAAC;AACrF,CAAC;AAED,0BAA0B;AAC1B,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC;QAAE,KAAK,EAAE,CAAC;IAC5D,OAAO,KAAK,CAAC;AACf,CAAC","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 +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"]}