@woosh/meep-engine 3.16.0 → 3.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +8 -72
  2. package/editor/particles/effect/ParticleEffectDocument.d.ts +21 -6
  3. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
  4. package/editor/particles/effect/ParticleEffectDocument.js +38 -17
  5. package/editor/view/node-graph/NodeGraphClipboard.d.ts +186 -0
  6. package/editor/view/node-graph/NodeGraphClipboard.d.ts.map +1 -0
  7. package/editor/view/node-graph/NodeGraphClipboard.js +231 -0
  8. package/editor/view/node-graph/NodeGraphEditorView.d.ts +59 -1
  9. package/editor/view/node-graph/NodeGraphEditorView.d.ts.map +1 -1
  10. package/editor/view/node-graph/NodeGraphEditorView.js +248 -5
  11. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  12. package/editor/view/node-graph/NodeGraphView.js +84 -8
  13. package/editor/view/node-graph/actions/connection_bind_actions.d.ts +23 -0
  14. package/editor/view/node-graph/actions/connection_bind_actions.d.ts.map +1 -0
  15. package/editor/view/node-graph/actions/connection_bind_actions.js +39 -0
  16. package/editor/view/particles/effect/ParticleCodeEditorView.d.ts.map +1 -1
  17. package/editor/view/particles/effect/ParticleCodeEditorView.js +4 -3
  18. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts +20 -0
  19. package/editor/view/particles/effect/ParticleCurveEditorView.d.ts.map +1 -0
  20. package/editor/view/particles/effect/ParticleCurveEditorView.js +574 -0
  21. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
  22. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +27 -1
  23. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts +24 -0
  24. package/editor/view/particles/effect/ParticleGradientEditorView.d.ts.map +1 -0
  25. package/editor/view/particles/effect/ParticleGradientEditorView.js +472 -0
  26. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts +5 -0
  27. package/editor/view/particles/effect/ParticleGraphEditorView.d.ts.map +1 -1
  28. package/editor/view/particles/effect/ParticleGraphEditorView.js +61 -31
  29. package/editor/view/particles/effect/ParticleNodeParametersView.d.ts.map +1 -1
  30. package/editor/view/particles/effect/ParticleNodeParametersView.js +33 -0
  31. package/editor/view/particles/effect/particle-editor.css +123 -35
  32. package/package.json +1 -1
  33. package/src/core/binary/allocator/OffsetAllocator.d.ts +25 -16
  34. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  35. package/src/core/binary/allocator/OffsetAllocator.js +10 -1
  36. package/src/core/collection/array/typed/float32_array_hash.d.ts +21 -0
  37. package/src/core/collection/array/typed/float32_array_hash.d.ts.map +1 -0
  38. package/src/core/collection/array/typed/float32_array_hash.js +38 -0
  39. package/src/core/graph/csr/CSRGraph.d.ts +8 -1
  40. package/src/core/graph/csr/CSRGraph.d.ts.map +1 -1
  41. package/src/core/graph/csr/CSRGraph.js +14 -6
  42. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts +24 -0
  43. package/src/core/model/node-graph/visual/layout/LayoutProblem.d.ts.map +1 -1
  44. package/src/core/model/node-graph/visual/layout/LayoutProblem.js +27 -0
  45. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts +26 -0
  46. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.d.ts.map +1 -1
  47. package/src/core/model/node-graph/visual/layout/NodeGraphLayoutOptions.js +28 -0
  48. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts +92 -3
  49. package/src/core/model/node-graph/visual/layout/RouteGrid.d.ts.map +1 -1
  50. package/src/core/model/node-graph/visual/layout/RouteGrid.js +405 -242
  51. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts +50 -5
  52. package/src/core/model/node-graph/visual/layout/RouteSearch.d.ts.map +1 -1
  53. package/src/core/model/node-graph/visual/layout/RouteSearch.js +160 -24
  54. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts +7 -0
  55. package/src/core/model/node-graph/visual/layout/RouteSet.d.ts.map +1 -1
  56. package/src/core/model/node-graph/visual/layout/RouteSet.js +8 -0
  57. package/src/core/model/node-graph/visual/layout/layout_assign_coordinates.js +9 -3
  58. package/src/core/model/node-graph/visual/layout/layout_build_problem.d.ts.map +1 -1
  59. package/src/core/model/node-graph/visual/layout/layout_build_problem.js +7 -0
  60. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts +9 -3
  61. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.d.ts.map +1 -1
  62. package/src/core/model/node-graph/visual/layout/layout_insert_lanes.js +17 -3
  63. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts +9 -6
  64. package/src/core/model/node-graph/visual/layout/layout_node_graph.d.ts.map +1 -1
  65. package/src/core/model/node-graph/visual/layout/layout_node_graph.js +49 -7
  66. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts +11 -1
  67. package/src/core/model/node-graph/visual/layout/layout_order_layers.d.ts.map +1 -1
  68. package/src/core/model/node-graph/visual/layout/layout_order_layers.js +135 -16
  69. package/src/core/model/node-graph/visual/layout/route_connections.d.ts +29 -0
  70. package/src/core/model/node-graph/visual/layout/route_connections.d.ts.map +1 -1
  71. package/src/core/model/node-graph/visual/layout/route_connections.js +716 -309
  72. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts +3 -2
  73. package/src/core/model/node-graph/visual/layout/route_grid_build.d.ts.map +1 -1
  74. package/src/core/model/node-graph/visual/layout/route_grid_build.js +7 -15
  75. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts +6 -0
  76. package/src/core/model/node-graph/visual/layout/route_nudge.d.ts.map +1 -1
  77. package/src/core/model/node-graph/visual/layout/route_nudge.js +42 -13
  78. package/src/engine/animation/AnimationUtils.js +246 -246
  79. package/src/engine/animation/Animations.js +74 -74
  80. package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +2078 -2078
  81. package/src/engine/ecs/EventType.d.ts +0 -1
  82. package/src/engine/ecs/EventType.js +1 -26
  83. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts +1 -1
  84. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
  85. package/src/engine/ecs/ik/ik_write_local_rotation.js +3 -7
  86. package/src/engine/ecs/parent/EntityNode.d.ts.map +1 -1
  87. package/src/engine/ecs/parent/EntityNode.js +4 -9
  88. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  89. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +360 -364
  90. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts +41 -0
  91. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.d.ts.map +1 -0
  92. package/src/engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js +40 -0
  93. package/src/engine/ecs/transform/TRANSFORM64_MIGRATION_PLAN_2026_09_04.md +8 -0
  94. package/src/engine/ecs/transform/t64_announce_change.d.ts +10 -7
  95. package/src/engine/ecs/transform/t64_announce_change.d.ts.map +1 -1
  96. package/src/engine/ecs/transform/t64_announce_change.js +12 -12
  97. package/src/engine/ecs/transform/t64_set_rotation_axis_angle.d.ts +25 -0
  98. package/src/engine/ecs/transform/t64_set_rotation_axis_angle.d.ts.map +1 -0
  99. package/src/engine/ecs/transform/t64_set_rotation_axis_angle.js +45 -0
  100. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts +30 -0
  101. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.d.ts.map +1 -0
  102. package/src/engine/ecs/transform-attachment/TRANSFORM_ATTACHMENT_EVENT_CHANGE.js +29 -0
  103. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  104. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +13 -21
  105. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +1 -1
  106. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +4 -8
  107. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  108. package/src/engine/graphics3/LightSystem.js +4 -8
  109. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  110. package/src/engine/graphics3/MeshSystem.js +9 -19
  111. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -1
  112. package/src/engine/graphics3/ParticleEmitterSystem.js +4 -8
  113. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  114. package/src/engine/graphics3/ShadedGeometrySystem.js +4 -10
  115. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts +1 -1
  116. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.d.ts.map +1 -1
  117. package/src/engine/grid/transform2grid/Transform2GridPositionSystem.js +4 -8
  118. package/src/engine/intelligence/behavior/ecs/OrbitingBehavior.js +218 -218
  119. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  120. package/src/engine/physics/ecs/PhysicsSystem.js +2 -5
  121. package/src/engine/sound/ecs/SoundListenerSystem.d.ts.map +1 -1
  122. package/src/engine/sound/ecs/SoundListenerSystem.js +6 -8
  123. package/src/engine/sound/simulation/AcousticSimulator.d.ts +11 -8
  124. package/src/engine/sound/simulation/AcousticSimulator.d.ts.map +1 -1
  125. package/src/engine/sound/simulation/AcousticSimulator.js +45 -36
  126. package/src/engine/sound/simulation/README.md +2 -2
  127. package/src/engine/sound/simulation/core/OcclusionSolver.d.ts.map +1 -1
  128. package/src/engine/sound/simulation/core/VolumeField.d.ts +9 -9
  129. package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
  130. package/src/engine/sound/simulation/core/VolumeField.js +29 -13
  131. package/src/engine/sound/simulation/core/acoustic_occlusion_solve.d.ts +31 -0
  132. package/src/engine/sound/simulation/core/acoustic_occlusion_solve.d.ts.map +1 -0
  133. package/src/engine/sound/simulation/core/acoustic_occlusion_solve.js +134 -0
  134. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts +0 -4
  135. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.d.ts.map +1 -1
  136. package/src/engine/sound/simulation/ecs/AcousticSimulationSystem.js +5 -11
  137. package/src/shade/playground/particle_editor/README.md +43 -2
  138. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  139. package/src/shade/playground/particle_system/particle_prototype.js +4 -5
  140. package/src/shade/playground/particle_system/particle_scene.js +4 -4
  141. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  142. package/src/shade/playground/volumetrics_froxel/main.js +6 -1
  143. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  144. package/src/shade/renderer/Renderer.js +13 -1
  145. package/src/shade/renderer/particles/DESIGN.md +104 -19
  146. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +64 -50
  147. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/GPUParticleSystem.js +176 -78
  149. package/src/shade/renderer/particles/ParticleConstants.d.ts +59 -23
  150. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  151. package/src/shade/renderer/particles/ParticleConstants.js +66 -23
  152. package/src/shade/renderer/particles/ParticleRenderMode.d.ts +19 -0
  153. package/src/shade/renderer/particles/ParticleRenderMode.d.ts.map +1 -0
  154. package/src/shade/renderer/particles/ParticleRenderMode.js +33 -0
  155. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  156. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +167 -166
  157. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts +37 -0
  158. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -0
  159. package/src/shade/renderer/particles/data/particle_emitter_record.js +109 -0
  160. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.d.ts +3 -3
  161. package/src/shade/renderer/particles/graph/ParticleGroupBuilder.js +303 -303
  162. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts +18 -0
  163. package/src/shade/renderer/particles/graph/ParticleNodeDescription.d.ts.map +1 -1
  164. package/src/shade/renderer/particles/graph/ParticleNodeDescription.js +152 -133
  165. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts +0 -11
  166. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.d.ts.map +1 -1
  167. package/src/shade/renderer/particles/graph/ParticleNodeRegistry.js +720 -621
  168. package/src/shade/renderer/particles/graph/compile_particle_graph.d.ts.map +1 -1
  169. package/src/shade/renderer/particles/graph/compile_particle_graph.js +8 -3
  170. package/src/shade/renderer/particles/graph/flatten_particle_graph.d.ts.map +1 -1
  171. package/src/shade/renderer/particles/graph/flatten_particle_graph.js +244 -213
  172. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
  173. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +6 -0
  174. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
  175. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +294 -319
  176. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.d.ts.map +1 -1
  177. package/src/shade/renderer/particles/graph/groups/particle_groups_noise.js +524 -517
  178. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts +22 -0
  179. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.d.ts.map +1 -0
  180. package/src/shade/renderer/particles/graph/groups/particle_groups_psrdnoise.js +517 -0
  181. package/src/shade/renderer/particles/graph/groups/simplex_reference.d.ts.map +1 -1
  182. package/src/shade/renderer/particles/graph/groups/simplex_reference.js +185 -159
  183. package/src/shade/renderer/particles/graph/make_particle_group.d.ts.map +1 -1
  184. package/src/shade/renderer/particles/graph/make_particle_group.js +2 -20
  185. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts +17 -0
  186. package/src/shade/renderer/particles/graph/particle_compare_ops.d.ts.map +1 -0
  187. package/src/shade/renderer/particles/graph/particle_compare_ops.js +22 -0
  188. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts +28 -8
  189. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.d.ts.map +1 -1
  190. package/src/shade/renderer/particles/graph/particle_graph_diagnostic.js +49 -25
  191. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts +40 -0
  192. package/src/shade/renderer/particles/graph/particle_node_parameters.d.ts.map +1 -1
  193. package/src/shade/renderer/particles/graph/particle_node_parameters.js +312 -234
  194. package/src/shade/renderer/particles/graph/particle_node_presentation.d.ts.map +1 -1
  195. package/src/shade/renderer/particles/graph/particle_node_presentation.js +59 -3
  196. package/src/shade/renderer/particles/graph/particle_ramp.d.ts +230 -0
  197. package/src/shade/renderer/particles/graph/particle_ramp.d.ts.map +1 -0
  198. package/src/shade/renderer/particles/graph/particle_ramp.js +403 -0
  199. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts +7 -1
  200. package/src/shade/renderer/particles/graph/validate_particle_graph.d.ts.map +1 -1
  201. package/src/shade/renderer/particles/graph/validate_particle_graph.js +66 -10
  202. package/src/shade/renderer/particles/graph_particles.d.ts +23 -69
  203. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  204. package/src/shade/renderer/particles/graph_particles.js +105 -262
  205. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  206. package/src/shade/renderer/particles/graph_particles_avboit.js +3 -2
  207. package/src/shade/renderer/particles/graph_particles_billboard.d.ts +37 -0
  208. package/src/shade/renderer/particles/graph_particles_billboard.d.ts.map +1 -0
  209. package/src/shade/renderer/particles/graph_particles_billboard.js +93 -0
  210. package/src/shade/renderer/particles/isa/InstructionStream.d.ts +51 -22
  211. package/src/shade/renderer/particles/isa/InstructionStream.d.ts.map +1 -1
  212. package/src/shade/renderer/particles/isa/InstructionStream.js +98 -38
  213. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts +49 -8
  214. package/src/shade/renderer/particles/isa/ParticleProgram.d.ts.map +1 -1
  215. package/src/shade/renderer/particles/isa/ParticleProgram.js +95 -150
  216. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts +306 -64
  217. package/src/shade/renderer/particles/isa/ParticleVMISA.d.ts.map +1 -1
  218. package/src/shade/renderer/particles/isa/ParticleVMISA.js +505 -136
  219. package/src/shade/renderer/particles/isa/particle_assembly.d.ts +36 -12
  220. package/src/shade/renderer/particles/isa/particle_assembly.d.ts.map +1 -1
  221. package/src/shade/renderer/particles/isa/particle_assembly.js +354 -139
  222. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts +9 -0
  223. package/src/shade/renderer/particles/isa/validate_particle_program.d.ts.map +1 -0
  224. package/src/shade/renderer/particles/isa/validate_particle_program.js +128 -0
  225. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts +23 -0
  226. package/src/shade/renderer/particles/layout/ParticleLayout.d.ts.map +1 -1
  227. package/src/shade/renderer/particles/layout/ParticleLayout.js +68 -0
  228. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts +77 -0
  229. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.d.ts.map +1 -0
  230. package/src/shade/renderer/particles/optimizer/dag/optimize_particle_program_vector.js +219 -0
  231. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts +83 -0
  232. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.d.ts.map +1 -0
  233. package/src/shade/renderer/particles/optimizer/dag/particle_vector_extract.js +283 -0
  234. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts +133 -0
  235. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.d.ts.map +1 -0
  236. package/src/shade/renderer/particles/optimizer/dag/particle_vector_graph.js +334 -0
  237. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts +117 -0
  238. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.d.ts.map +1 -0
  239. package/src/shade/renderer/particles/optimizer/dag/particle_vector_groups.js +70 -0
  240. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts +97 -0
  241. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.d.ts.map +1 -0
  242. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lift.js +462 -0
  243. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts +116 -0
  244. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.d.ts.map +1 -0
  245. package/src/shade/renderer/particles/optimizer/dag/particle_vector_lower.js +687 -0
  246. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts +57 -0
  247. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.d.ts.map +1 -0
  248. package/src/shade/renderer/particles/optimizer/dag/particle_vector_pack.js +860 -0
  249. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts +115 -0
  250. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.d.ts.map +1 -0
  251. package/src/shade/renderer/particles/optimizer/dag/particle_vector_rules.js +264 -0
  252. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts +81 -42
  253. package/src/shade/renderer/particles/optimizer/optimize_particle_program.d.ts.map +1 -1
  254. package/src/shade/renderer/particles/optimizer/optimize_particle_program.js +477 -478
  255. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts +100 -0
  256. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.d.ts.map +1 -0
  257. package/src/shade/renderer/particles/optimizer/particle_integer_bounds.js +236 -0
  258. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts +139 -59
  259. package/src/shade/renderer/particles/optimizer/particle_program_analysis.d.ts.map +1 -1
  260. package/src/shade/renderer/particles/optimizer/particle_program_analysis.js +764 -647
  261. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts +40 -7
  262. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.d.ts.map +1 -1
  263. package/src/shade/renderer/particles/optimizer/particle_program_equivalence.js +376 -213
  264. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts +30 -3
  265. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.d.ts.map +1 -1
  266. package/src/shade/renderer/particles/optimizer/particle_program_fuzz.js +337 -223
  267. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts +24 -38
  268. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.d.ts.map +1 -1
  269. package/src/shade/renderer/particles/optimizer/particle_vm_semantics.js +166 -206
  270. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts +99 -0
  271. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.d.ts.map +1 -0
  272. package/src/shade/renderer/particles/optimizer/pass_allocate_registers.js +313 -0
  273. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts +3 -2
  274. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.d.ts.map +1 -1
  275. package/src/shade/renderer/particles/optimizer/pass_dedup_constants.js +198 -197
  276. package/src/shade/renderer/particles/optimizer/pass_eliminate_dead_code.d.ts.map +1 -1
  277. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts +19 -0
  278. package/src/shade/renderer/particles/optimizer/pass_fold_constants.d.ts.map +1 -1
  279. package/src/shade/renderer/particles/optimizer/pass_fold_constants.js +678 -561
  280. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts +22 -0
  281. package/src/shade/renderer/particles/optimizer/pass_inline_constants.d.ts.map +1 -0
  282. package/src/shade/renderer/particles/optimizer/pass_inline_constants.js +221 -0
  283. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.d.ts.map +1 -1
  284. package/src/shade/renderer/particles/optimizer/pass_narrow_widths.js +63 -72
  285. package/src/shade/renderer/particles/optimizer/pass_pack_registers.d.ts.map +1 -1
  286. package/src/shade/renderer/particles/optimizer/pass_pack_registers.js +87 -86
  287. package/src/shade/renderer/particles/optimizer/pass_peephole.d.ts.map +1 -1
  288. package/src/shade/renderer/particles/optimizer/pass_peephole.js +392 -271
  289. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.d.ts.map +1 -1
  290. package/src/shade/renderer/particles/optimizer/pass_propagate_copies.js +361 -268
  291. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts +4 -0
  292. package/src/shade/renderer/particles/optimizer/pass_schedule.d.ts.map +1 -0
  293. package/src/shade/renderer/particles/optimizer/pass_schedule.js +244 -0
  294. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.d.ts.map +1 -1
  295. package/src/shade/renderer/particles/optimizer/pass_share_subexpressions.js +154 -151
  296. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +20 -0
  297. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +1 -1
  298. package/src/shade/renderer/particles/particle_test_fixtures.js +229 -203
  299. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +99 -25
  300. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  301. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +438 -286
  302. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +109 -0
  303. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -0
  304. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +127 -0
  305. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +87 -102
  306. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  307. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +184 -163
  308. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts +130 -0
  309. package/src/shade/renderer/particles/runtime/ProgramHeap.d.ts.map +1 -0
  310. package/src/shade/renderer/particles/runtime/ProgramHeap.js +595 -0
  311. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts +91 -0
  312. package/src/shade/renderer/particles/runtime/ProgramPlacement.d.ts.map +1 -0
  313. package/src/shade/renderer/particles/runtime/ProgramPlacement.js +106 -0
  314. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts +5 -2
  315. package/src/shade/renderer/particles/runtime/create_particle_effect.d.ts.map +1 -1
  316. package/src/shade/renderer/particles/runtime/create_particle_effect.js +22 -19
  317. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts +28 -0
  318. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.d.ts.map +1 -0
  319. package/src/shade/renderer/particles/shaders/chunk_particle_emit_step.js +136 -0
  320. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts +35 -0
  321. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.d.ts.map +1 -0
  322. package/src/shade/renderer/particles/shaders/chunk_particle_simulate_step.js +133 -0
  323. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts +18 -9
  324. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  325. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +20 -80
  326. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts +33 -0
  327. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.d.ts.map +1 -0
  328. package/src/shade/renderer/particles/shaders/shader_particle_emit_wide.js +114 -0
  329. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts +8 -0
  330. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  331. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +33 -101
  332. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts +45 -0
  333. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.d.ts.map +1 -0
  334. package/src/shade/renderer/particles/shaders/shader_particle_simulate_wide.js +123 -0
  335. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts +51 -0
  336. package/src/shade/renderer/particles/sort/graph_particle_sort.d.ts.map +1 -0
  337. package/src/shade/renderer/particles/sort/graph_particle_sort.js +120 -0
  338. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts +6 -0
  339. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.d.ts.map +1 -0
  340. package/src/shade/renderer/particles/vm/PARTICLE_VM_CONTEXT_STRUCT.js +16 -0
  341. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts +4 -1
  342. package/src/shade/renderer/particles/vm/ParticleVMReference.d.ts.map +1 -1
  343. package/src/shade/renderer/particles/vm/ParticleVMReference.js +261 -140
  344. package/src/shade/renderer/particles/vm/chunk_particle_vm.d.ts.map +1 -1
  345. package/src/shade/renderer/particles/vm/chunk_particle_vm.js +217 -255
  346. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts +43 -0
  347. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.d.ts.map +1 -0
  348. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_fast.js +55 -0
  349. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts +62 -0
  350. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.d.ts.map +1 -0
  351. package/src/shade/renderer/particles/vm/chunk_particle_vm_registers_wide.js +86 -0
  352. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts +22 -0
  353. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.d.ts.map +1 -0
  354. package/src/shade/renderer/shader/chunk/math/chunk_mod_v3f.js +32 -0
  355. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts +9 -0
  356. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.d.ts.map +1 -0
  357. package/src/shade/renderer/shader/chunk/math/chunk_mod_v4f.js +19 -0
  358. package/src/shade/renderer/shader/chunk/noise/psrdnoise/README.md +65 -0
  359. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts +24 -0
  360. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.d.ts.map +1 -0
  361. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2.js +83 -0
  362. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts +25 -0
  363. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.d.ts.map +1 -0
  364. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_hash.js +42 -0
  365. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts +31 -0
  366. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.d.ts.map +1 -0
  367. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise2_kernel.js +80 -0
  368. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts +26 -0
  369. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.d.ts.map +1 -0
  370. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3.js +109 -0
  371. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts +38 -0
  372. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.d.ts.map +1 -0
  373. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_kernel.js +129 -0
  374. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts +21 -0
  375. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.d.ts.map +1 -0
  376. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_permute.js +35 -0
  377. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts +19 -0
  378. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.d.ts.map +1 -0
  379. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_skew.js +28 -0
  380. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts +13 -0
  381. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.d.ts.map +1 -0
  382. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_psrdnoise3_unskew.js +22 -0
  383. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts +22 -0
  384. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.d.ts.map +1 -0
  385. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise2.js +59 -0
  386. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts +23 -0
  387. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.d.ts.map +1 -0
  388. package/src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.js +74 -0
  389. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +7 -0
  390. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
  391. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +7 -0
  392. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts +34 -1
  393. package/src/shade/wgsl/emulator/ComputeShaderEmulator.d.ts.map +1 -1
  394. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +41 -1
  395. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +3 -2
  396. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  397. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +49 -10
  398. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  399. package/src/view/minimap/dom/MinimapCameraView.js +4 -9
  400. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts +0 -15
  401. package/src/core/model/node-graph/visual/layout/BoxLayoutSpec.d.ts.map +0 -1
  402. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts +0 -45
  403. package/src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.d.ts.map +0 -1
  404. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts +0 -24
  405. package/src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.d.ts.map +0 -1
  406. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts +0 -19
  407. package/src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.d.ts.map +0 -1
  408. package/src/engine/ecs/transform/__probe.d.ts +0 -4
  409. package/src/engine/ecs/transform/__probe.d.ts.map +0 -1
  410. package/src/engine/ecs/util/hideEntityGracefully.d.ts +0 -9
  411. package/src/engine/ecs/util/hideEntityGracefully.d.ts.map +0 -1
  412. package/src/engine/sound/simulation/core/OcclusionSolver.js +0 -112
  413. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts +0 -27
  414. package/src/shade/renderer/buffer/table/gpu_database_emulator_image.d.ts.map +0 -1
  415. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts +0 -14
  416. package/src/shade/renderer/particles/cull/chunk_particle_cull.d.ts.map +0 -1
  417. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts +0 -156
  418. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_LAYOUT.d.ts.map +0 -1
  419. package/src/shade/renderer/particles/runtime/Emitter.d.ts +0 -219
  420. package/src/shade/renderer/particles/runtime/Emitter.d.ts.map +0 -1
  421. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts +0 -77
  422. package/src/shade/renderer/particles/runtime/ParticleSpawnScheduler.d.ts.map +0 -1
  423. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts +0 -89
  424. package/src/shade/renderer/particles/runtime/ProgramArena.d.ts.map +0 -1
  425. package/src/shade/renderer/particles/runtime/ProgramArena.js +0 -155
  426. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts +0 -15
  427. package/src/shade/renderer/particles/runtime/emitter_database_image.d.ts.map +0 -1
  428. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts +0 -34
  429. package/src/shade/renderer/particles/runtime/spawn_request_encoding.d.ts.map +0 -1
  430. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts +0 -32
  431. package/src/shade/renderer/particles/shaders/chunk_particle_context.d.ts.map +0 -1
