@woosh/meep-engine 3.32.0 → 3.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/collection/table/RowFirstTable.d.ts +8 -0
  4. package/src/core/collection/table/RowFirstTable.d.ts.map +1 -1
  5. package/src/core/collection/table/RowFirstTable.js +40 -11
  6. package/src/engine/graphics/ecs/sprite/Sprite.d.ts +3 -0
  7. package/src/engine/graphics/ecs/sprite/Sprite.d.ts.map +1 -1
  8. package/src/engine/graphics/ecs/sprite/Sprite.js +3 -0
  9. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +3 -0
  10. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  11. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +3 -0
  12. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  13. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +20 -3
  14. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  15. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +21 -3
  16. package/src/shade/renderer/GraphicsContext.d.ts +11 -0
  17. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  18. package/src/shade/renderer/GraphicsContext.js +52 -38
  19. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +6 -5
  20. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -1
  21. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +241 -240
  22. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.d.ts +51 -0
  23. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.d.ts.map +1 -1
  24. package/src/shade/renderer/buffer/GPUBufferStagingAllocator.js +214 -28
  25. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.d.ts +2 -1
  26. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.d.ts.map +1 -1
  27. package/src/shade/renderer/dynamic/DynamicMeshAVBOITChannel.js +19 -17
  28. package/src/shade/renderer/dynamic/GPUDynamicMeshDrawList.d.ts +70 -0
  29. package/src/shade/renderer/dynamic/GPUDynamicMeshDrawList.d.ts.map +1 -0
  30. package/src/shade/renderer/dynamic/GPUDynamicMeshDrawList.js +257 -0
  31. package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.d.ts.map +1 -1
  32. package/src/shade/renderer/dynamic/GPUDynamicMeshRenderer.js +19 -34
  33. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +6 -20
  34. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
  35. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +42 -36
  36. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -1
  37. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
  38. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +4 -3
  39. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.d.ts +4 -3
  40. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.d.ts.map +1 -1
  41. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_vertex.js +7 -4
  42. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +14 -15
  43. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
  44. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +49 -83
  45. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts +19 -3
  46. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  47. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +26 -6
  48. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +2 -1
  49. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  50. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +12 -6
  51. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +3 -2
  52. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
  53. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +21 -13
  54. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  55. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  56. package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +20 -0
  57. package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.d.ts.map +1 -1
  58. package/src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.js +8 -1
@@ -887,3 +887,23 @@ reach — the dynamic-mesh directory, the orchestrator run with a real channel,
887
887
  93 tests — passes, and the type check is at budget. On the Metal adapter, `@builtin(sample_mask)` and
888
888
  `@interpolate(perspective, centroid)` compile and the multisampled pipeline builds; no uncaptured device
889
889
  errors, including 240 frames of a live trail on a moving path, fading in and out.
890
+
891
+ ## 25. A trail's draw constants go up once a frame — 2026-09-27
892
+
893
+ Entry 23 left each live mesh's constants built twice — a transient uniform and a bind group of its own
894
+ for the splat, and again for the draw — noted, not shaved. They are shaved here, as part of moving
895
+ every dynamic mesh's per-draw constants into a table (CHANGELOG, Unreleased, Rendering): the
896
+ occupancy, after its upload, writes the frame's `GPUDynamicMeshDrawList` — one transient storage
897
+ buffer and one write per 1,024 draws — and the splat and the draw both bind it and name their rows by
898
+ `first_instance`. The splat's layout is four groups now (constants, geometry, warp, volume), which is
899
+ WebGPU's default `maxBindGroups`.
900
+
901
+ **Measured** with 1,500 live meshes through the channel at 1280×720 on the RTX 4090, asserts
902
+ stripped, paired: 9.8–11.4 ms of CPU a frame to 2.0–2.5; 3,032 copies a frame to 34 and 7,624
903
+ `setBindGroup` to 3,131. The pictures after equal frame counts are bit-identical to before.
904
+
905
+ **Verified.** `DynamicMeshAVBOITChannel.draws.spec.js` checks the splat and the draw read each mesh's own
906
+ constants from one table, and fails with a draw pass that uploads its own copy (two tables).
907
+ `chunk_dynamic_mesh_vertex.spec.js` runs the shared AVBOIT vertex stage on the emulator and checks a
908
+ vertex is carried by the row its draw names. The other half of the item — the emptiness query and the
909
+ gather both walking the first live mesh's triangles — is left as it was.
@@ -1 +1 @@
1
- {"version":3,"file":"write_gpu_typed_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.js"],"names":[],"mappings":"AA0GA;;;;;;GAMG;AACH,0DAJW,YAAY,qBAEV,IAAI,CA+DhB;AAMD;;;;;;GAMG;AACH,2EAHW,WAAW,eACX,MAAM,QA2BhB;6BAnN4B,4CAA4C"}
1
+ {"version":3,"file":"write_gpu_typed_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/type/serde/write_gpu_typed_buffer.js"],"names":[],"mappings":"AA0GA;;;;;;GAMG;AACH,0DAJW,YAAY,qBAEV,IAAI,CA+DhB;AAMD;;;;;;GAMG;AACH,2EAHW,WAAW,eACX,MAAM,QAkChB;6BA1N4B,4CAA4C"}
@@ -203,7 +203,14 @@ export function write_gpu_typed_buffer(
203
203
  assert.isNonNegativeInteger(byteOffset, 'byteOffset');
204
204
  assert.greaterThanOrEqual(data.byteLength - byteOffset, type.size, "Data buffer is too small");
205
205
 
206
- scratch_buffer.fromArrayBuffer(data);
206
+ if (scratch_buffer.data !== data || scratch_buffer.capacity !== data.byteLength) {
207
+ // Bound afresh only for a buffer it is not bound to already: binding makes a DataView and a
208
+ // Uint8Array, and a command context's uniforms arrive one after another into the same
209
+ // upload block. The length is compared as well, so a buffer the scratch grew away from, or
210
+ // one detached since, is bound anew rather than written through stale views.
211
+ scratch_buffer.fromArrayBuffer(data);
212
+ }
213
+
207
214
  scratch_buffer.position = byteOffset;
208
215
 
209
216
  assert.equal(scratch_buffer.data, data, 'scratch_buffer.buffer !== data'); // sanity check