@woosh/meep-engine 3.33.0 → 3.35.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 (503) hide show
  1. package/editor/Editor.d.ts.map +1 -1
  2. package/editor/Editor.js +0 -3
  3. package/editor/ecs/component/prototypeObjectEditor.js +1 -165
  4. package/editor/ecs/component/registerBasicTypeEditors.d.ts.map +1 -1
  5. package/editor/ecs/component/registerBasicTypeEditors.js +0 -5
  6. package/editor/ecs/component/registerEngineComponentEditors.d.ts.map +1 -1
  7. package/editor/ecs/component/registerEngineComponentEditors.js +0 -20
  8. package/editor/process/SymbolicDisplayProcess.d.ts.map +1 -1
  9. package/editor/process/SymbolicDisplayProcess.js +100 -106
  10. package/editor/prototypeEditorShell.d.ts.map +1 -1
  11. package/editor/prototypeEditorShell.js +190 -186
  12. package/editor/templates/entity_templates.d.ts.map +1 -1
  13. package/editor/templates/entity_templates.js +10 -27
  14. package/editor/view/makeEntityDecorators.js +2 -2
  15. package/package.json +1 -1
  16. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.d.ts +3 -3
  17. package/src/core/geom/3d/aabb/MovingBoundingBox.d.ts.map +1 -0
  18. package/src/{engine/graphics/particles/particular/engine → core/geom/3d/aabb}/MovingBoundingBox.js +5 -5
  19. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts +3 -0
  20. package/src/core/math/lookup/RGBA_LUT_HEATMAP_IR.d.ts.map +1 -0
  21. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGBA_LUT_HEATMAP_IR.js +1 -1
  22. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts +6 -0
  23. package/src/core/math/lookup/RGB_LUT_INFERNO.d.ts.map +1 -0
  24. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_INFERNO.js +1 -1
  25. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.d.ts +1 -1
  26. package/src/core/math/lookup/RGB_LUT_TURBO.d.ts.map +1 -0
  27. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_TURBO.js +1 -1
  28. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.d.ts +1 -1
  29. package/src/core/math/lookup/RGB_LUT_VIRIDIS.d.ts.map +1 -0
  30. package/src/{engine/graphics/particles/particular/engine/parameter/sample → core/math/lookup}/RGB_LUT_VIRIDIS.js +1 -1
  31. package/src/engine/animation/AnimatedActions.d.ts.map +1 -1
  32. package/src/engine/animation/AnimatedActions.js +2 -4
  33. package/src/engine/animation/AnimationUtils.d.ts +1 -17
  34. package/src/engine/animation/AnimationUtils.d.ts.map +1 -1
  35. package/src/engine/animation/AnimationUtils.js +138 -246
  36. package/src/engine/ecs/EntityManager.d.ts +1 -1
  37. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  38. package/src/engine/ecs/EntityManager.js +2 -2
  39. package/src/engine/ecs/storage/binary/SERIALIZATION_COVERAGE.md +268 -275
  40. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  41. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +0 -10
  42. package/src/engine/graphics/geometry/distribute_points_on_indexed_triangles.d.ts.map +1 -0
  43. package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.js +3 -3
  44. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.d.ts +1 -1
  45. package/src/engine/graphics/texture/sampler/lut_to_sampler.d.ts.map +1 -0
  46. package/src/engine/graphics/{particles/particular/engine/utils/volume → texture/sampler}/lut_to_sampler.js +1 -1
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +0 -3
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  49. package/src/engine/graphics3/GPUParticleEmitterSystem.js +0 -3
  50. package/src/engine/network/NetworkSession.d.ts +1 -1
  51. package/src/engine/network/NetworkSession.js +1 -1
  52. package/src/engine/physics/cloth/MEASUREMENTS.md +115 -0
  53. package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
  54. package/src/engine/physics/cloth/solver/cloth_contact_find.js +2 -0
  55. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +9 -0
  56. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  57. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +30 -7
  58. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  59. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  60. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +12 -2
  61. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +11 -2
  62. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  63. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +14 -7
  64. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts +6 -15
  65. package/src/engine/sound/ecs/audio/SpatialAudioIndex.d.ts.map +1 -1
  66. package/src/engine/sound/ecs/audio/SpatialAudioIndex.js +161 -174
  67. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts +5 -3
  68. package/src/shade/device/mock/SoftwareGPUBuffer.d.ts.map +1 -1
  69. package/src/shade/device/mock/SoftwareGPUBuffer.js +32 -3
  70. package/src/shade/device/timing/profile/GPUProfileSession.d.ts +25 -11
  71. package/src/shade/device/timing/profile/GPUProfileSession.d.ts.map +1 -1
  72. package/src/shade/device/timing/profile/GPUProfileSession.js +553 -474
  73. package/src/shade/playground/avboit/main.d.ts.map +1 -1
  74. package/src/shade/playground/avboit/main.js +888 -916
  75. package/src/shade/playground/caldera/main.js +73 -60
  76. package/src/shade/playground/particle_ecs/README.md +13 -7
  77. package/src/shade/playground/particle_ecs/bonfire_effects.d.ts +5 -5
  78. package/src/shade/playground/particle_ecs/bonfire_effects.js +5 -5
  79. package/src/shade/playground/particle_ecs/effects/smoke.json +1859 -1859
  80. package/src/shade/playground/particle_ecs/effects/soot.json +1605 -1605
  81. package/src/shade/playground/particle_system/README.md +1 -2
  82. package/src/shade/playground/profile_hotkey.d.ts.map +1 -1
  83. package/src/shade/playground/profile_hotkey.js +4 -40
  84. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  85. package/src/shade/playground/skinned_blas_refit/main.js +4 -39
  86. package/src/shade/playground/vgeo_runtime/main.js +25 -77
  87. package/src/shade/playground/vgeo_scene/main.js +2231 -2217
  88. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  89. package/src/shade/playground/volumetrics_froxel/main.js +4 -39
  90. package/src/shade/playground/volumetrics_froxel/measure.d.ts.map +1 -1
  91. package/src/shade/playground/volumetrics_froxel/measure.js +2 -4
  92. package/src/shade/renderer/GraphicsContext.d.ts +7 -0
  93. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  94. package/src/shade/renderer/GraphicsContext.js +11 -2
  95. package/src/shade/renderer/Renderer.d.ts +1 -1
  96. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  97. package/src/shade/renderer/Renderer.js +41 -1
  98. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +8 -0
  99. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  100. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +21 -0
  101. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +1 -1
  102. package/src/shade/renderer/geometry/GPUGeometryManager.d.ts.map +1 -1
  103. package/src/shade/renderer/geometry/GPUGeometryManager.js +9 -10
  104. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts +5 -0
  105. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  106. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +11 -0
  107. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts +12 -0
  108. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.d.ts.map +1 -1
  109. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryPool.js +25 -0
  110. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts +115 -101
  111. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  112. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +282 -140
  113. package/src/shade/renderer/geometry/virtual/runtime/REVIEW_LEDGER.md +30 -0
  114. package/src/shade/renderer/geometry/virtual/runtime/RUNTIME_PLAN_2026_09_14.md +4 -1
  115. package/src/shade/renderer/geometry/virtual/runtime/SHADOW_PLAN_2026_09_28.md +536 -0
  116. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts +6 -2
  117. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.d.ts.map +1 -1
  118. package/src/shade/renderer/geometry/virtual/runtime/VGeoFeedbackLoop.js +68 -19
  119. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts +2 -1
  120. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  121. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +17 -1
  122. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts +4 -0
  123. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
  124. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +42 -12
  125. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts +93 -12
  126. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.d.ts.map +1 -1
  127. package/src/shade/renderer/geometry/virtual/runtime/VGeoViewCut.js +166 -20
  128. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.d.ts.map +1 -1
  129. package/src/shade/renderer/geometry/virtual/runtime/cut/VGEO_CUT_PARAMS_STRUCT.js +30 -7
  130. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.d.ts.map +1 -1
  131. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_access.js +12 -5
  132. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.d.ts.map +1 -1
  133. package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_claim.js +2 -2
  134. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
  135. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +23 -13
  136. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.d.ts.map +1 -1
  137. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_queue_remainder.js +1 -2
  138. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.d.ts.map +1 -1
  139. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_seed.js +1 -2
  140. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.d.ts.map +1 -1
  141. package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_traverse.js +10 -6
  142. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts +45 -17
  143. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.d.ts.map +1 -1
  144. package/src/shade/renderer/geometry/virtual/runtime/cut/vgeo_cut_feedback_layout.js +61 -19
  145. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts +8 -11
  146. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.d.ts.map +1 -1
  147. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_if_enabled.js +9 -16
  148. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.d.ts.map +1 -1
  149. package/src/shade/renderer/geometry/virtual/runtime/graph_vgeo_expand_instances_to_meshlets.js +25 -10
  150. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_FEEDBACK_OFFSET.js +10 -8
  151. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.d.ts +1 -0
  152. package/src/shade/renderer/geometry/virtual/runtime/layout/VGEO_INSTANCE_OFFSET.js +19 -7
  153. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts +4 -2
  154. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.d.ts.map +1 -1
  155. package/src/shade/renderer/geometry/virtual/runtime/make_vgeo_page_worker.js +4 -2
  156. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts +4 -0
  157. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.d.ts.map +1 -1
  158. package/src/shade/renderer/global_illumination/brick4/Brick4LightMap.js +7 -0
  159. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.d.ts.map +1 -1
  160. package/src/shade/renderer/global_illumination/lpv/GPULightProbeVolume.js +1 -0
  161. package/src/shade/renderer/light/GPULightCollection.d.ts +9 -1
  162. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  163. package/src/shade/renderer/light/GPULightCollection.js +41 -0
  164. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts +37 -0
  165. package/src/shade/renderer/light/environment/shader_project_environment_sh.d.ts.map +1 -0
  166. package/src/shade/renderer/light/environment/shader_project_environment_sh.js +105 -0
  167. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  168. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  169. package/src/shade/renderer/material/GPUMaterialManager.js +2 -0
  170. package/src/shade/renderer/particles/DESIGN.md +69 -18
  171. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +7 -1
  172. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  173. package/src/shade/renderer/particles/GPUParticleSystem.js +1247 -1244
  174. package/src/shade/renderer/particles/ParticleConstants.d.ts +1 -3
  175. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/ParticleConstants.js +1 -3
  177. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +7 -1
  178. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  179. package/src/shade/renderer/particles/graph_particles_avboit.js +9 -0
  180. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts +3 -4
  181. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
  182. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +7 -6
  183. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +15 -9
  184. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  185. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +29 -11
  186. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts +24 -0
  187. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.d.ts.map +1 -0
  188. package/src/shade/renderer/particles/shaders/chunk_particle_lighting_model.js +45 -0
  189. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +3 -0
  190. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  191. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +38 -0
  192. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  193. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +190 -185
  194. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +45 -0
  195. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -0
  196. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +99 -0
  197. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.d.ts +4 -4
  198. package/src/shade/renderer/rasterize/bucket/rasterization_opaque_buckets.js +36 -36
  199. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts +15 -0
  200. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.d.ts.map +1 -0
  201. package/src/shade/renderer/rasterize/bucket/shader_gather_bucket.js +103 -0
  202. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts +3 -0
  203. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
  204. package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +6 -1
  205. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +26 -0
  206. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -0
  207. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +91 -0
  208. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts +22 -0
  209. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.d.ts.map +1 -0
  210. package/src/shade/renderer/rasterize/fast/graph_gather_meshes_from_buckets.js +102 -0
  211. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts +2 -1
  212. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.d.ts.map +1 -1
  213. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +28 -24
  214. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +8 -0
  215. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  216. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +5 -0
  217. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +8 -1
  218. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  219. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +9 -0
  220. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  221. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +32 -28
  222. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  223. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +9 -105
  224. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +5 -0
  225. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  226. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +11 -0
  227. package/src/shade/renderer/scene/GPUSceneContext.d.ts +11 -3
  228. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  229. package/src/shade/renderer/scene/GPUSceneContext.js +93 -21
  230. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +4 -1
  231. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -1
  232. package/src/shade/renderer/scene/rows/GPUSceneRows.js +5 -23
  233. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  234. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +63 -0
  235. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts +12 -0
  236. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.d.ts.map +1 -0
  237. package/src/shade/renderer/shadow/map/SHADOWMAP_VGEO_TAU_SCALE.js +11 -0
  238. package/src/shade/renderer/shadow/map/Shadowmap.d.ts +15 -0
  239. package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
  240. package/src/shade/renderer/shadow/map/Shadowmap.js +17 -0
  241. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts +25 -0
  242. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.d.ts.map +1 -0
  243. package/src/shade/renderer/shadow/map/shadowmap_caster_detail_pending.js +22 -0
  244. package/src/shade/renderer/shadow/map/shadowmap_update_score.d.ts.map +1 -1
  245. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +5 -2
  246. package/src/shade/renderer/texture/TextureManager.d.ts +2 -1
  247. package/src/shade/renderer/texture/TextureManager.d.ts.map +1 -1
  248. package/src/shade/renderer/texture/TextureManager.js +4 -1
  249. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +1 -1
  250. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts +9 -1
  251. package/src/shade/renderer/util/Uint32BufferSamplingStats.d.ts.map +1 -1
  252. package/src/shade/renderer/util/Uint32BufferSamplingStats.js +55 -5
  253. package/src/shade/renderer/view/ViewManager.d.ts +7 -1
  254. package/src/shade/renderer/view/ViewManager.d.ts.map +1 -1
  255. package/src/shade/renderer/view/ViewManager.js +17 -1
  256. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  257. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -0
  258. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +13 -3
  259. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  260. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +9 -1
  261. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts +39 -0
  262. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.d.ts.map +1 -0
  263. package/src/shade/renderer/volumetrics/chunk_volumetrics_irradiance_sh.js +107 -0
  264. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +15 -0
  265. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +1 -0
  266. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +44 -0
  267. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +19 -0
  268. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +1 -0
  269. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +48 -0
  270. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +29 -0
  271. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +1 -0
  272. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +90 -0
  273. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts +10 -0
  274. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.d.ts.map +1 -0
  275. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_brick4.js +55 -0
  276. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts +10 -0
  277. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.d.ts.map +1 -0
  278. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_ibl.js +47 -0
  279. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts +10 -0
  280. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.d.ts.map +1 -0
  281. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi_lpv.js +63 -0
  282. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +17 -0
  283. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +1 -0
  284. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +26 -0
  285. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +8 -1
  286. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  287. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +50 -2
  288. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  289. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +488 -436
  290. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts +1 -1
  291. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  292. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +254 -63
  293. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts +0 -20
  294. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.d.ts.map +0 -1
  295. package/editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js +0 -35
  296. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts +0 -12
  297. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.d.ts.map +0 -1
  298. package/editor/ecs/component/editors/ecs/ParameterTrackEditor.js +0 -17
  299. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts +0 -14
  300. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.d.ts.map +0 -1
  301. package/editor/ecs/component/editors/ecs/ParameterTrackSetEditor.js +0 -18
  302. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts +0 -52
  303. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.d.ts.map +0 -1
  304. package/editor/ecs/component/editors/ecs/ParticleEmitterEditor.js +0 -58
  305. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts +0 -47
  306. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.d.ts.map +0 -1
  307. package/editor/ecs/component/editors/ecs/ParticleEmitterLayerEditor.js +0 -58
  308. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts +0 -16
  309. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.d.ts.map +0 -1
  310. package/editor/ecs/component/editors/ecs/SimulationStepDefinitionEditor.js +0 -21
  311. package/editor/particles/rebuildParticleEmitter.d.ts +0 -11
  312. package/editor/particles/rebuildParticleEmitter.d.ts.map +0 -1
  313. package/editor/particles/rebuildParticleEmitter.js +0 -31
  314. package/editor/process/ParticleEmitterRebuildProcess.d.ts +0 -66
  315. package/editor/process/ParticleEmitterRebuildProcess.d.ts.map +0 -1
  316. package/editor/process/ParticleEmitterRebuildProcess.js +0 -217
  317. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts +0 -18
  318. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.d.ts.map +0 -1
  319. package/editor/process/symbolic/ParticleEmitterSymbolicDisplay.js +0 -140
  320. package/src/engine/animation/removeEntityGenericEffect.d.ts +0 -18
  321. package/src/engine/animation/removeEntityGenericEffect.d.ts.map +0 -1
  322. package/src/engine/animation/removeEntityGenericEffect.js +0 -160
  323. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts +0 -16
  324. package/src/engine/animation/removeEntityWithMeshParticlesEffect.d.ts.map +0 -1
  325. package/src/engine/animation/removeEntityWithMeshParticlesEffect.js +0 -194
  326. package/src/engine/graphics/ecs/sprite/Sprite.d.ts +0 -15
  327. package/src/engine/graphics/ecs/sprite/Sprite.d.ts.map +0 -1
  328. package/src/engine/graphics/ecs/sprite/Sprite.js +0 -14
  329. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts +0 -11
  330. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.d.ts.map +0 -1
  331. package/src/engine/graphics/ecs/sprite/SpriteSystemPE.js +0 -144
  332. package/src/engine/graphics/particles/particular/engine/MovingBoundingBox.d.ts.map +0 -1
  333. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts +0 -61
  334. package/src/engine/graphics/particles/particular/engine/ParticularEngine.d.ts.map +0 -1
  335. package/src/engine/graphics/particles/particular/engine/ParticularEngine.js +0 -229
  336. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts +0 -6
  337. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.d.ts.map +0 -1
  338. package/src/engine/graphics/particles/particular/engine/emitter/EmissionFromType.js +0 -8
  339. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts +0 -7
  340. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.d.ts.map +0 -1
  341. package/src/engine/graphics/particles/particular/engine/emitter/EmissionShapeType.js +0 -9
  342. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts +0 -13
  343. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.d.ts.map +0 -1
  344. package/src/engine/graphics/particles/particular/engine/emitter/PARTICLE_ATTRIBUTES.js +0 -12
  345. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts +0 -3
  346. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  347. package/src/engine/graphics/particles/particular/engine/emitter/PARTICULAR_PARTICLE_SPECIFICATION.js +0 -84
  348. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +0 -285
  349. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts.map +0 -1
  350. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +0 -1201
  351. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts +0 -19
  352. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.d.ts.map +0 -1
  353. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitterFlag.js +0 -67
  354. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts +0 -197
  355. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.d.ts.map +0 -1
  356. package/src/engine/graphics/particles/particular/engine/emitter/ParticleLayer.js +0 -398
  357. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts +0 -5
  358. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.d.ts.map +0 -1
  359. package/src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.js +0 -4
  360. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts +0 -162
  361. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.d.ts.map +0 -1
  362. package/src/engine/graphics/particles/particular/engine/emitter/ParticlePool.js +0 -472
  363. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts +0 -10
  364. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.d.ts.map +0 -1
  365. package/src/engine/graphics/particles/particular/engine/emitter/computeEmissionFunction.js +0 -37
  366. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts +0 -9
  367. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.d.ts.map +0 -1
  368. package/src/engine/graphics/particles/particular/engine/emitter/distance_to_camera.js +0 -25
  369. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts +0 -19
  370. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.d.ts.map +0 -1
  371. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParameterLookupTableSerializationAdapter.js +0 -28
  372. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts +0 -19
  373. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.d.ts.map +0 -1
  374. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationAdapter.js +0 -162
  375. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts +0 -5
  376. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.d.ts.map +0 -1
  377. package/src/engine/graphics/particles/particular/engine/emitter/serde/ParticleEmitterSerializationUpgrader_0_1.js +0 -103
  378. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts +0 -8
  379. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.d.ts.map +0 -1
  380. package/src/engine/graphics/particles/particular/engine/emitter/write_particle_patch_uv.js +0 -28
  381. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts +0 -2
  382. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.d.ts.map +0 -1
  383. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTable.js +0 -2
  384. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts +0 -2
  385. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.d.ts.map +0 -1
  386. package/src/engine/graphics/particles/particular/engine/parameter/ParameterLookupTableFlags.js +0 -2
  387. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts +0 -60
  388. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.d.ts.map +0 -1
  389. package/src/engine/graphics/particles/particular/engine/parameter/ParameterSet.js +0 -128
  390. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts +0 -47
  391. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.d.ts.map +0 -1
  392. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js +0 -77
  393. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts +0 -45
  394. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.d.ts.map +0 -1
  395. package/src/engine/graphics/particles/particular/engine/parameter/ParameterTrackSet.js +0 -93
  396. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts +0 -95
  397. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.d.ts.map +0 -1
  398. package/src/engine/graphics/particles/particular/engine/parameter/ParticleParameter.js +0 -239
  399. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts +0 -3
  400. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGBA_LUT_HEATMAP_IR.d.ts.map +0 -1
  401. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts +0 -6
  402. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_INFERNO.d.ts.map +0 -1
  403. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_TURBO.d.ts.map +0 -1
  404. package/src/engine/graphics/particles/particular/engine/parameter/sample/RGB_LUT_VIRIDIS.d.ts.map +0 -1
  405. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts +0 -13
  406. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.d.ts.map +0 -1
  407. package/src/engine/graphics/particles/particular/engine/renderers/ParticleRenderer.js +0 -28
  408. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts +0 -9
  409. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.d.ts.map +0 -1
  410. package/src/engine/graphics/particles/particular/engine/renderers/billboard/BILLBOARD_PARTICLE_SPECIFICATION.js +0 -24
  411. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts +0 -13
  412. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.d.ts.map +0 -1
  413. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticlePool.js +0 -27
  414. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts +0 -33
  415. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.d.ts.map +0 -1
  416. package/src/engine/graphics/particles/particular/engine/renderers/billboard/SoftBillboardParticleRenderer.js +0 -80
  417. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts +0 -49
  418. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.d.ts.map +0 -1
  419. package/src/engine/graphics/particles/particular/engine/shader/ShaderManager.js +0 -135
  420. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts +0 -7
  421. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.d.ts.map +0 -1
  422. package/src/engine/graphics/particles/particular/engine/shader/debugAtlas.js +0 -14
  423. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts +0 -41
  424. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.d.ts.map +0 -1
  425. package/src/engine/graphics/particles/particular/engine/simulator/AbstractSimulationStep.js +0 -59
  426. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts +0 -4
  427. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.d.ts.map +0 -1
  428. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepApplyForce.js +0 -56
  429. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts +0 -4
  430. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.d.ts.map +0 -1
  431. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseAcceleration.js +0 -84
  432. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts +0 -4
  433. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.d.ts.map +0 -1
  434. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepCurlNoiseVelocity.js +0 -80
  435. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts +0 -29
  436. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.d.ts.map +0 -1
  437. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepDefinition.js +0 -43
  438. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts +0 -5
  439. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.d.ts.map +0 -1
  440. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepFixedPhysics.js +0 -104
  441. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts +0 -9
  442. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.d.ts.map +0 -1
  443. package/src/engine/graphics/particles/particular/engine/simulator/SimulationStepType.js +0 -11
  444. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts +0 -9
  445. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.d.ts.map +0 -1
  446. package/src/engine/graphics/particles/particular/engine/simulator/update_parameters.js +0 -64
  447. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts +0 -9
  448. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.d.ts.map +0 -1
  449. package/src/engine/graphics/particles/particular/engine/utils/distributeParticlesOnObject3D.js +0 -172
  450. package/src/engine/graphics/particles/particular/engine/utils/distribute_points_on_indexed_triangles.d.ts.map +0 -1
  451. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts +0 -20
  452. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.d.ts.map +0 -1
  453. package/src/engine/graphics/particles/particular/engine/utils/distrubuteParticlesOnMesh.js +0 -84
  454. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts +0 -81
  455. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.d.ts.map +0 -1
  456. package/src/engine/graphics/particles/particular/engine/utils/volume/AttributeValue.js +0 -200
  457. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts +0 -6
  458. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.d.ts.map +0 -1
  459. package/src/engine/graphics/particles/particular/engine/utils/volume/SamplingFunctionKind.js +0 -8
  460. package/src/engine/graphics/particles/particular/engine/utils/volume/lut_to_sampler.d.ts.map +0 -1
  461. package/src/engine/graphics/particles/particular/group/Operation.d.ts +0 -20
  462. package/src/engine/graphics/particles/particular/group/Operation.d.ts.map +0 -1
  463. package/src/engine/graphics/particles/particular/group/Operation.js +0 -20
  464. package/src/engine/graphics/particles/particular/group/OperationType.d.ts +0 -7
  465. package/src/engine/graphics/particles/particular/group/OperationType.d.ts.map +0 -1
  466. package/src/engine/graphics/particles/particular/group/OperationType.js +0 -9
  467. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts +0 -27
  468. package/src/engine/graphics/particles/particular/group/ParticleAttribute.d.ts.map +0 -1
  469. package/src/engine/graphics/particles/particular/group/ParticleAttribute.js +0 -27
  470. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts +0 -8
  471. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.d.ts.map +0 -1
  472. package/src/engine/graphics/particles/particular/group/ParticleAttributeType.js +0 -11
  473. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts +0 -7
  474. package/src/engine/graphics/particles/particular/group/ParticleDataType.d.ts.map +0 -1
  475. package/src/engine/graphics/particles/particular/group/ParticleDataType.js +0 -10
  476. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts +0 -24
  477. package/src/engine/graphics/particles/particular/group/ParticleSpecification.d.ts.map +0 -1
  478. package/src/engine/graphics/particles/particular/group/ParticleSpecification.js +0 -48
  479. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts +0 -7
  480. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.d.ts.map +0 -1
  481. package/src/engine/graphics/particles/particular/group/itemSizeFromAttributeType.js +0 -20
  482. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts +0 -6
  483. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.d.ts.map +0 -1
  484. package/src/engine/graphics/particles/particular/group/optimizeCommandQueue.js +0 -162
  485. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts +0 -8
  486. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.d.ts.map +0 -1
  487. package/src/engine/graphics/particles/particular/group/typedArrayConstructorFromDataType.js +0 -19
  488. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +0 -77
  489. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +0 -1
  490. package/src/engine/graphics3/ParticleEmitterSystem.js +0 -307
  491. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +0 -10
  492. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +0 -1
  493. package/src/engine/graphics3/ParticleEmitterSystem3.js +0 -10
  494. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts +0 -61
  495. package/src/engine/graphics3/particles/GPUParticularRenderer.d.ts.map +0 -1
  496. package/src/engine/graphics3/particles/GPUParticularRenderer.js +0 -627
  497. package/src/engine/graphics3/particles/particle_gpu_records.d.ts +0 -85
  498. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +0 -1
  499. package/src/engine/graphics3/particles/particle_gpu_records.js +0 -227
  500. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts +0 -35
  501. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +0 -1
  502. package/src/shade/renderer/particles/shaders/shader_particle_render.js +0 -135
  503. /package/src/engine/graphics/{particles/particular/engine/utils → geometry}/distribute_points_on_indexed_triangles.d.ts +0 -0