@@ -0,0 +1,23 @@
1
+ /**
2
+ * 3-D simplex noise with rotating gradients and an analytic derivative — `psrdnoise` without the
3
+ * `p`, for fields that never need to tile.
4
+ *
5
+ * Returns `vec4(noise, gradient.xyz)`: the noise value is in `.x`, in `[-1, 1]`, and `.yzw` is its
6
+ * exact gradient. Ask for only `.x` and the compiler drops the derivative.
7
+ *
8
+ * `alpha` turns every gradient in the field by that many radians about a per-corner pseudo-random
9
+ * axis. Animating it swirls the field in place, which with the gradient is what curl noise wants —
10
+ * see {@link chunk_psrdnoise3_kernel}.
11
+ *
12
+ * This is {@link chunk_psrdnoise3} with the wrap deleted, not a call into it with a zero period: it
13
+ * exists so a caller whose period is a runtime value it never sets does not pay for the branch and
14
+ * the modulo. It still repeats every 289 cells — that is the hash's modulus, not a choice — so it
15
+ * is "non-periodic" only in the sense that it does not tile to a period you name.
16
+ *
17
+ * psrdnoise (c) 2021 Stefan Gustavson and Ian McEwan. Published under the MIT license.
18
+ * @see https://github.com/stegu/psrdnoise/
19
+ * @type {CodeChunk}
20
+ */
21
+ export const chunk_srdnoise3: CodeChunk;
22
+ import { CodeChunk } from "../../../compiler/CodeChunk.js";
23
+ //# sourceMappingURL=chunk_srdnoise3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_srdnoise3.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/noise/psrdnoise/chunk_srdnoise3.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,8BAFU,SAAS,CAkDjB;0BAzEwB,gCAAgC"}
@@ -0,0 +1,74 @@
1
+ import { CodeChunk } from "../../../compiler/CodeChunk.js";
2
+ import { chunk_psrdnoise3_kernel } from "./chunk_psrdnoise3_kernel.js";
3
+ import { chunk_psrdnoise3_skew } from "./chunk_psrdnoise3_skew.js";
4
+ import { chunk_psrdnoise3_unskew } from "./chunk_psrdnoise3_unskew.js";
5
+
6
+ /**
7
+ * 3-D simplex noise with rotating gradients and an analytic derivative — `psrdnoise` without the
8
+ * `p`, for fields that never need to tile.
9
+ *
10
+ * Returns `vec4(noise, gradient.xyz)`: the noise value is in `.x`, in `[-1, 1]`, and `.yzw` is its
11
+ * exact gradient. Ask for only `.x` and the compiler drops the derivative.
12
+ *
13
+ * `alpha` turns every gradient in the field by that many radians about a per-corner pseudo-random
14
+ * axis. Animating it swirls the field in place, which with the gradient is what curl noise wants —
15
+ * see {@link chunk_psrdnoise3_kernel}.
16
+ *
17
+ * This is {@link chunk_psrdnoise3} with the wrap deleted, not a call into it with a zero period: it
18
+ * exists so a caller whose period is a runtime value it never sets does not pay for the branch and
19
+ * the modulo. It still repeats every 289 cells — that is the hash's modulus, not a choice — so it
20
+ * is "non-periodic" only in the sense that it does not tile to a period you name.
21
+ *
22
+ * psrdnoise (c) 2021 Stefan Gustavson and Ian McEwan. Published under the MIT license.
23
+ * @see https://github.com/stegu/psrdnoise/
24
+ * @type {CodeChunk}
25
+ */
26
+ export const chunk_srdnoise3 = CodeChunk.from(
27
+ //language=WGSL
28
+ `
29
+ fn srdnoise3(
30
+ x: vec3<f32>,
31
+ alpha: f32
32
+ ) -> vec4<f32> {
33
+ let uvw = psrdnoise3_skew(x);
34
+
35
+ // which simplex we are in. i0 is the base corner of the skewed cube; o1 and o2 step to the
36
+ // second and third corners, found by rank-ordering u, v, w — the descending order of the
37
+ // fractional coordinates is exactly the order the tetrahedron's corners are traversed in
38
+ let i0 = floor(uvw);
39
+ let f0 = uvw - i0;
40
+
41
+ let gt_ = step(f0.xyx, f0.yzz);
42
+ let lt_ = 1.0 - gt_;
43
+ let gt = vec3<f32>(lt_.z, gt_.xy);
44
+ let lt = vec3<f32>(lt_.xy, gt_.z);
45
+ let o1 = min(gt, lt);
46
+ let o2 = max(gt, lt);
47
+
48
+ let i1 = i0 + o1;
49
+ let i2 = i0 + o2;
50
+ let i3 = i0 + vec3<f32>(1.0);
51
+
52
+ // the four corners back in texture space
53
+ let v0 = psrdnoise3_unskew(i0);
54
+ let v1 = psrdnoise3_unskew(i1);
55
+ let v2 = psrdnoise3_unskew(i2);
56
+ let v3 = psrdnoise3_unskew(i3);
57
+
58
+ return psrdnoise3_kernel(
59
+ vec4<f32>(i0.x, i1.x, i2.x, i3.x),
60
+ vec4<f32>(i0.y, i1.y, i2.y, i3.y),
61
+ vec4<f32>(i0.z, i1.z, i2.z, i3.z),
62
+ x - v0,
63
+ x - v1,
64
+ x - v2,
65
+ x - v3,
66
+ alpha
67
+ );
68
+ }
69
+ `, [
70
+ chunk_psrdnoise3_kernel,
71
+ chunk_psrdnoise3_skew,
72
+ chunk_psrdnoise3_unskew,
73
+ ]
74
+ );
@@ -98,6 +98,13 @@ export class ParticipatingMediaVolume {
98
98
  /**
99
99
  * Defines actual scale, orientation and world position of the volume.
100
100
  * The base size of the volume is 1, centered at 0,0,0
101
+ *
102
+ * What reaches the GPU is the *matrix*, and its inverse - `GPUSceneVolumetrics` reads nothing
103
+ * else. A `Transform64` does not maintain one, so a volume posed by writing components owes an
104
+ * {@link Transform64#updateMatrix} before it is drawn; one posed by writing the matrix, as
105
+ * `ParticipatingMediaSystem` does through `fromMatrix`, owes nothing. Skip it and the volume is
106
+ * a unit cube at the right place, which reads as a volume that is simply not there.
107
+ *
101
108
  * @type {Transform64}
102
109
  */
103
110
  transform: Transform64;
@@ -1 +1 @@
1
- {"version":3,"file":"ParticipatingMediaVolume.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/ParticipatingMediaVolume.js"],"names":[],"mappings":"AAKA;IA6EI;;;;OAIG;IACH,+BAHW;QAAC,wBAAwB,CAAC;QAAC,wBAAwB,CAAC;QAAC,MAAM,CAAC;QAAC,CAAC,CAAA;KAAC,GAC9D,uBAAuB,CAalC;IAED,oDAIC;IAlGD;;;OAGG;IACH,YAFU,MAAM,EAAE,CAEK;IAEvB;;;OAGG;IACH,YAFU,MAAM,EAAE,CAEK;IAEvB;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX,UAAQ;IAER,iCAIC;IAED;;;OAGG;IACH,YAFW,uBAAuB,QAOjC;IAED;;;;;aA0BC;IAED;;;OAGG;IACH,cAHW,uBAAuB,GACrB,OAAO,CAOnB;CAyBJ;AAED,6EAKI;AAIJ;IAII,iBAEC;IAED;;;OAGG;IACH,aAFU,MAAM,EAAE,CAEM;IACxB,0BAA4B;IAC5B,uBAAyB;IAEzB;;;OAGG;IACH,gBAFU,MAAM,EAAE,CAES;IAE3B;;;OAGG;IACH,uBAFU,MAAM,EAAE,CAEgB;IAElC;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,gBAAc;IAEd;;;;;;;;;OASG;IACH,mCAEC;IAED,uCAA+E;IAE/E;;;;;;OAMG;IACH,eAFU,MAAM,CAEI;IAEpB;;;;OAIG;IACH,WAFU,WAAW,CAES;;CAEjC;4BAzL2B,8CAA8C"}
1
+ {"version":3,"file":"ParticipatingMediaVolume.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/ParticipatingMediaVolume.js"],"names":[],"mappings":"AAKA;IA6EI;;;;OAIG;IACH,+BAHW;QAAC,wBAAwB,CAAC;QAAC,wBAAwB,CAAC;QAAC,MAAM,CAAC;QAAC,CAAC,CAAA;KAAC,GAC9D,uBAAuB,CAalC;IAED,oDAIC;IAlGD;;;OAGG;IACH,YAFU,MAAM,EAAE,CAEK;IAEvB;;;OAGG;IACH,YAFU,MAAM,EAAE,CAEK;IAEvB;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX,UAAQ;IAER,iCAIC;IAED;;;OAGG;IACH,YAFW,uBAAuB,QAOjC;IAED;;;;;aA0BC;IAED;;;OAGG;IACH,cAHW,uBAAuB,GACrB,OAAO,CAOnB;CAyBJ;AAED,6EAKI;AAIJ;IAII,iBAEC;IAED;;;OAGG;IACH,aAFU,MAAM,EAAE,CAEM;IACxB,0BAA4B;IAC5B,uBAAyB;IAEzB;;;OAGG;IACH,gBAFU,MAAM,EAAE,CAES;IAE3B;;;OAGG;IACH,uBAFU,MAAM,EAAE,CAEgB;IAElC;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,gBAAc;IAEd;;;;;;;;;OASG;IACH,mCAEC;IAED,uCAA+E;IAE/E;;;;;;OAMG;IACH,eAFU,MAAM,CAEI;IAEpB;;;;;;;;;;;OAWG;IACH,WAFU,WAAW,CAES;;CAEjC;4BAhM2B,8CAA8C"}
@@ -182,6 +182,13 @@ export class ParticipatingMediaVolume {
182
182
  /**
183
183
  * Defines actual scale, orientation and world position of the volume.
184
184
  * The base size of the volume is 1, centered at 0,0,0
185
+ *
186
+ * What reaches the GPU is the *matrix*, and its inverse - `GPUSceneVolumetrics` reads nothing
187
+ * else. A `Transform64` does not maintain one, so a volume posed by writing components owes an
188
+ * {@link Transform64#updateMatrix} before it is drawn; one posed by writing the matrix, as
189
+ * `ParticipatingMediaSystem` does through `fromMatrix`, owes nothing. Skip it and the volume is
190
+ * a unit cube at the right place, which reads as a volume that is simply not there.
191
+ *
185
192
  * @type {Transform64}
186
193
  */
187
194
  transform = new Transform64();
@@ -16,6 +16,11 @@
16
16
  * emu.dispatch([0, 0, 0]); // global_invocation_id = (0,0,0)
17
17
  * emu.dispatch([1, 0, 0]); // global_invocation_id = (1,0,0)
18
18
  * // ... bindings now contain results
19
+ *
20
+ * Each dispatch is a fresh invocation: `var<private>` variables go back to their declared
21
+ * initializers first, as they do on the GPU. `var<workgroup>` variables do not — they belong to
22
+ * the workgroup, so lanes dispatched in sequence share them until {@link
23
+ * ComputeShaderEmulator#resetWorkgroup} is called.
19
24
  */
20
25
  export class ComputeShaderEmulator {
21
26
  /**
@@ -74,7 +79,9 @@ export class ComputeShaderEmulator {
74
79
  /**
75
80
  * Compile a {@link CodeChunk} (or a raw WGSL string) into a "library" object — every
76
81
  * top-level WGSL function becomes a method, every `var<private>` becomes a getter/setter
77
- * property, and every module-scope `const` becomes a read-only getter.
82
+ * property, and every module-scope `const` becomes a read-only getter. `reset_private()`
83
+ * puts the private variables back to their initial values; there is no dispatch here to do
84
+ * it for you, so call it between cases that must not see each other's state.
78
85
  *
79
86
  * No `@compute` entry is required. This is the one-line escape hatch for unit-testing pure
80
87
  * helper code (RNGs, hashes, packing, math) without wrapping each chunk in a shader skeleton.
@@ -116,6 +123,17 @@ export class ComputeShaderEmulator {
116
123
  * @type {object}
117
124
  */
118
125
  bindings: object;
126
+ /**
127
+ * Whether {@link dispatch} starts each thread with the module's `var<private>` variables
128
+ * back at their start-of-invocation values. On by default, because that is what a GPU
129
+ * invocation gets — see {@link resetPrivate}.
130
+ *
131
+ * Turn it off to simulate something the hardware cannot, such as watching a private RNG
132
+ * advance across a run of dispatches.
133
+ *
134
+ * @type {boolean}
135
+ */
136
+ resetPrivateOnDispatch: boolean;
119
137
  /**
120
138
  * @returns {string} the WGSL source.
121
139
  */
@@ -153,6 +171,21 @@ export class ComputeShaderEmulator {
153
171
  * variables start fresh. No-op for fragment-stage entries.
154
172
  */
155
173
  resetWorkgroup(): void;
174
+ /**
175
+ * Return every module-scope `var<private>` to the value it has at the start of a WGSL
176
+ * invocation — its declared initializer, or zero when it was declared without one.
177
+ *
178
+ * {@link dispatch} calls this for you, because that is what the GPU does: private variables
179
+ * are per-invocation, and one invocation never sees what another left in them. Set
180
+ * {@link resetPrivateOnDispatch} to `false` for the rare simulation that wants a run of
181
+ * dispatches to share private state, then call this by hand.
182
+ *
183
+ * The private-address-space counterpart of {@link resetWorkgroup} — but note the asymmetry:
184
+ * `var<workgroup>` state is shared by the lanes of a workgroup, so it is reset per workgroup
185
+ * and by the caller; `var<private>` state is not shared at all, so it is reset per dispatch
186
+ * and by default.
187
+ */
188
+ resetPrivate(): void;
156
189
  /**
157
190
  * Dispatch a single thread (point-wise simulation). The arguments are the entry function's
158
191
  * parameters, in declaration order — for example a `@builtin(global_invocation_id)` param of
@@ -1 +1 @@
1
- {"version":3,"file":"ComputeShaderEmulator.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/ComputeShaderEmulator.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;GAkBG;AACH;IAoII;;;;;;;;;;OAUG;IACH,0BANW,MAAM;QAEe,MAAM,GAA3B,UAAU;QACO,YAAY,GAA7B,MAAM;QACJ,QAAQ,qBAAqB,CAAC,CAa1C;IAED;;;;;;;;OAQG;IACH,iCANW,OAAO,wCAAwC,EAAE,aAAa;QAEzC,MAAM,GAA3B,UAAU;QACO,YAAY,GAA7B,MAAM;QACJ,QAAQ,qBAAqB,CAAC,CAM1C;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,+BANW,OAAO,sCAAsC,EAAE,WAAW;QAErC,MAAM,GAA3B,UAAU;QACO,YAAY,GAA7B,MAAM;QACJ,QAAQ,qBAAqB,CAAC,CAM1C;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,sCANW,OAAO,6CAA6C,EAAE,SAAS,GAAG,MAAM;QAEnD,MAAM,GAA3B,UAAU;QACO,YAAY,GAA7B,MAAM;QACJ,QAAQ,MAAM,CAAC,CAS3B;IAvMD;;;;;;;;;;OAUG;IACH;QAL2B,MAAM,EAAtB,MAAM;QACU,MAAM,EAAtB,MAAM;QACU,QAAQ,EAAxB,MAAM;QACU,YAAY,EAA5B,MAAM;OAYhB;IA5BD;;;;OAIG;IACH,UAFU,MAAM,CAEF;IAyBd;;OAEG;IACH,qBAEC;IAED;;OAEG;IACH,uBAEC;IAED;;OAEG;IACH,wBAEC;IAED;;OAEG;IACH,wBAEC;IAED;;OAEG;IACH,oCAEC;IAED;;OAEG;IACH,+BAEC;IAED;;OAEG;IACH,gCAEC;IAED;;OAEG;IACH,qBAEC;IAED;;;OAGG;IACH,uBAIC;IAED;;;;;;;;;;;OAWG;IACH,kCAKC;;CA8FJ;2BAvP0B,kBAAkB"}
1
+ {"version":3,"file":"ComputeShaderEmulator.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/ComputeShaderEmulator.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IAqKI;;;;;;;;;;OAUG;IACH,0BANW,MAAM;QAEe,MAAM,GAA3B,UAAU;QACO,YAAY,GAA7B,MAAM;QACJ,QAAQ,qBAAqB,CAAC,CAa1C;IAED;;;;;;;;OAQG;IACH,iCANW,OAAO,wCAAwC,EAAE,aAAa;QAEzC,MAAM,GAA3B,UAAU;QACO,YAAY,GAA7B,MAAM;QACJ,QAAQ,qBAAqB,CAAC,CAM1C;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,+BANW,OAAO,sCAAsC,EAAE,WAAW;QAErC,MAAM,GAA3B,UAAU;QACO,YAAY,GAA7B,MAAM;QACJ,QAAQ,qBAAqB,CAAC,CAM1C;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,sCANW,OAAO,6CAA6C,EAAE,SAAS,GAAG,MAAM;QAEnD,MAAM,GAA3B,UAAU;QACO,YAAY,GAA7B,MAAM;QACJ,QAAQ,MAAM,CAAC,CAS3B;IA9ND;;;;;;;;;;OAUG;IACH;QAL2B,MAAM,EAAtB,MAAM;QACU,MAAM,EAAtB,MAAM;QACU,QAAQ,EAAxB,MAAM;QACU,YAAY,EAA5B,MAAM;OAYhB;IAxCD;;;;OAIG;IACH,UAFU,MAAM,CAEF;IAEd;;;;;;;;;OASG;IACH,wBAFU,OAAO,CAEa;IAyB9B;;OAEG;IACH,qBAEC;IAED;;OAEG;IACH,uBAEC;IAED;;OAEG;IACH,wBAEC;IAED;;OAEG;IACH,wBAEC;IAED;;OAEG;IACH,oCAEC;IAED;;OAEG;IACH,+BAEC;IAED;;OAEG;IACH,gCAEC;IAED;;OAEG;IACH,qBAEC;IAED;;;OAGG;IACH,uBAIC;IAED;;;;;;;;;;;;;OAaG;IACH,qBAEC;IAED;;;;;;;;;;;OAWG;IACH,kCAQC;;CAgGJ;2BA/R0B,kBAAkB"}
@@ -21,6 +21,11 @@ import { WGSLLanguageCore } from "./WGSLLanguageCore.js";
21
21
  * emu.dispatch([0, 0, 0]); // global_invocation_id = (0,0,0)
22
22
  * emu.dispatch([1, 0, 0]); // global_invocation_id = (1,0,0)
23
23
  * // ... bindings now contain results
24
+ *
25
+ * Each dispatch is a fresh invocation: `var<private>` variables go back to their declared
26
+ * initializers first, as they do on the GPU. `var<workgroup>` variables do not — they belong to
27
+ * the workgroup, so lanes dispatched in sequence share them until {@link
28
+ * ComputeShaderEmulator#resetWorkgroup} is called.
24
29
  */
25
30
  export class ComputeShaderEmulator {
26
31
 
@@ -46,6 +51,18 @@ export class ComputeShaderEmulator {
46
51
  */
47
52
  bindings = {};
48
53
 
54
+ /**
55
+ * Whether {@link dispatch} starts each thread with the module's `var<private>` variables
56
+ * back at their start-of-invocation values. On by default, because that is what a GPU
57
+ * invocation gets — see {@link resetPrivate}.
58
+ *
59
+ * Turn it off to simulate something the hardware cannot, such as watching a private RNG
60
+ * advance across a run of dispatches.
61
+ *
62
+ * @type {boolean}
63
+ */
64
+ resetPrivateOnDispatch = true;
65
+
49
66
  /**
50
67
  * Construct directly when you already have the WGSL source string.
51
68
  *
@@ -135,6 +152,24 @@ export class ComputeShaderEmulator {
135
152
  }
136
153
  }
137
154
 
155
+ /**
156
+ * Return every module-scope `var<private>` to the value it has at the start of a WGSL
157
+ * invocation — its declared initializer, or zero when it was declared without one.
158
+ *
159
+ * {@link dispatch} calls this for you, because that is what the GPU does: private variables
160
+ * are per-invocation, and one invocation never sees what another left in them. Set
161
+ * {@link resetPrivateOnDispatch} to `false` for the rare simulation that wants a run of
162
+ * dispatches to share private state, then call this by hand.
163
+ *
164
+ * The private-address-space counterpart of {@link resetWorkgroup} — but note the asymmetry:
165
+ * `var<workgroup>` state is shared by the lanes of a workgroup, so it is reset per workgroup
166
+ * and by the caller; `var<private>` state is not shared at all, so it is reset per dispatch
167
+ * and by default.
168
+ */
169
+ resetPrivate() {
170
+ this.#module.reset_private();
171
+ }
172
+
138
173
  /**
139
174
  * Dispatch a single thread (point-wise simulation). The arguments are the entry function's
140
175
  * parameters, in declaration order — for example a `@builtin(global_invocation_id)` param of
@@ -148,6 +183,9 @@ export class ComputeShaderEmulator {
148
183
  * @returns {*}
149
184
  */
150
185
  dispatch(...mainArgs) {
186
+ if (this.resetPrivateOnDispatch) {
187
+ this.resetPrivate();
188
+ }
151
189
  if (this.#module.stage === 'fragment') {
152
190
  return this.#module.entry(this.bindings, ...mainArgs);
153
191
  }
@@ -223,7 +261,9 @@ export class ComputeShaderEmulator {
223
261
  /**
224
262
  * Compile a {@link CodeChunk} (or a raw WGSL string) into a "library" object — every
225
263
  * top-level WGSL function becomes a method, every `var<private>` becomes a getter/setter
226
- * property, and every module-scope `const` becomes a read-only getter.
264
+ * property, and every module-scope `const` becomes a read-only getter. `reset_private()`
265
+ * puts the private variables back to their initial values; there is no dispatch here to do
266
+ * it for you, so call it between cases that must not see each other's state.
227
267
  *
228
268
  * No `@compute` entry is required. This is the one-line escape hatch for unit-testing pure
229
269
  * helper code (RNGs, hashes, packing, math) without wrapping each chunk in a shader skeleton.
@@ -6,8 +6,9 @@ export class WGSLJavaScriptCompiler {
6
6
  * a shader module object. The shape depends on what the WGSL declared:
7
7
  *
8
8
  * - **Always present:** every top-level user function (e.g. `module.random()`),
9
- * every struct class (e.g. `module.Foo`), and a getter/setter property for each
10
- * `var<private>` and getter for each module-scope `const`.
9
+ * every struct class (e.g. `module.Foo`), a getter/setter property for each
10
+ * `var<private>` and getter for each module-scope `const`, and `reset_private()`,
11
+ * which returns every `var<private>` to its start-of-invocation value.
11
12
  * - **Compute-shader fields (only when a `@compute` entry is present):**
12
13
  * ```
13
14
  * {
@@ -1 +1 @@
1
- {"version":3,"file":"WGSLJavaScriptCompiler.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js"],"names":[],"mappings":"AAycA;IAEI;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,oBAFa,MAAM,CAMlB;CACJ;;UAjea,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS;WAClG,MAAM;WACN,MAAM;WACN,MAAM;WACN,MAAM;aACN,MAAM;cACN,QAAQ;YACR,MAAM"}
1
+ {"version":3,"file":"WGSLJavaScriptCompiler.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js"],"names":[],"mappings":"AA2cA;IAEI;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,oBAFa,MAAM,CAMlB;CACJ;;UApea,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS;WAClG,MAAM;WACN,MAAM;WACN,MAAM;WACN,MAAM;aACN,MAAM;cACN,QAAQ;YACR,MAAM"}
@@ -419,10 +419,12 @@ class Compiler {
419
419
 
420
420
  /**
421
421
  * Module-scope `var<private>` and `const` declarations, in declaration order.
422
- * Each entry is `{ name, kind: 'let' | 'const', code }` — `code` is the JS line emitted
423
- * verbatim; `name` and `kind` are also tracked so the returned module object can expose
424
- * them as getter/setter (or read-only) properties for testing.
425
- * @type {Array<{ name: string, kind: 'let' | 'const', code: string }>}
422
+ * Each entry is `{ name, kind: 'let' | 'const', code, init }` — `code` is the JS line
423
+ * emitted verbatim; `name` and `kind` are also tracked so the returned module object can
424
+ * expose them as getter/setter (or read-only) properties for testing, and `init` is the
425
+ * initializer expression on its own, which the private-state reset re-emits for the `let`
426
+ * ones (a `const` cannot be reassigned, and no invocation can disturb it).
427
+ * @type {Array<{ name: string, kind: 'let' | 'const', code: string, init: string }>}
426
428
  */
427
429
  this.privateGlobals = [];
428
430
 
@@ -464,8 +466,9 @@ export class WGSLJavaScriptCompiler {
464
466
  * a shader module object. The shape depends on what the WGSL declared:
465
467
  *
466
468
  * - **Always present:** every top-level user function (e.g. `module.random()`),
467
- * every struct class (e.g. `module.Foo`), and a getter/setter property for each
468
- * `var<private>` and getter for each module-scope `const`.
469
+ * every struct class (e.g. `module.Foo`), a getter/setter property for each
470
+ * `var<private>` and getter for each module-scope `const`, and `reset_private()`,
471
+ * which returns every `var<private>` to its start-of-invocation value.
469
472
  * - **Compute-shader fields (only when a `@compute` entry is present):**
470
473
  * ```
471
474
  * {
@@ -549,7 +552,12 @@ function compileTranslationUnit(c, root) {
549
552
  if (node.type === 'function_decl') emitFunction(c, node);
550
553
  }
551
554
 
552
- // 5) Entry-stage support code: the dispatch wrapper for any entry, plus a workgroup-state
555
+ // 5) The private-state reset. Emitted for every module, library ones included: a
556
+ // `var<private>` is per-invocation state on the GPU, and the JS `let` above outlives the
557
+ // dispatch that wrote it, so something has to put the initial values back.
558
+ emitPrivateStateReset(c);
559
+
560
+ // 6) Entry-stage support code: the dispatch wrapper for any entry, plus a workgroup-state
553
561
  // factory for @compute entries (fragment shaders have no var<workgroup>). Skipped entirely
554
562
  // in library mode (no entry attribute) so the resulting module is just a bag of pure
555
563
  // functions and globals.
@@ -560,7 +568,7 @@ function compileTranslationUnit(c, root) {
560
568
  emitEntryWrapper(c);
561
569
  }
562
570
 
563
- // 6) Build and return the module object.
571
+ // 7) Build and return the module object.
564
572
  emitModuleReturn(c);
565
573
 
566
574
  c.out.dedent();
@@ -571,8 +579,9 @@ function compileTranslationUnit(c, root) {
571
579
  * Emit the `return { ... }` block of the factory. Every top-level user function and struct
572
580
  * class is exposed by name; module-scope `var<private>` slots become getter/setter properties
573
581
  * (so tests can inspect or seed RNG state etc.), and module-scope `const`s become read-only
574
- * getters. When the WGSL had a `@compute` entry, the dispatch trio (`entry_name`,
575
- * `workgroup_size`, `param_names`, `entry`, `create_workgroup_state`) is included.
582
+ * getters. `reset_private` is always included. When the WGSL had a `@compute` entry, the dispatch
583
+ * trio (`entry_name`, `workgroup_size`, `param_names`, `entry`, `create_workgroup_state`) is
584
+ * included too.
576
585
  */
577
586
  function emitModuleReturn(c) {
578
587
  c.out.add('const __module__ = {};');
@@ -592,6 +601,8 @@ function emitModuleReturn(c) {
592
601
  }
593
602
  }
594
603
 
604
+ c.out.add('__module__.reset_private = __reset_private__;');
605
+
595
606
  if (c.entry !== null) {
596
607
  c.out.add(`__module__.entry_name = ${JSON.stringify(c.entry.name)};`);
597
608
  c.out.add(`__module__.stage = ${JSON.stringify(c.entry.stage)};`);
@@ -900,6 +911,7 @@ function collectGlobalVariable(c, node) {
900
911
  name,
901
912
  kind: 'let',
902
913
  code: `let ${name} = ${init_code};`,
914
+ init: init_code,
903
915
  });
904
916
  }
905
917
 
@@ -938,6 +950,7 @@ function collectGlobalValue(c, node) {
938
950
  name,
939
951
  kind: 'const',
940
952
  code: `const ${name} = ${expr.code};`,
953
+ init: expr.code,
941
954
  });
942
955
  }
943
956
 
@@ -945,6 +958,32 @@ function collectGlobalValue(c, node) {
945
958
  // Workgroup state factory + entry wrapper
946
959
  // =========================================================================
947
960
 
961
+ /**
962
+ * Emit `__reset_private__()`, which restores every module-scope `var<private>` to the value it
963
+ * would have at the start of a WGSL invocation — its declared initializer, or the type's zero
964
+ * value when it was declared without one.
965
+ *
966
+ * This is the private-address-space counterpart of {@link emitWorkgroupStateFactory}. The
967
+ * generated module keeps its private slots in `let` bindings that live as long as the module, so
968
+ * without this a second dispatch would start from whatever the first one left behind — state the
969
+ * GPU never carries.
970
+ *
971
+ * Module-scope `const`s are skipped: they are immutable in the generated JS and no invocation can
972
+ * disturb them.
973
+ *
974
+ * @param {Compiler} c
975
+ */
976
+ function emitPrivateStateReset(c) {
977
+ c.out.add('function __reset_private__() {');
978
+ c.out.indent();
979
+ for (const g of c.privateGlobals) {
980
+ if (g.kind !== 'let') continue;
981
+ c.out.add(`${g.name} = ${g.init};`);
982
+ }
983
+ c.out.dedent();
984
+ c.out.add('}');
985
+ }
986
+
948
987
  function emitWorkgroupStateFactory(c) {
949
988
  c.out.add('function __create_workgroup_state__() {');
950
989
  c.out.indent();
@@ -1 +1 @@
1
- {"version":3,"file":"MinimapCameraView.d.ts","sourceRoot":"","sources":["../../../../../src/view/minimap/dom/MinimapCameraView.js"],"names":[],"mappings":"AAYA;IACI;;;;;;;;OAQG;IACH,yFAwFC;IArFG,YAAkC;IAIlC;;;;OAIG;IACH,qBAAgD;IAIhD;;;OAGG;IACH,eAAoB;IAEpB;;;;;;;;;;;OAWG;IACH,UAFU,+BAA6B,CAEf;IACxB;;;OAGG;IACH,qBAA0B;IAE1B,eAAoB;IAEpB;;;;OAIG;IACH,gBAAoB;IAEpB;;;;OAIG;IACH,sBAA+B;IAE/B;;;OAGG;IACH,aAAsC;IA6B1C;;;;;;;;;OASG;IACH,uBARW,OAAO,WACP,MAAM,WACN,MAAM,WACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,QAsChB;IAED;;;;;OAKG;IACH,YAJW,MAAM,KACN,MAAM,GACJ,OAAO,CA+BnB;IAED,iBAQC;CAgBJ;iBA7NgB,eAAe;oBACZ,+BAA+B"}
1
+ {"version":3,"file":"MinimapCameraView.d.ts","sourceRoot":"","sources":["../../../../../src/view/minimap/dom/MinimapCameraView.js"],"names":[],"mappings":"AAWA;IACI;;;;;;;;OAQG;IACH,yFAoFC;IAjFG,YAAkC;IAIlC;;;;OAIG;IACH,qBAAgD;IAIhD;;;OAGG;IACH,eAAoB;IAEpB;;;;;;;;;;;OAWG;IACH,UAFU,+BAA6B,CAEf;IACxB;;;OAGG;IACH,qBAA0B;IAE1B,eAAoB;IAEpB;;;;OAIG;IACH,gBAAoB;IAEpB;;;;OAIG;IACH,sBAA+B;IAE/B;;;OAGG;IACH,aAAsC;IAyB1C;;;;;;;;;OASG;IACH,uBARW,OAAO,WACP,MAAM,WACN,MAAM,WACN,MAAM,cACN,MAAM,cACN,MAAM,cACN,MAAM,QAsChB;IAED;;;;;OAKG;IACH,YAJW,MAAM,KACN,MAAM,GACJ,OAAO,CA+BnB;IAED,iBAQC;CAgBJ;iBAxNgB,eAAe;oBACZ,+BAA+B"}
@@ -4,8 +4,7 @@ import ObservedValue from "../../../core/model/ObservedValue.js";
4
4
  import { SurfacePoint3 } from "../../../core/geom/3d/SurfacePoint3.js";
5
5
  import SVG from "../../SVG.js";
6
6
  import { plane3_compute_ray_intersection } from "../../../core/geom/3d/plane/plane3_compute_ray_intersection.js";
7
- import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
8
- import { EventType } from "../../../engine/ecs/EventType.js";
7
+ import { TRANSFORM64_EVENT_CHANGE } from "../../../engine/ecs/transform/TRANSFORM64_EVENT_CHANGE.js";
9
8
 
10
9
 
11
10
  const rayContact = new SurfacePoint3();
@@ -93,18 +92,14 @@ export class MinimapCameraView extends View {
93
92
  // none, so it arrives from the dataset instead - one listener for the whole transform,
94
93
  // which is coarser and exactly as useful here: the view redraws from the pose either way.
95
94
  if (dataset !== null) {
96
- const on_transform_changed = event => {
97
- if (event.klass === Transform64) {
98
- this.__update();
99
- }
100
- };
95
+ const on_transform_changed = () => this.__update();
101
96
 
102
97
  this.on.linked.add(() => dataset.addEntityEventListener(
103
- entity, EventType.ComponentChanged, on_transform_changed
98
+ entity, TRANSFORM64_EVENT_CHANGE, on_transform_changed
104
99
  ));
105
100
 
106
101
  this.on.unlinked.add(() => dataset.removeEntityEventListener(
107
- entity, EventType.ComponentChanged, on_transform_changed
102
+ entity, TRANSFORM64_EVENT_CHANGE, on_transform_changed
108
103
  ));
109
104
  }
110
105
 
@@ -1,15 +0,0 @@
1
- export class BoxLayoutSpec {
2
- bounds: AABB2;
3
- /**
4
- *
5
- * @type {ConnectionLayoutSpec[]}
6
- */
7
- connections: ConnectionLayoutSpec[];
8
- /**
9
- *
10
- * @type {boolean}
11
- */
12
- locked: boolean;
13
- }
14
- import AABB2 from "../../../../geom/2d/aabb/AABB2.js";
15
- //# sourceMappingURL=BoxLayoutSpec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BoxLayoutSpec.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/model/node-graph/visual/layout/BoxLayoutSpec.js"],"names":[],"mappings":"AAGA;IACI,cAAqB;IAErB;;;OAGG;IACH,aAFU,sBAAsB,CAEf;IAEjB;;;OAGG;IACH,QAFU,OAAO,CAEF;CAElB;kBAlBiB,mCAAmC"}
@@ -1,45 +0,0 @@
1
- export class ConnectedBoxLayouter {
2
- /**
3
- *
4
- * @type {BoxLayoutSpec[]}
5
- */
6
- boxes: BoxLayoutSpec[];
7
- /**
8
- *
9
- * @type {ConnectionLayoutSpec[]}
10
- */
11
- connections: ConnectionLayoutSpec[];
12
- /**
13
- *
14
- * @type {QuadTreeNode<>}
15
- * @private
16
- */
17
- private __spatial_index_connections;
18
- /**
19
- * @param {BoxLayoutSpec[]} boxes
20
- * @param {ConnectionLayoutSpec[]} connections
21
- */
22
- initialize(boxes: BoxLayoutSpec[], connections: ConnectionLayoutSpec[]): void;
23
- __resolve_box_overlap(max_steps?: number): void;
24
- /**
25
- *
26
- * @param {BoxLayoutSpec} box
27
- * @returns {number}
28
- * @private
29
- */
30
- private __compute_box_cost;
31
- __execute_swaps(): number;
32
- /**
33
- *
34
- * @param {ConnectionLayoutSpec} spec
35
- * @param {number} strength
36
- * @private
37
- */
38
- private __pull_connection;
39
- __pull_connections(strength: any): void;
40
- __execute_many_swaps(limit: any): void;
41
- __execute_initial_placement(): void;
42
- step(): void;
43
- layout(): void;
44
- }
45
- //# sourceMappingURL=ConnectedBoxLayouter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConnectedBoxLayouter.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/model/node-graph/visual/layout/ConnectedBoxLayouter.js"],"names":[],"mappings":"AAMA;IAGI;;;OAGG;IACH,OAFU,eAAe,CAEd;IACX;;;OAGG;IACH,aAFU,sBAAsB,CAEf;IAGjB;;;;OAIG;IACH,oCAAiD;IAGjD;;;OAGG;IACH,kBAHW,eAAe,eACf,sBAAsB,QAahC;IAED,gDAYC;IAED;;;;;OAKG;IACH,2BA6BC;IAED,0BAkDC;IAED;;;;;OAKG;IACH,0BAqBC;IAED,wCAQC;IAED,uCAQC;IAED,oCAkBC;IAED,aAOC;IAED,eAYC;CACJ"}
@@ -1,24 +0,0 @@
1
- export class ConnectionEndpointLayoutSpec {
2
- /**
3
- * @param {AABB2} box
4
- * @param {Vector2} point
5
- * @returns {ConnectionEndpointLayoutSpec}
6
- */
7
- static from(box: AABB2, point: Vector2): ConnectionEndpointLayoutSpec;
8
- /**
9
- *
10
- * @type {BoxLayoutSpec}
11
- */
12
- box: BoxLayoutSpec;
13
- /**
14
- * Local offset inside the box where connection is attached
15
- * @type {Vector2}
16
- */
17
- point: Vector2;
18
- /**
19
- *
20
- * @param {Vector2} result
21
- */
22
- computePosition(result: Vector2): void;
23
- }
24
- //# sourceMappingURL=ConnectionEndpointLayoutSpec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConnectionEndpointLayoutSpec.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/model/node-graph/visual/layout/ConnectionEndpointLayoutSpec.js"],"names":[],"mappings":"AAAA;IA0BI;;;;OAIG;IACH,yCAFa,4BAA4B,CASxC;IApCD;;;OAGG;IACH,mBAAW;IAEX;;;OAGG;IACH,eAAa;IAGb;;;OAGG;IACH,uCAKC;CAeJ"}
@@ -1,19 +0,0 @@
1
- export class ConnectionLayoutSpec {
2
- /**
3
- * @param {ConnectionEndpointLayoutSpec} source
4
- * @param {ConnectionEndpointLayoutSpec} target
5
- * @returns {ConnectionLayoutSpec}
6
- */
7
- static from(source: ConnectionEndpointLayoutSpec, target: ConnectionEndpointLayoutSpec): ConnectionLayoutSpec;
8
- /**
9
- *
10
- * @type {ConnectionEndpointLayoutSpec}
11
- */
12
- source: ConnectionEndpointLayoutSpec;
13
- /**
14
- *
15
- * @type {ConnectionEndpointLayoutSpec}
16
- */
17
- target: ConnectionEndpointLayoutSpec;
18
- }
19
- //# sourceMappingURL=ConnectionLayoutSpec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConnectionLayoutSpec.d.ts","sourceRoot":"","sources":["../../../../../../../src/core/model/node-graph/visual/layout/ConnectionLayoutSpec.js"],"names":[],"mappings":"AAAA;IAcI;;;;OAIG;IACH,yFAFa,oBAAoB,CAShC;IAxBD;;;OAGG;IACH,qCAAc;IACd;;;OAGG;IACH,qCAAc;CAgBjB"}
@@ -1,4 +0,0 @@
1
- /** @param {Transform64} t */
2
- export function probe(t: Transform64): any[];
3
- import { Transform64 } from "./Transform64.js";
4
- //# sourceMappingURL=__probe.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"__probe.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/transform/__probe.js"],"names":[],"mappings":"AAEA,6BAA6B;AAC7B,yBADY,WAAW,SAMtB;4BAP2B,kBAAkB"}
@@ -1,9 +0,0 @@
1
- /**
2
- *
3
- * @param {Entity} builder
4
- * @param {function():Entity} createEntity
5
- * @param {*} [createEntityThisArg]
6
- * @return {number} duration in seconds until the entity is completely hidden
7
- */
8
- export function hideEntityGracefully(builder: Entity, createEntity: () => Entity, createEntityThisArg?: any): number;
9
- //# sourceMappingURL=hideEntityGracefully.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hideEntityGracefully.d.ts","sourceRoot":"","sources":["../../../../../src/engine/ecs/util/hideEntityGracefully.js"],"names":[],"mappings":"AA2JA;;;;;;GAMG;AACH,8GAFY,MAAM,CAmCjB"}