@@ -32,7 +32,7 @@ export class WGSLJavaScriptCompiler {
32
32
  compile(ast: Tree): string;
33
33
  }
34
34
  export type WgslType = {
35
- kind: 'primitive' | 'vec' | 'mat' | 'array' | 'struct' | 'texture_2d' | 'sampler' | 'atomic' | 'unknown';
35
+ kind: 'primitive' | 'abstract' | 'vec' | 'mat' | 'array' | 'struct' | 'texture_2d' | 'sampler' | 'atomic' | 'unknown';
36
36
  name?: string;
37
37
  size?: number;
38
38
  cols?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"WGSLJavaScriptCompiler.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js"],"names":[],"mappings":"AA0hBA;IAEI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,oBAFa,MAAM,CAMlB;CACJ;;UAtjBa,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":"AAuiBA;IAEI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,oBAFa,MAAM,CAMlB;CACJ;;UAnkBa,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS;WAC/G,MAAM;WACN,MAAM;WACN,MAAM;WACN,MAAM;aACN,MAAM;cACN,QAAQ;YACR,MAAM"}
@@ -7,7 +7,7 @@ import LineBuilder from "../../../core/codegen/LineBuilder.js";
7
7
 
8
8
  /**
9
9
  * @typedef {object} WgslType
10
- * @property {'primitive' | 'vec' | 'mat' | 'array' | 'struct' | 'texture_2d' | 'sampler' | 'atomic' | 'unknown'} kind
10
+ * @property {'primitive' | 'abstract' | 'vec' | 'mat' | 'array' | 'struct' | 'texture_2d' | 'sampler' | 'atomic' | 'unknown'} kind
11
11
  * @property {string} [name]
12
12
  * @property {number} [size]
13
13
  * @property {number} [cols]
@@ -19,6 +19,19 @@ import LineBuilder from "../../../core/codegen/LineBuilder.js";
19
19
 
20
20
  const T_UNKNOWN = Object.freeze({ kind: 'unknown' });
21
21
  const T_I32 = Object.freeze({ kind: 'primitive', name: 'i32' });
22
+ const T_F32 = Object.freeze({ kind: 'primitive', name: 'f32' });
23
+
24
+ /**
25
+ * WGSL's two abstract numeric types. A bare literal has one (`2` is an AbstractInt, `0.5` an
26
+ * AbstractFloat), arithmetic between abstract operands keeps one, and so does a `const` declared
27
+ * without a type — at any scope. An abstract value becomes concrete where it meets a concrete
28
+ * operand, which gives it that operand's type, or where it is bound, passed, returned or stored.
29
+ * See {@link compileExpression} and {@link concretizeOperands}.
30
+ *
31
+ * An AbstractFloat is a binary64, so a const-expression of them is plain JS arithmetic.
32
+ */
33
+ const T_ABSTRACT_INT = Object.freeze({ kind: 'abstract', name: 'AbstractInt' });
34
+ const T_ABSTRACT_FLOAT = Object.freeze({ kind: 'abstract', name: 'AbstractFloat' });
22
35
 
23
36
  const VECTOR_ALIASES = {
24
37
  vec2i: { size: 2, scalar: 'i32' },
@@ -328,9 +341,9 @@ function literalToJs(text) {
328
341
  /**
329
342
  * The tracked type of a literal token, as far as its own spelling settles it.
330
343
  *
331
- * Only an explicit suffix is honoured. A bare `2043` is WGSL's AbstractInt, which takes its
332
- * concrete type from context this compiler does not track, so it stays unknown rather than being
333
- * guessed at.
344
+ * A suffix names a concrete type. Without one the literal is abstract: a bare `2043` is an
345
+ * AbstractInt and a bare `0.5` an AbstractFloat, and each takes a concrete type from where it is
346
+ * used (see {@link T_ABSTRACT_INT}).
334
347
  *
335
348
  * The suffix matters because operator selection reads these types. `index / 2043u` is truncating
336
349
  * integer division in WGSL and plain division in JavaScript, and the two differ for every pair
@@ -359,10 +372,10 @@ function literalType(text) {
359
372
  }
360
373
 
361
374
  if (/[.eE]/.test(t) && !/^0[xX]/.test(t)) {
362
- return { kind: 'primitive', name: 'f32' };
375
+ return T_ABSTRACT_FLOAT;
363
376
  }
364
377
 
365
- return T_UNKNOWN;
378
+ return T_ABSTRACT_INT;
366
379
  }
367
380
 
368
381
  // =========================================================================
@@ -1025,13 +1038,20 @@ function collectGlobalValue(c, node) {
1025
1038
  const name = ident.text;
1026
1039
  let type = type_node !== null ? parseTypeSpecifier(type_node) : T_UNKNOWN;
1027
1040
 
1028
- const expr = compileExpression(c, value_node);
1041
+ // A `const` without a type stays abstract, as it does in a function. An `override` is always
1042
+ // concrete, and an untyped one concretizes as a `let` does.
1043
+ const is_override = /\boverride\b/.test(node.text.slice(0, ident.startIndex - node.startIndex));
1044
+ const keeps_abstract = type_node === null && !is_override;
1045
+
1046
+ const expr = keeps_abstract
1047
+ ? compileExpressionAbstract(c, value_node)
1048
+ : compileExpression(c, value_node);
1029
1049
 
1030
1050
  // Infer the type from the RHS when there's no explicit annotation (mirrors the local
1031
1051
  // `let`/`var` path). Without this a `const M = mat3x3<f32>(...)` is left T_UNKNOWN, so a
1032
1052
  // later `M * v` can't tell M is a matrix and emits a vector multiply → length mismatch.
1033
1053
  if (type === T_UNKNOWN || type.kind === 'unknown') {
1034
- type = expr.type;
1054
+ type = keeps_abstract ? expr.type : concreteDefault(expr.type);
1035
1055
  }
1036
1056
 
1037
1057
  c.scope.declare(name, type);
@@ -1263,6 +1283,7 @@ function emitVariableOrValueStatement(c, node) {
1263
1283
  let kind = 'let';
1264
1284
  let opt_ident = null;
1265
1285
  let template = null;
1286
+ let is_wgsl_const = false;
1266
1287
 
1267
1288
  if (var_decl !== null) {
1268
1289
  // WGSL `var` is the mutable form → JS `let`.
@@ -1274,6 +1295,7 @@ function emitVariableOrValueStatement(c, node) {
1274
1295
  // Tree-sitter exposes the keyword as an unnamed leading token; read it from the source.
1275
1296
  kind = 'const';
1276
1297
  opt_ident = opt_ident_direct;
1298
+ is_wgsl_const = textBeforeFirstNamed(node).trim() === 'const';
1277
1299
  }
1278
1300
 
1279
1301
  const ident = namedChildByType(opt_ident, 'ident');
@@ -1282,11 +1304,15 @@ function emitVariableOrValueStatement(c, node) {
1282
1304
  let type = type_spec !== null ? parseTypeSpecifier(type_spec) : T_UNKNOWN;
1283
1305
 
1284
1306
  if (expr_node !== null) {
1285
- const expr = compileExpression(c, expr_node);
1286
- // Infer the type from the RHS when no explicit annotation is present. A bare integer
1287
- // literal concretises to i32 here, as WGSL does for `let x = 3;`.
1307
+ // A `const` without a type keeps an abstract initializer abstract: `const A = 2;` is an
1308
+ // AbstractInt, and `A * x` with an f32 x is an f32 product. A `let` or `var` concretizes
1309
+ // it, so `let x = 3;` is an i32 and `let h = 0.5;` an f32.
1310
+ const keeps_abstract = is_wgsl_const && type_spec === null;
1311
+ const expr = keeps_abstract
1312
+ ? compileExpressionAbstract(c, expr_node)
1313
+ : compileExpression(c, expr_node);
1288
1314
  if (type === T_UNKNOWN || type.kind === 'unknown') {
1289
- type = expr.abstract_int === true ? T_I32 : expr.type;
1315
+ type = keeps_abstract ? expr.type : concreteDefault(expr.type);
1290
1316
  }
1291
1317
  c.scope.declare(name, type);
1292
1318
  c.out.add(`${kind} ${identToJs(name)} = ${expr.code};`);
@@ -1542,7 +1568,7 @@ function emitForInitInline(c, node) {
1542
1568
  let type = type_spec !== null ? parseTypeSpecifier(type_spec) : T_UNKNOWN;
1543
1569
  if (type.kind === 'unknown' && init !== null) {
1544
1570
  // `for (var i = 0; ...)`: a bare integer literal concretises to i32, as in a `let`
1545
- type = init.abstract_int === true ? T_I32 : init.type;
1571
+ type = concreteDefault(init.type);
1546
1572
  }
1547
1573
  c.scope.declare(name, type);
1548
1574
  const value = init !== null ? init.code : defaultValueForType(type);
@@ -1758,12 +1784,38 @@ function emitFunctionCallStatement(c, node) {
1758
1784
  // =========================================================================
1759
1785
 
1760
1786
  /**
1761
- * Compile an expression node (any wrapper or specific kind).
1787
+ * Compile an expression whose value is used as a concrete one: bound, passed, returned, stored,
1788
+ * indexed with, branched on.
1789
+ *
1790
+ * An AbstractFloat result becomes an f32 here, which is what a WGSL AbstractFloat converts to
1791
+ * everywhere but an f16 context. Doing it by default, rather than at each place WGSL converts,
1792
+ * means a use this compiler has not thought of rounds like the device rather than staying
1793
+ * more accurate than it. An AbstractInt result is left as it is: its value is the same in every
1794
+ * type it can take, and a `let` still has to see it is abstract to make it an i32.
1795
+ *
1796
+ * {@link compileExpressionAbstract} is the form for the few places an abstract value stays
1797
+ * abstract: the operands of an operator, and the initializer of a `const` without a type.
1798
+ *
1762
1799
  * @param {Compiler} c
1763
1800
  * @param {Node} node
1764
- * @returns {{ code: string, type: WgslType }}
1801
+ * @returns {{ code: string, type: WgslType, value?: number }}
1765
1802
  */
1766
1803
  function compileExpression(c, node) {
1804
+ const e = compileExpressionAbstract(c, node);
1805
+ return isAbstractFloat(e.type) ? convertAbstract(e, 'f32') : e;
1806
+ }
1807
+
1808
+ /**
1809
+ * Compile an expression node (any wrapper or specific kind), leaving an abstract result abstract.
1810
+ *
1811
+ * `value` is carried alongside a literal, negated or parenthesised, so that converting it to f32
1812
+ * is a constant fold rather than a call at run time.
1813
+ *
1814
+ * @param {Compiler} c
1815
+ * @param {Node} node
1816
+ * @returns {{ code: string, type: WgslType, value?: number }}
1817
+ */
1818
+ function compileExpressionAbstract(c, node) {
1767
1819
  const u = unwrapExpression(node);
1768
1820
 
1769
1821
  // Binary operations
@@ -1809,15 +1861,15 @@ function compileExpression(c, node) {
1809
1861
 
1810
1862
  // Primary subkinds
1811
1863
  if (u.type === 'literal' || u.type === 'int_literal' || u.type === 'float_literal' || u.type === 'bool_literal') {
1812
- // A bare integer literal is WGSL's AbstractInt. Its concrete type comes from context this
1813
- // compiler does not track, so the type stays unknown, but operator selection still needs
1814
- // to know it is an integer: see integerDivision().
1815
- return { code: literalToJs(u.text), type: literalType(u.text), abstract_int: isBareIntLiteral(u.text) };
1864
+ // A bare literal is abstract (see literalType), and takes its concrete type where it is used
1865
+ const code = literalToJs(u.text);
1866
+ const type = literalType(u.text);
1867
+ return isAbstractType(type) ? { code, type, value: Number(code) } : { code, type };
1816
1868
  }
1817
1869
  if (u.type === 'paren_expression') {
1818
1870
  const inner = namedChildByType(u, 'expression');
1819
- const e = compileExpression(c, inner);
1820
- return { code: `(${e.code})`, type: e.type, abstract_int: e.abstract_int };
1871
+ const e = compileExpressionAbstract(c, inner);
1872
+ return { code: `(${e.code})`, type: e.type, value: e.value };
1821
1873
  }
1822
1874
  if (u.type === 'call_expression') {
1823
1875
  const call_phrase = namedChildByType(u, 'call_phrase');
@@ -1849,7 +1901,7 @@ function compileExpression(c, node) {
1849
1901
  function compileBinaryExpression(c, node, op_type, mode) {
1850
1902
  const named = node.namedChildren;
1851
1903
  if (named.length === 1) {
1852
- return compileExpression(c, named[0]);
1904
+ return compileExpressionAbstract(c, named[0]);
1853
1905
  }
1854
1906
 
1855
1907
  let op_text = null;
@@ -1870,8 +1922,10 @@ function compileBinaryExpression(c, node, op_type, mode) {
1870
1922
  return { code: node.text, type: T_UNKNOWN };
1871
1923
  }
1872
1924
 
1873
- const left = compileExpression(c, left_node);
1874
- const right = compileExpression(c, right_node);
1925
+ const [left, right] = concretizeOperands(
1926
+ compileExpressionAbstract(c, left_node),
1927
+ compileExpressionAbstract(c, right_node)
1928
+ );
1875
1929
 
1876
1930
  if (mode === 'arith') {
1877
1931
  const helper = ARITHMETIC_OP[op_text];
@@ -1908,11 +1962,10 @@ function compileBinaryExpression(c, node, op_type, mode) {
1908
1962
  if (f32_scalar !== undefined && isScalarF32(arith_type)) {
1909
1963
  actual_helper = f32_scalar;
1910
1964
  }
1965
+ // arithmetic on two AbstractInts is still AbstractInt, so `(1 + 2) / 2` is 1
1911
1966
  return {
1912
1967
  code: `wgsl.${actual_helper}(${left.code}, ${right.code})`,
1913
1968
  type: arith_type,
1914
- // arithmetic on two AbstractInts is still AbstractInt: `(1 + 2) / 2` is 1
1915
- abstract_int: left.abstract_int === true && right.abstract_int === true,
1916
1969
  };
1917
1970
  }
1918
1971
  }
@@ -2009,20 +2062,114 @@ function isIntegerType(t) {
2009
2062
  return false;
2010
2063
  }
2011
2064
 
2012
- /** True if the literal's spelling is a bare integer: no suffix, no fraction, no exponent. */
2013
- function isBareIntLiteral(text) {
2014
- return /^(0[xX][0-9a-fA-F]+|[0-9]+)$/.test(text.trim());
2065
+ /** True if `t` is AbstractInt or AbstractFloat. */
2066
+ function isAbstractType(t) {
2067
+ return t !== undefined && t !== null && t.kind === 'abstract';
2068
+ }
2069
+
2070
+ /** True if `t` is AbstractInt. */
2071
+ function isAbstractInt(t) {
2072
+ return isAbstractType(t) && t.name === 'AbstractInt';
2073
+ }
2074
+
2075
+ /** True if `t` is AbstractFloat. */
2076
+ function isAbstractFloat(t) {
2077
+ return isAbstractType(t) && t.name === 'AbstractFloat';
2078
+ }
2079
+
2080
+ /**
2081
+ * The type a declaration that must be concrete gives an initializer of type `t`: an AbstractInt
2082
+ * becomes i32 and an AbstractFloat f32, as in `let x = 3;` and `let h = 0.5;`. Anything else is
2083
+ * already concrete, or untracked.
2084
+ * @param {WgslType} t
2085
+ * @returns {WgslType}
2086
+ */
2087
+ function concreteDefault(t) {
2088
+ if (isAbstractInt(t)) return T_I32;
2089
+ if (isAbstractFloat(t)) return T_F32;
2090
+ return t;
2091
+ }
2092
+
2093
+ /**
2094
+ * An abstract operand converted to the concrete scalar type it meets.
2095
+ *
2096
+ * Only a float target changes the value. An AbstractFloat becoming an f32 is rounded to one, and
2097
+ * so is an AbstractInt too large for f32 to hold. A literal is folded at compile time, and is
2098
+ * emitted unchanged when f32 holds it already, which most literals in a shader are. An integer
2099
+ * target changes nothing: an AbstractInt has the same value in i32 and u32, and an AbstractFloat
2100
+ * cannot meet an integer in a valid shader.
2101
+ *
2102
+ * @param {{ code: string, type: WgslType, value?: number }} operand
2103
+ * @param {string} scalar the concrete scalar type's name
2104
+ * @returns {{ code: string, type: WgslType }}
2105
+ */
2106
+ function convertAbstract(operand, scalar) {
2107
+ if (!isAbstractType(operand.type)) return operand;
2108
+
2109
+ const type = scalar === 'f32' ? T_F32 : { kind: 'primitive', name: scalar };
2110
+
2111
+ if (scalar === 'f32') {
2112
+ if (operand.value === undefined) {
2113
+ return { code: `wgsl.f32(${operand.code})`, type };
2114
+ }
2115
+ const rounded = Math.fround(operand.value);
2116
+ return { code: rounded === operand.value ? operand.code : `(${rounded})`, type };
2117
+ }
2118
+
2119
+ if (scalar === 'f16') {
2120
+ return { code: `wgsl.f16(${operand.code})`, type };
2121
+ }
2122
+
2123
+ return { code: operand.code, type };
2124
+ }
2125
+
2126
+ /**
2127
+ * The operands of a binary operator, with an abstract one converted to the type of the concrete one
2128
+ * it meets, as WGSL converts it. `A * x` with an f32 x is an f32 product and `A * x` with a u32 x a
2129
+ * wrapping u32 one, for the same `const A = 2;`. Two abstract operands stay abstract: that is a
2130
+ * const-expression, evaluated at full precision.
2131
+ *
2132
+ * An operand the compiler cannot type is almost always a concrete value it cannot see into, like a
2133
+ * struct field or an array element. An AbstractFloat meeting one is taken to meet an f32, since a
2134
+ * float literal can only meet a float and f16 is rare — the type a float literal used to have here
2135
+ * regardless. An AbstractInt stays as it is, since the other side could be any of four types.
2136
+ *
2137
+ * @param {{ code: string, type: WgslType, value?: number }} left
2138
+ * @param {{ code: string, type: WgslType, value?: number }} right
2139
+ * @returns {Array<{ code: string, type: WgslType, value?: number }>}
2140
+ */
2141
+ function concretizeOperands(left, right) {
2142
+ const left_abstract = isAbstractType(left.type);
2143
+ const right_abstract = isAbstractType(right.type);
2144
+
2145
+ if (left_abstract === right_abstract) {
2146
+ return [left, right];
2147
+ }
2148
+
2149
+ const abstract = left_abstract ? left : right;
2150
+ const other = left_abstract ? right.type : left.type;
2151
+
2152
+ let scalar = null;
2153
+ if (other && other.kind === 'primitive') scalar = other.name;
2154
+ else if (other && (other.kind === 'vec' || other.kind === 'mat')) scalar = other.scalar;
2155
+ else if (isAbstractFloat(abstract.type)) scalar = 'f32';
2156
+
2157
+ if (scalar === null || scalar === 'bool') {
2158
+ return [left, right];
2159
+ }
2160
+
2161
+ const converted = convertAbstract(abstract, scalar);
2162
+ return left_abstract ? [converted, right] : [left, converted];
2015
2163
  }
2016
2164
 
2017
2165
  /**
2018
2166
  * True if WGSL evaluates `left / right` as integer division. Both operands integer-typed is the
2019
- * obvious case. A bare literal is AbstractInt and takes the other operand's integer type, so
2020
- * `index / 3` truncates; two bare literals divide as AbstractInt, so `7 / 2` is 3 even where an
2021
- * f32 is expected. Negation and parentheses keep a literal abstract: `index / -3` and
2022
- * `index / (3)` truncate too.
2167
+ * obvious case, and an abstract operand has already taken the other's type by now, so `index / 3`
2168
+ * truncates. Two AbstractInts divide as AbstractInt, so `7 / 2` is 3 even where an f32 is expected.
2169
+ * Negation and parentheses keep a literal abstract: `index / -3` and `index / (3)` truncate too.
2023
2170
  */
2024
2171
  function integerDivision(left, right) {
2025
- const isInt = (operand) => isIntegerType(operand.type) || operand.abstract_int === true;
2172
+ const isInt = (operand) => isIntegerType(operand.type) || isAbstractInt(operand.type);
2026
2173
  return isInt(left) && isInt(right);
2027
2174
  }
2028
2175
 
@@ -2087,7 +2234,8 @@ function scalarTypeSuffix(scalar) {
2087
2234
 
2088
2235
  /**
2089
2236
  * Pick the result type of an element-wise arithmetic op given the operand types.
2090
- * Vec wins over scalar; matrix wins over scalar; scalar otherwise.
2237
+ * Vec wins over scalar; matrix wins over scalar; a concrete scalar over an abstract one. Two
2238
+ * abstract operands give an abstract result, a float one if either is.
2091
2239
  */
2092
2240
  function inferBinaryArithResultType(a, b) {
2093
2241
  const isVec = (t) => t && t.kind === 'vec';
@@ -2100,6 +2248,9 @@ function inferBinaryArithResultType(a, b) {
2100
2248
  if (isMat(b)) return b;
2101
2249
  if (isPrim(a)) return a;
2102
2250
  if (isPrim(b)) return b;
2251
+ if (isAbstractType(a) && isAbstractType(b)) {
2252
+ return isAbstractFloat(a) || isAbstractFloat(b) ? T_ABSTRACT_FLOAT : T_ABSTRACT_INT;
2253
+ }
2103
2254
  return T_UNKNOWN;
2104
2255
  }
2105
2256
 
@@ -2119,6 +2270,8 @@ function inferRawBinaryResultType(a, b, op) {
2119
2270
  if (b && b.kind === 'primitive') return b;
2120
2271
  if (a && a.kind === 'vec') return a;
2121
2272
  if (b && b.kind === 'vec') return b;
2273
+ // `1 << 8` is still an AbstractInt
2274
+ if (isAbstractInt(a) && isAbstractInt(b)) return T_ABSTRACT_INT;
2122
2275
  return T_UNKNOWN;
2123
2276
  }
2124
2277
 
@@ -2127,12 +2280,18 @@ function compileUnaryExpression(c, node) {
2127
2280
  const prefix = textBeforeFirstNamed(node).trim();
2128
2281
 
2129
2282
  if (prefix === '') {
2130
- return compileExpression(c, named[0]);
2283
+ return compileExpressionAbstract(c, named[0]);
2131
2284
  }
2132
2285
 
2133
- const operand = compileExpression(c, named[named.length - 1]);
2286
+ const operand = compileExpressionAbstract(c, named[named.length - 1]);
2134
2287
 
2135
- if (prefix === '-') return { code: `wgsl.neg(${operand.code})`, type: operand.type, abstract_int: operand.abstract_int };
2288
+ if (prefix === '-') {
2289
+ return {
2290
+ code: `wgsl.neg(${operand.code})`,
2291
+ type: operand.type,
2292
+ value: operand.value === undefined ? undefined : -operand.value,
2293
+ };
2294
+ }
2136
2295
  if (prefix === '!') return { code: `!${operand.code}`, type: operand.type };
2137
2296
  if (prefix === '~') return { code: `wgsl.not(${operand.code})`, type: operand.type };
2138
2297
  if (prefix === '*' || prefix === '&') return { code: operand.code, type: operand.type };
@@ -2144,8 +2303,8 @@ function compileSingularExpression(c, node) {
2144
2303
  const named = node.namedChildren;
2145
2304
  const head = named[0];
2146
2305
  const head_result = head.type === 'primary_expression'
2147
- ? compileExpression(c, unwrapExpression(head))
2148
- : compileExpression(c, head);
2306
+ ? compileExpressionAbstract(c, unwrapExpression(head))
2307
+ : compileExpressionAbstract(c, head);
2149
2308
 
2150
2309
  let code = head_result.code;
2151
2310
  let type = head_result.type;
@@ -2158,9 +2317,9 @@ function compileSingularExpression(c, node) {
2158
2317
  type = next.type;
2159
2318
  }
2160
2319
 
2161
- // a bare literal reached through a singular expression is still AbstractInt; anything with an
2162
- // access specifier on it is not a literal
2163
- return { code, type, abstract_int: named.length === 1 ? head_result.abstract_int : undefined };
2320
+ // a bare literal reached through a singular expression is still a literal; anything with an
2321
+ // access specifier on it is not one
2322
+ return { code, type, value: named.length === 1 ? head_result.value : undefined };
2164
2323
  }
2165
2324
 
2166
2325
  /**
@@ -2266,15 +2425,27 @@ function compileCallPhraseTyped(c, node) {
2266
2425
  const template = namedChildByType(ident_node, 'template_list');
2267
2426
 
2268
2427
  /** @type {Array<{ code: string, type: WgslType }>} */
2269
- const arg_results = [];
2428
+ let arg_results = [];
2270
2429
  if (arg_list !== null) {
2271
2430
  const comma_list = namedChildByType(arg_list, 'expression_comma_list');
2272
2431
  if (comma_list !== null) {
2273
2432
  for (const arg of namedChildrenByType(comma_list, 'expression')) {
2274
- arg_results.push(compileExpression(c, arg));
2433
+ arg_results.push(compileExpressionAbstract(c, arg));
2275
2434
  }
2276
2435
  }
2277
2436
  }
2437
+
2438
+ // A call's arguments are concrete values, as in compileExpression, except for an element-wise
2439
+ // builtin all of whose arguments are abstract: WGSL evaluates `sqrt(2.0)` as an AbstractFloat.
2440
+ const const_evaluated = ELEMENT_WISE_BUILTIN.has(callee_name)
2441
+ && !c.functions.has(callee_name)
2442
+ && arg_results.length > 0
2443
+ && arg_results.every(a => isAbstractType(a.type));
2444
+
2445
+ if (!const_evaluated) {
2446
+ arg_results = arg_results.map(a => isAbstractFloat(a.type) ? convertAbstract(a, 'f32') : a);
2447
+ }
2448
+
2278
2449
  const args = arg_results.map(a => a.code);
2279
2450
 
2280
2451
  // 1) Vec aliases: vec3f, vec4i, vec2h, etc.
@@ -2430,26 +2601,47 @@ function compileCallPhraseTyped(c, node) {
2430
2601
  */
2431
2602
  const INTEGER_TYPED_BUILTIN = new Set(['abs', 'firstLeadingBit', 'firstTrailingBit']);
2432
2603
 
2604
+ /**
2605
+ * Element-wise builtins: the result has the type of the arguments. Most are vector-preserving
2606
+ * math; subgroupBroadcastFirst is not math, but has the same shape.
2607
+ * @type {Set<string>}
2608
+ */
2609
+ const ELEMENT_WISE_BUILTIN = new Set([
2610
+ 'abs', 'sign', 'floor', 'ceil', 'round', 'trunc', 'fract', 'sqrt', 'inverseSqrt',
2611
+ 'exp', 'exp2', 'log', 'log2', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan',
2612
+ 'pow', 'atan2', 'min', 'max', 'step', 'clamp', 'saturate', 'mix', 'smoothstep',
2613
+ 'normalize', 'reflect', 'fma',
2614
+ 'subgroupBroadcastFirst',
2615
+ ]);
2616
+
2617
+ /**
2618
+ * The common type of a builtin's same-typed arguments: the first vector or matrix, else the first
2619
+ * concrete scalar — `max(0, x)` with a u32 x is a u32 — else their abstract type if all of them
2620
+ * are abstract, else the first argument's.
2621
+ * @param {Array<{ type: WgslType }>} args
2622
+ * @returns {WgslType}
2623
+ */
2624
+ function commonArgumentType(args) {
2625
+ for (const a of args) {
2626
+ if (a.type && (a.type.kind === 'vec' || a.type.kind === 'mat')) return a.type;
2627
+ }
2628
+ for (const a of args) {
2629
+ if (a.type && a.type.kind === 'primitive') return a.type;
2630
+ }
2631
+ if (args.length > 0 && args.every(a => isAbstractType(a.type))) {
2632
+ return args.some(a => isAbstractFloat(a.type)) ? T_ABSTRACT_FLOAT : T_ABSTRACT_INT;
2633
+ }
2634
+ if (args[0] && args[0].type) return args[0].type;
2635
+ return T_UNKNOWN;
2636
+ }
2637
+
2433
2638
  /**
2434
2639
  * Best-effort return type for WGSL builtins commonly used in compute shaders.
2435
2640
  * Handles the cases needed for accurate swizzle / member-access codegen downstream.
2436
2641
  */
2437
2642
  function inferBuiltinReturnType(name, args) {
2438
- // Element-wise vector-preserving math: result follows the first vector argument.
2439
- const ELEMENT_WISE = new Set([
2440
- 'abs', 'sign', 'floor', 'ceil', 'round', 'trunc', 'fract', 'sqrt', 'inverseSqrt',
2441
- 'exp', 'exp2', 'log', 'log2', 'sin', 'cos', 'tan', 'asin', 'acos', 'atan',
2442
- 'pow', 'atan2', 'min', 'max', 'step', 'clamp', 'saturate', 'mix', 'smoothstep',
2443
- 'normalize', 'reflect', 'fma',
2444
- // not math, but the same shape: the result has the type of its one argument
2445
- 'subgroupBroadcastFirst',
2446
- ]);
2447
- if (ELEMENT_WISE.has(name)) {
2448
- for (const a of args) {
2449
- if (a.type && (a.type.kind === 'vec' || a.type.kind === 'mat')) return a.type;
2450
- }
2451
- if (args[0] && args[0].type) return args[0].type;
2452
- return T_UNKNOWN;
2643
+ if (ELEMENT_WISE_BUILTIN.has(name)) {
2644
+ return commonArgumentType(args);
2453
2645
  }
2454
2646
  if (name === 'length' || name === 'distance' || name === 'dot' || name === 'determinant') {
2455
2647
  return { kind: 'primitive', name: 'f32' };
@@ -2461,9 +2653,8 @@ function inferBuiltinReturnType(name, args) {
2461
2653
  }
2462
2654
  if (name === 'all' || name === 'any') return { kind: 'primitive', name: 'bool' };
2463
2655
  if (name === 'select') {
2464
- if (args[0] && args[0].type) return args[0].type;
2465
- if (args[1] && args[1].type) return args[1].type;
2466
- return T_UNKNOWN;
2656
+ // the two values; the third argument is the condition
2657
+ return commonArgumentType(args.slice(0, 2));
2467
2658
  }
2468
2659
  if (name === 'textureLoad' || name === 'textureSampleLevel' || name === 'textureSample' || name === 'textureSampleGrad') {
2469
2660
  return { kind: 'vec', size: 4, scalar: 'f32' };
@@ -1,20 +0,0 @@
1
- /**
2
- * Interactive editors for particle parameter tracks: a draggable curve for the scalar
3
- * `scale` track, a gradient with draggable stops for the `color` track. Tracks with any
4
- * other name render nothing — the engine defines exactly these two.
5
- */
6
- export class ParameterLookupTableEditor extends TypeEditor<any> {
7
- constructor();
8
- get schema(): {
9
- properties: {
10
- on: {
11
- transient: boolean;
12
- };
13
- };
14
- };
15
- build(parent: any, field: any, registry: any): ColorLutGradientView | ScalarLutCurveView;
16
- }
17
- import { TypeEditor } from "../../TypeEditor.js";
18
- import { ColorLutGradientView } from "../../../../view/particles/ColorLutGradientView.js";
19
- import { ScalarLutCurveView } from "../../../../view/particles/ScalarLutCurveView.js";
20
- //# sourceMappingURL=ParameterLookupTableEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParameterLookupTableEditor.d.ts","sourceRoot":"","sources":["../../../../../../editor/ecs/component/editors/ecs/ParameterLookupTableEditor.js"],"names":[],"mappings":"AAIA;;;;GAIG;AACH;;IACI;;;;;;MAQC;IAED,yFAaC;CACJ;2BAhC0B,qBAAqB;qCAFX,oDAAoD;mCACtD,kDAAkD"}
@@ -1,35 +0,0 @@
1
- import { ColorLutGradientView } from "../../../../view/particles/ColorLutGradientView.js";
2
- import { ScalarLutCurveView } from "../../../../view/particles/ScalarLutCurveView.js";
3
- import { TypeEditor } from "../../TypeEditor.js";
4
-
5
- /**
6
- * Interactive editors for particle parameter tracks: a draggable curve for the scalar
7
- * `scale` track, a gradient with draggable stops for the `color` track. Tracks with any
8
- * other name render nothing — the engine defines exactly these two.
9
- */
10
- export class ParameterLookupTableEditor extends TypeEditor {
11
- get schema() {
12
- return {
13
- properties: {
14
- on: {
15
- transient: true
16
- }
17
- }
18
- };
19
- }
20
-
21
- build(parent, field, registry) {
22
-
23
- /**
24
- * @type {ParameterLookupTable}
25
- */
26
- const lut = field.adapter.read(parent, field.name);
27
- const trackName = field.adapter.read(parent, "name");
28
-
29
- if (trackName === "scale") {
30
- return new ScalarLutCurveView({ lut });
31
- } else if (trackName === "color") {
32
- return new ColorLutGradientView({ lut });
33
- }
34
- }
35
- }
@@ -1,12 +0,0 @@
1
- export class ParameterTrackEditor extends ObjectEditor {
2
- get schema(): {
3
- properties: {
4
- name: {
5
- editor: EnumEditor;
6
- };
7
- };
8
- };
9
- }
10
- import { ObjectEditor } from "../primitive/ObjectEditor.js";
11
- import { EnumEditor } from "../common/EnumEditor.js";
12
- //# sourceMappingURL=ParameterTrackEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParameterTrackEditor.d.ts","sourceRoot":"","sources":["../../../../../../editor/ecs/component/editors/ecs/ParameterTrackEditor.js"],"names":[],"mappings":"AAMA;IACI;;;;;;MAQC;CACJ;6BAZ4B,8BAA8B;2BADhC,yBAAyB"}
@@ -1,17 +0,0 @@
1
- import {
2
- ParticleParameters
3
- } from "../../../../../src/engine/graphics/particles/particular/engine/emitter/ParticleParameters.js";
4
- import { EnumEditor } from "../common/EnumEditor.js";
5
- import { ObjectEditor } from "../primitive/ObjectEditor.js";
6
-
7
- export class ParameterTrackEditor extends ObjectEditor {
8
- get schema() {
9
- return {
10
- properties: {
11
- name: {
12
- editor: new EnumEditor(ParticleParameters)
13
- }
14
- }
15
- };
16
- }
17
- }
@@ -1,14 +0,0 @@
1
- export class ParameterTrackSetEditor extends ObjectEditor {
2
- get schema(): {
3
- properties: {
4
- tracks: {
5
- type: typeof List;
6
- type_parameters: (typeof ParameterTrack)[];
7
- };
8
- };
9
- };
10
- }
11
- import { ObjectEditor } from "../primitive/ObjectEditor.js";
12
- import List from "../../../../../src/core/collection/list/List.js";
13
- import { ParameterTrack } from "../../../../../src/engine/graphics/particles/particular/engine/parameter/ParameterTrack.js";
14
- //# sourceMappingURL=ParameterTrackSetEditor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ParameterTrackSetEditor.d.ts","sourceRoot":"","sources":["../../../../../../editor/ecs/component/editors/ecs/ParameterTrackSetEditor.js"],"names":[],"mappings":"AAMA;IACI;;;;;;;MASC;CACJ;6BAhB4B,8BAA8B;iBAD1C,iDAAiD;+BAI3D,4FAA4F"}