@woosh/meep-engine 3.11.2 → 3.12.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 (551) hide show
  1. package/README.md +14 -18
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/SelectionVisualizer.js +127 -127
  4. package/editor/entity_world_bounds.js +27 -27
  5. package/editor/particles/rebuildParticleEmitter.js +31 -31
  6. package/editor/process/SymbolicDisplayProcess.js +1 -1
  7. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  8. package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
  9. package/editor/prototypeEditorShell.js +156 -156
  10. package/editor/selection/editor_pick.js +130 -130
  11. package/editor/selection/screen_rect_frustum.js +119 -119
  12. package/editor/tools/v2/TransformControls.js +971 -971
  13. package/package.json +1 -1
  14. package/src/engine/Engine.d.ts +3 -3
  15. package/src/engine/Engine.d.ts.map +1 -1
  16. package/src/engine/Engine.js +726 -726
  17. package/src/engine/EngineHarness.d.ts +1 -1
  18. package/src/engine/EngineHarness.js +590 -590
  19. package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
  20. package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
  21. package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
  22. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
  23. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  24. package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
  25. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
  26. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
  27. package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
  28. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
  29. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
  30. package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
  31. package/src/engine/graphics/ecs/water/Water.js +104 -104
  32. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
  33. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
  35. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
  36. package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
  37. package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
  38. package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
  39. package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
  40. package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
  41. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
  42. package/src/engine/graphics3/AnimationSystem.js +352 -0
  43. package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
  44. package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
  45. package/src/engine/graphics3/AnimationSystem3.js +6 -348
  46. package/src/engine/graphics3/CameraSystem.d.ts +49 -0
  47. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
  48. package/src/engine/graphics3/CameraSystem.js +170 -0
  49. package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
  50. package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
  51. package/src/engine/graphics3/CameraSystem3.js +6 -166
  52. package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
  53. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
  54. package/src/engine/graphics3/DebugDrawSystem.js +205 -0
  55. package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
  56. package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
  57. package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
  58. package/src/engine/graphics3/DecalSystem.d.ts +81 -0
  59. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
  60. package/src/engine/graphics3/DecalSystem.js +441 -0
  61. package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
  62. package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
  63. package/src/engine/graphics3/DecalSystem3.js +6 -437
  64. package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
  65. package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
  66. package/src/engine/graphics3/FogOfWarSystem.js +265 -0
  67. package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
  68. package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
  69. package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
  70. package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
  71. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
  72. package/src/engine/graphics3/GraphicsEngine.js +790 -0
  73. package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
  74. package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
  75. package/src/engine/graphics3/GraphicsEngine3.js +6 -786
  76. package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
  77. package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
  78. package/src/engine/graphics3/HighlightSystem.js +241 -0
  79. package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
  80. package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
  81. package/src/engine/graphics3/HighlightSystem3.js +6 -237
  82. package/src/engine/graphics3/LightSystem.d.ts +40 -0
  83. package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
  84. package/src/engine/graphics3/LightSystem.js +211 -0
  85. package/src/engine/graphics3/LightSystem3.d.ts +6 -36
  86. package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
  87. package/src/engine/graphics3/LightSystem3.js +6 -207
  88. package/src/engine/graphics3/MeshSystem.d.ts +106 -0
  89. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
  90. package/src/engine/graphics3/MeshSystem.js +647 -0
  91. package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
  92. package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
  93. package/src/engine/graphics3/MeshSystem3.js +6 -642
  94. package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
  95. package/src/engine/graphics3/ParticipatingMedia.js +203 -203
  96. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
  97. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
  98. package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
  99. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
  100. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
  101. package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
  102. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
  103. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
  104. package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
  105. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
  106. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
  107. package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
  108. package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
  109. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
  110. package/src/engine/graphics3/PathDisplaySystem.js +309 -0
  111. package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
  112. package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
  113. package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
  114. package/src/engine/graphics3/Pickable.d.ts +1 -1
  115. package/src/engine/graphics3/Pickable.js +65 -65
  116. package/src/engine/graphics3/PickingQuery.d.ts +1 -1
  117. package/src/engine/graphics3/PickingQuery.js +48 -48
  118. package/src/engine/graphics3/PickingSystem.d.ts +67 -0
  119. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
  120. package/src/engine/graphics3/PickingSystem.js +273 -0
  121. package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
  122. package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
  123. package/src/engine/graphics3/PickingSystem3.js +6 -269
  124. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
  125. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
  126. package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
  127. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
  128. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
  129. package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
  130. package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
  131. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
  132. package/src/engine/graphics3/TerrainSystem.js +566 -0
  133. package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
  134. package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
  135. package/src/engine/graphics3/TerrainSystem3.js +6 -562
  136. package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
  137. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
  138. package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
  139. package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
  140. package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
  141. package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
  142. package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
  143. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
  144. package/src/engine/graphics3/Trail3DSystem.js +221 -0
  145. package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
  146. package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
  147. package/src/engine/graphics3/Trail3DSystem3.js +6 -217
  148. package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
  149. package/src/engine/graphics3/VolumetricLightMap.js +2 -2
  150. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
  151. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
  152. package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
  153. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
  154. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
  155. package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
  156. package/src/engine/graphics3/WaterSystem.d.ts +59 -0
  157. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
  158. package/src/engine/graphics3/WaterSystem.js +293 -0
  159. package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
  160. package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
  161. package/src/engine/graphics3/WaterSystem3.js +6 -289
  162. package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
  163. package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
  164. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
  165. package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
  166. package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
  167. package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
  168. package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
  169. package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
  170. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
  171. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  172. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
  173. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
  174. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  175. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
  176. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
  177. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  178. package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
  179. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
  180. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
  181. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
  182. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
  183. package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
  184. package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
  185. package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
  186. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
  187. package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
  188. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +16 -2
  189. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
  190. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +28 -4
  191. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +1 -1
  192. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  193. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +5 -2
  194. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +564 -451
  195. package/src/shade/device/ShadeGPUCommandContext.d.ts +18 -2
  196. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  197. package/src/shade/device/ShadeGPUCommandContext.js +994 -940
  198. package/src/shade/device/immediate_data_supported.d.ts +33 -0
  199. package/src/shade/device/immediate_data_supported.d.ts.map +1 -0
  200. package/src/shade/device/immediate_data_supported.js +53 -0
  201. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +18 -0
  202. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
  203. package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +24 -0
  204. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts +7 -0
  205. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
  206. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +49 -1
  207. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  208. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -2
  209. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts +65 -0
  210. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts.map +1 -0
  211. package/src/shade/device/mock/SoftwareGPUImmediateData.js +160 -0
  212. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +7 -0
  213. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  214. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +50 -0
  215. package/src/shade/device/mock/pipeline_immediate_size.d.ts +11 -0
  216. package/src/shade/device/mock/pipeline_immediate_size.d.ts.map +1 -0
  217. package/src/shade/device/mock/pipeline_immediate_size.js +18 -0
  218. package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
  219. package/src/shade/device/pipeline/PipelineLayoutManager.js +1 -0
  220. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  221. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
  222. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  223. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
  224. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  225. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
  226. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
  227. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
  228. package/src/shade/renderer/GraphicsContext.d.ts +9 -2
  229. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  230. package/src/shade/renderer/GraphicsContext.js +13 -1
  231. package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
  232. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
  233. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  234. package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
  235. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  236. package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
  237. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  238. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
  239. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  240. package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
  241. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  242. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
  243. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  244. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
  245. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  246. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
  247. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  248. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
  249. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  250. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
  251. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  252. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
  253. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  254. package/src/shade/renderer/atmosphere/GPUSky.js +145 -142
  255. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +34 -0
  256. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -0
  257. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +36 -0
  258. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +20 -0
  259. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -0
  260. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +25 -0
  261. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +14 -1
  262. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  263. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +163 -177
  264. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts +20 -0
  265. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts.map +1 -0
  266. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.js +46 -0
  267. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +11 -1
  268. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  269. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +57 -27
  270. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +19 -1
  271. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  272. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +69 -33
  273. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +13 -0
  274. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  275. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +35 -35
  276. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts +13 -0
  277. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts.map +1 -0
  278. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.js +38 -0
  279. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts +17 -0
  280. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts.map +1 -0
  281. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js +29 -0
  282. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts +21 -0
  283. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts.map +1 -0
  284. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.js +42 -0
  285. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts +2 -2
  286. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  287. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -84
  288. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  289. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +215 -204
  290. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  291. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +79 -67
  292. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
  293. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  294. package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
  295. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
  296. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  297. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
  298. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
  299. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
  300. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  301. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
  302. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
  303. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
  304. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  305. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
  306. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
  307. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
  308. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  309. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
  310. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
  311. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
  312. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
  313. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  314. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  315. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
  316. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  317. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
  318. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  319. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
  320. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  321. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
  322. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  323. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
  324. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  325. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
  326. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
  327. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
  328. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
  329. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
  330. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
  331. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
  332. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  333. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +10 -9
  334. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
  335. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  336. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
  337. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
  338. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
  339. package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
  340. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  341. package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
  342. package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
  343. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  344. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
  345. package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
  346. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  347. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
  348. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  349. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
  350. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  351. package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
  352. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  353. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
  354. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  355. package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
  356. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
  357. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
  358. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
  359. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  360. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
  361. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  362. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
  363. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  364. package/src/shade/renderer/postprocess/gtao/GTAO.js +4 -0
  365. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  366. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
  367. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
  368. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
  369. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  370. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
  371. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  372. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
  373. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  374. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
  375. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
  376. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
  377. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
  378. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  379. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +341 -345
  380. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  381. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
  382. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
  383. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
  384. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
  385. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  386. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +57 -57
  387. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  388. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
  389. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  390. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
  391. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
  392. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
  393. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  394. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
  395. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  396. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
  397. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
  398. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
  399. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
  400. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
  401. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  402. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
  403. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  404. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
  405. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  406. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
  407. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  408. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
  409. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  410. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
  411. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  412. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -3
  413. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  414. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
  415. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
  416. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
  417. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  418. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
  419. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  420. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +77 -81
  421. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
  422. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
  423. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
  424. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
  425. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
  426. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
  427. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
  428. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  429. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +5 -1
  430. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  431. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
  432. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  433. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
  434. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  435. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
  436. package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
  437. package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
  438. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
  439. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
  440. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
  441. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
  442. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
  443. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
  444. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
  445. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
  446. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  447. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
  448. package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
  449. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  450. package/src/shade/renderer/shader/ComputeShader.js +350 -292
  451. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  452. package/src/shade/renderer/shader/ImageShader.js +217 -214
  453. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
  454. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  455. package/src/shade/renderer/shader/ShaderDescriptor.js +46 -0
  456. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +18 -0
  457. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -0
  458. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +32 -0
  459. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts +7 -0
  460. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts.map +1 -1
  461. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js +17 -6
  462. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts +21 -0
  463. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -0
  464. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +69 -0
  465. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts +9 -0
  466. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts.map +1 -0
  467. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.js +22 -0
  468. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts +16 -0
  469. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts.map +1 -0
  470. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js +41 -0
  471. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts +11 -0
  472. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts.map +1 -1
  473. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.js +15 -19
  474. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts +23 -0
  475. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts.map +1 -0
  476. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js +44 -0
  477. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.d.ts.map +1 -1
  478. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js +1 -4
  479. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +7 -1
  480. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
  481. package/src/shade/renderer/shader/compiler/CodeChunk.js +37 -2
  482. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.d.ts.map +1 -1
  483. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.js +6 -0
  484. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +1 -1
  485. package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +1 -1
  486. package/src/shade/renderer/shader/graph/graph_image_pass.js +1 -1
  487. package/src/shade/renderer/shader/graph/graph_prepare_bindings.d.ts.map +1 -1
  488. package/src/shade/renderer/shader/graph/graph_prepare_bindings.js +7 -0
  489. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts +3 -1
  490. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
  491. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +12 -1
  492. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  493. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +1 -0
  494. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts +21 -0
  495. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts.map +1 -0
  496. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.js +21 -0
  497. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +59 -1
  498. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  499. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +195 -2
  500. package/src/shade/renderer/shader/type/type_has_arrays.d.ts +14 -0
  501. package/src/shade/renderer/shader/type/type_has_arrays.d.ts.map +1 -0
  502. package/src/shade/renderer/shader/type/type_has_arrays.js +33 -0
  503. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
  504. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
  505. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
  506. package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
  507. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
  508. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
  509. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
  510. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  511. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
  512. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
  513. package/src/shade/renderer/view/GPUViewSkyContext.js +169 -173
  514. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
  515. package/src/shade/renderer/volumetrics/NOTES.md +238 -0
  516. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -145
  517. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -1
  518. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +38 -15
  519. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +14 -2
  520. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  521. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +591 -577
  522. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +17 -0
  523. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  524. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +20 -2
  525. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  526. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +29 -18
  527. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +260 -260
  528. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +53 -3
  529. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
  530. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +175 -59
  531. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
  532. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  533. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
  534. package/src/shade/renderer/water/shader_water.js +246 -246
  535. package/src/shade/vitest.setup.mjs +1 -1
  536. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
  537. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +8 -1
  538. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  539. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +1325 -1297
  540. package/src/view/minimap/Minimap.d.ts +2 -2
  541. package/src/view/minimap/Minimap.d.ts.map +1 -1
  542. package/src/view/minimap/Minimap.js +225 -225
  543. package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
  544. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  545. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  546. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
  547. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
  548. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
  549. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts +0 -2
  550. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts.map +0 -1
  551. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.js +0 -1
@@ -1,291 +1,291 @@
1
- import { assert } from "../../../core/assert.js";
2
- import { WGSLParser } from "../WGSLParser.js";
3
- import { WGSLJavaScriptCompiler } from "./WGSLJavaScriptCompiler.js";
4
- import { WGSLLanguageCore } from "./WGSLLanguageCore.js";
5
-
6
- /**
7
- * Emulates a {@link ComputeShader} on the CPU by translating its WGSL source to JavaScript
8
- * and dispatching threads point-wise.
9
- *
10
- * Intended for testing — feed the same shader instance you'd run on a GPU, drive it from a
11
- * unit test, and inspect the resulting bindings or texture state.
12
- *
13
- * Texture bindings expect a {@link CPUBitmapData} (1D / 2D / 3D inferred from
14
- * the bitmap's `size`). Sampling routes through {@link cpu_texture_sample},
15
- * which honours the bound sampler's address modes and filter.
16
- *
17
- * @example
18
- * const shader = ComputeShader.from({...});
19
- * const emu = await ComputeShaderEmulator.create(shader);
20
- * emu.bindings = { data: someArray };
21
- * emu.dispatch([0, 0, 0]); // global_invocation_id = (0,0,0)
22
- * emu.dispatch([1, 0, 0]); // global_invocation_id = (1,0,0)
23
- * // ... bindings now contain results
24
- */
25
- export class ComputeShaderEmulator {
26
-
27
- /** @type {string} */
28
- #source;
29
-
30
- /** @type {string} */
31
- #js_source;
32
-
33
- /** @type {object} */
34
- #module;
35
-
36
- /** @type {object} */
37
- #workgroup_state;
38
-
39
- /** @type {object} */
40
- #language_core;
41
-
42
- /**
43
- * Bindings currently in effect. Keys match the WGSL variable names declared with
44
- * `@group(...) @binding(...) var ...: T`.
45
- * @type {object}
46
- */
47
- bindings = {};
48
-
49
- /**
50
- * Construct directly when you already have the WGSL source string.
51
- *
52
- * For most use cases prefer {@link create} or {@link fromComputeShader}.
53
- *
54
- * @param {object} options
55
- * @param {object} options.module — the compiled module returned by the JS factory
56
- * @param {string} options.source — the original WGSL source
57
- * @param {string} options.jsSource — the generated JS source (kept for debugging)
58
- * @param {object} options.languageCore — the runtime `wgsl` object
59
- */
60
- constructor({ module, source, jsSource, languageCore }) {
61
- this.#module = module;
62
- this.#source = source;
63
- this.#js_source = jsSource;
64
- this.#language_core = languageCore;
65
- // Fragment-stage entries have no var<workgroup>, so the module skips emitting the
66
- // workgroup-state factory; in that case workgroup_state is a no-op empty object.
67
- this.#workgroup_state = typeof module.create_workgroup_state === 'function'
68
- ? module.create_workgroup_state()
69
- : {};
70
- }
71
-
72
- /**
73
- * @returns {string} the WGSL source.
74
- */
75
- get source() {
76
- return this.#source;
77
- }
78
-
79
- /**
80
- * @returns {string} the generated JavaScript source. Useful for debugging.
81
- */
82
- get jsSource() {
83
- return this.#js_source;
84
- }
85
-
86
- /**
87
- * @returns {object} the language core object passed to the generated JS as `wgsl`.
88
- */
89
- get languageCore() {
90
- return this.#language_core;
91
- }
92
-
93
- /**
94
- * @returns {string} the name of the entry function (whether @compute or @fragment).
95
- */
96
- get entryName() {
97
- return this.#module.entry_name;
98
- }
99
-
100
- /**
101
- * @returns {'compute' | 'fragment'} which shader stage the entry function targets.
102
- */
103
- get stage() {
104
- return this.#module.stage;
105
- }
106
-
107
- /**
108
- * @returns {number[] | undefined} the workgroup size for @compute entries (undefined for @fragment).
109
- */
110
- get workgroup_size() {
111
- return this.#module.workgroup_size;
112
- }
113
-
114
- /**
115
- * @returns {string[]} the entry function's parameter names, in declaration order.
116
- */
117
- get entryParamNames() {
118
- return this.#module.param_names;
119
- }
120
-
121
- /**
122
- * @returns {object} the current workgroup state — workgroup-scope variables live here.
123
- */
124
- get workgroup() {
125
- return this.#workgroup_state;
126
- }
127
-
128
- /**
129
- * Reset the workgroup state. Call between simulated workgroups so that `var<workgroup>`
130
- * variables start fresh. No-op for fragment-stage entries.
131
- */
132
- resetWorkgroup() {
133
- if (typeof this.#module.create_workgroup_state === 'function') {
134
- this.#workgroup_state = this.#module.create_workgroup_state();
135
- }
136
- }
137
-
138
- /**
139
- * Dispatch a single thread (point-wise simulation). The arguments are the entry function's
140
- * parameters, in declaration order — for example a `@builtin(global_invocation_id)` param of
141
- * type `vec3<u32>` is supplied as a 3-element array.
142
- *
143
- * For @compute entries, returns whatever the entry function returns (typically nothing —
144
- * results land in bindings). For @fragment entries, returns the fragment's output value
145
- * (typically a vec4 for `@location(0)` or a struct of locations).
146
- *
147
- * @param {...*} mainArgs
148
- * @returns {*}
149
- */
150
- dispatch(...mainArgs) {
151
- if (this.#module.stage === 'fragment') {
152
- return this.#module.entry(this.bindings, ...mainArgs);
153
- }
154
- return this.#module.entry(this.bindings, this.#workgroup_state, ...mainArgs);
155
- }
156
-
157
- /**
158
- * Compile a WGSL source string into an executable emulator. Requires a `@compute` or
159
- * `@fragment` entry function; for chunks of pure helper code with no entry, use
160
- * {@link fromCodeChunk}.
161
- *
162
- * @param {string} source
163
- * @param {object} [options]
164
- * @param {WGSLParser} [options.parser] — share a parser across multiple compiles
165
- * @param {object} [options.languageCore] — defaults to {@link WGSLLanguageCore}
166
- * @returns {Promise<ComputeShaderEmulator>}
167
- */
168
- static async fromSource(source, options = {}) {
169
- const { module, jsSource } = await compileWgslSource(source, options);
170
- if (typeof module.entry !== 'function') {
171
- throw new Error('ComputeShaderEmulator.fromSource: WGSL has no @compute or @fragment entry function. Use ComputeShaderEmulator.fromCodeChunk for library-style code.');
172
- }
173
- return new ComputeShaderEmulator({
174
- module,
175
- source,
176
- jsSource,
177
- languageCore: options.languageCore || WGSLLanguageCore,
178
- });
179
- }
180
-
181
- /**
182
- * Build an emulator from an existing {@link ComputeShader} instance.
183
- *
184
- * @param {import("../../renderer/shader/ComputeShader.js").ComputeShader} shader
185
- * @param {object} [options]
186
- * @param {WGSLParser} [options.parser]
187
- * @param {object} [options.languageCore]
188
- * @returns {Promise<ComputeShaderEmulator>}
189
- */
190
- static async fromComputeShader(shader, options = {}) {
191
- assert.defined(shader, 'shader');
192
- const source = shader.descriptor.compile();
193
- return ComputeShaderEmulator.fromSource(source, options);
194
- }
195
-
196
- /**
197
- * Build an emulator from an existing {@link ImageShader} instance — a full-screen fragment
198
- * pass. The vertex stage is intentionally skipped (single-pixel emulation), so callers
199
- * provide the `@builtin(position)` value (and any other fragment inputs) directly to
200
- * {@link dispatch}.
201
- *
202
- * Derivative builtins (`dpdx`, `dpdy`, `fwidth` and their fine/coarse variants) throw at
203
- * runtime — their values can't be faked from a single pixel.
204
- *
205
- * @example
206
- * const emu = await ComputeShaderEmulator.fromImageShader(shader);
207
- * emu.bindings = { input: someCPUBitmapData };
208
- * const out = emu.dispatch(new Float32Array([100.5, 200.5, 0, 1])); // vec4 frag.position
209
- * // `out` is the fragment's @location(0) return value (typically a vec4).
210
- *
211
- * @param {import("../../renderer/shader/ImageShader.js").ImageShader} shader
212
- * @param {object} [options]
213
- * @param {WGSLParser} [options.parser]
214
- * @param {object} [options.languageCore]
215
- * @returns {Promise<ComputeShaderEmulator>}
216
- */
217
- static async fromImageShader(shader, options = {}) {
218
- assert.defined(shader, 'shader');
219
- const source = shader.descriptor.compile();
220
- return ComputeShaderEmulator.fromSource(source, options);
221
- }
222
-
223
- /**
224
- * Compile a {@link CodeChunk} (or a raw WGSL string) into a "library" object — every
225
- * 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.
227
- *
228
- * No `@compute` entry is required. This is the one-line escape hatch for unit-testing pure
229
- * helper code (RNGs, hashes, packing, math) without wrapping each chunk in a shader skeleton.
230
- *
231
- * @example
232
- * const lib = await ComputeShaderEmulator.fromCodeChunk(chunk_random);
233
- * expect(lib.random()).toBeLessThan(1);
234
- *
235
- * @param {import("../../renderer/shader/compiler/CodeChunk.js").CodeChunk | string} chunk_or_source
236
- * @param {object} [options]
237
- * @param {WGSLParser} [options.parser]
238
- * @param {object} [options.languageCore]
239
- * @returns {Promise<object>} the library module
240
- */
241
- static async fromCodeChunk(chunk_or_source, options = {}) {
242
- assert.defined(chunk_or_source, 'chunk_or_source');
243
- const source = typeof chunk_or_source === 'string'
244
- ? chunk_or_source
245
- : chunk_or_source.compile().text;
246
- const { module } = await compileWgslSource(source, options);
247
- return module;
248
- }
249
- }
250
-
251
- /**
252
- * Internal helper: parse + compile + evaluate a WGSL source string, returning the factory's
253
- * resulting module along with the generated JS for diagnostics.
254
- *
255
- * @param {string} source
256
- * @param {object} options
257
- * @param {WGSLParser} [options.parser]
258
- * @param {object} [options.languageCore]
259
- * @returns {Promise<{ module: object, jsSource: string }>}
260
- */
261
- async function compileWgslSource(source, { parser, languageCore = WGSLLanguageCore } = {}) {
262
- assert.isString(source, 'source');
263
-
264
- let p = parser;
265
- if (p === undefined) {
266
- p = new WGSLParser();
267
- await p.init();
268
- }
269
-
270
- const tree = p.parse(source);
271
- if (tree.rootNode.hasError) {
272
- throw new Error(`WGSL parse error in source:\n${source}`);
273
- }
274
-
275
-
276
- const compiler = new WGSLJavaScriptCompiler();
277
- const jsSource = compiler.compile(tree);
278
-
279
- let factory;
280
- try {
281
- // eslint-disable-next-line no-new-func
282
- factory = (new Function(`return ${jsSource};`))();
283
- } catch (e) {
284
- const err = new Error(`failed to evaluate generated JavaScript: ${e.message}\n--- generated JS ---\n${jsSource}`);
285
- err.cause = e;
286
- throw err;
287
- }
288
- const module = factory(languageCore);
289
-
290
- return { module, jsSource };
291
- }
1
+ import { assert } from "../../../core/assert.js";
2
+ import { WGSLParser } from "../WGSLParser.js";
3
+ import { WGSLJavaScriptCompiler } from "./WGSLJavaScriptCompiler.js";
4
+ import { WGSLLanguageCore } from "./WGSLLanguageCore.js";
5
+
6
+ /**
7
+ * Emulates a {@link ComputeShader} on the CPU by translating its WGSL source to JavaScript
8
+ * and dispatching threads point-wise.
9
+ *
10
+ * Intended for testing — feed the same shader instance you'd run on a GPU, drive it from a
11
+ * unit test, and inspect the resulting bindings or texture state.
12
+ *
13
+ * Texture bindings expect a {@link CPUBitmapData} (1D / 2D / 3D inferred from
14
+ * the bitmap's `size`). Sampling routes through {@link cpu_texture_sample},
15
+ * which honours the bound sampler's address modes and filter.
16
+ *
17
+ * @example
18
+ * const shader = ComputeShader.from({...});
19
+ * const emu = await ComputeShaderEmulator.create(shader);
20
+ * emu.bindings = { data: someArray };
21
+ * emu.dispatch([0, 0, 0]); // global_invocation_id = (0,0,0)
22
+ * emu.dispatch([1, 0, 0]); // global_invocation_id = (1,0,0)
23
+ * // ... bindings now contain results
24
+ */
25
+ export class ComputeShaderEmulator {
26
+
27
+ /** @type {string} */
28
+ #source;
29
+
30
+ /** @type {string} */
31
+ #js_source;
32
+
33
+ /** @type {object} */
34
+ #module;
35
+
36
+ /** @type {object} */
37
+ #workgroup_state;
38
+
39
+ /** @type {object} */
40
+ #language_core;
41
+
42
+ /**
43
+ * Bindings currently in effect. Keys match the WGSL variable names declared with
44
+ * `@group(...) @binding(...) var ...: T`.
45
+ * @type {object}
46
+ */
47
+ bindings = {};
48
+
49
+ /**
50
+ * Construct directly when you already have the WGSL source string.
51
+ *
52
+ * For most use cases prefer {@link create} or {@link fromComputeShader}.
53
+ *
54
+ * @param {object} options
55
+ * @param {object} options.module — the compiled module returned by the JS factory
56
+ * @param {string} options.source — the original WGSL source
57
+ * @param {string} options.jsSource — the generated JS source (kept for debugging)
58
+ * @param {object} options.languageCore — the runtime `wgsl` object
59
+ */
60
+ constructor({ module, source, jsSource, languageCore }) {
61
+ this.#module = module;
62
+ this.#source = source;
63
+ this.#js_source = jsSource;
64
+ this.#language_core = languageCore;
65
+ // Fragment-stage entries have no var<workgroup>, so the module skips emitting the
66
+ // workgroup-state factory; in that case workgroup_state is a no-op empty object.
67
+ this.#workgroup_state = typeof module.create_workgroup_state === 'function'
68
+ ? module.create_workgroup_state()
69
+ : {};
70
+ }
71
+
72
+ /**
73
+ * @returns {string} the WGSL source.
74
+ */
75
+ get source() {
76
+ return this.#source;
77
+ }
78
+
79
+ /**
80
+ * @returns {string} the generated JavaScript source. Useful for debugging.
81
+ */
82
+ get jsSource() {
83
+ return this.#js_source;
84
+ }
85
+
86
+ /**
87
+ * @returns {object} the language core object passed to the generated JS as `wgsl`.
88
+ */
89
+ get languageCore() {
90
+ return this.#language_core;
91
+ }
92
+
93
+ /**
94
+ * @returns {string} the name of the entry function (whether @compute or @fragment).
95
+ */
96
+ get entryName() {
97
+ return this.#module.entry_name;
98
+ }
99
+
100
+ /**
101
+ * @returns {'compute' | 'fragment'} which shader stage the entry function targets.
102
+ */
103
+ get stage() {
104
+ return this.#module.stage;
105
+ }
106
+
107
+ /**
108
+ * @returns {number[] | undefined} the workgroup size for @compute entries (undefined for @fragment).
109
+ */
110
+ get workgroup_size() {
111
+ return this.#module.workgroup_size;
112
+ }
113
+
114
+ /**
115
+ * @returns {string[]} the entry function's parameter names, in declaration order.
116
+ */
117
+ get entryParamNames() {
118
+ return this.#module.param_names;
119
+ }
120
+
121
+ /**
122
+ * @returns {object} the current workgroup state — workgroup-scope variables live here.
123
+ */
124
+ get workgroup() {
125
+ return this.#workgroup_state;
126
+ }
127
+
128
+ /**
129
+ * Reset the workgroup state. Call between simulated workgroups so that `var<workgroup>`
130
+ * variables start fresh. No-op for fragment-stage entries.
131
+ */
132
+ resetWorkgroup() {
133
+ if (typeof this.#module.create_workgroup_state === 'function') {
134
+ this.#workgroup_state = this.#module.create_workgroup_state();
135
+ }
136
+ }
137
+
138
+ /**
139
+ * Dispatch a single thread (point-wise simulation). The arguments are the entry function's
140
+ * parameters, in declaration order — for example a `@builtin(global_invocation_id)` param of
141
+ * type `vec3<u32>` is supplied as a 3-element array.
142
+ *
143
+ * For @compute entries, returns whatever the entry function returns (typically nothing —
144
+ * results land in bindings). For @fragment entries, returns the fragment's output value
145
+ * (typically a vec4 for `@location(0)` or a struct of locations).
146
+ *
147
+ * @param {...*} mainArgs
148
+ * @returns {*}
149
+ */
150
+ dispatch(...mainArgs) {
151
+ if (this.#module.stage === 'fragment') {
152
+ return this.#module.entry(this.bindings, ...mainArgs);
153
+ }
154
+ return this.#module.entry(this.bindings, this.#workgroup_state, ...mainArgs);
155
+ }
156
+
157
+ /**
158
+ * Compile a WGSL source string into an executable emulator. Requires a `@compute` or
159
+ * `@fragment` entry function; for chunks of pure helper code with no entry, use
160
+ * {@link fromCodeChunk}.
161
+ *
162
+ * @param {string} source
163
+ * @param {object} [options]
164
+ * @param {WGSLParser} [options.parser] — share a parser across multiple compiles
165
+ * @param {object} [options.languageCore] — defaults to {@link WGSLLanguageCore}
166
+ * @returns {Promise<ComputeShaderEmulator>}
167
+ */
168
+ static async fromSource(source, options = {}) {
169
+ const { module, jsSource } = await compileWgslSource(source, options);
170
+ if (typeof module.entry !== 'function') {
171
+ throw new Error('ComputeShaderEmulator.fromSource: WGSL has no @compute or @fragment entry function. Use ComputeShaderEmulator.fromCodeChunk for library-style code.');
172
+ }
173
+ return new ComputeShaderEmulator({
174
+ module,
175
+ source,
176
+ jsSource,
177
+ languageCore: options.languageCore || WGSLLanguageCore,
178
+ });
179
+ }
180
+
181
+ /**
182
+ * Build an emulator from an existing {@link ComputeShader} instance.
183
+ *
184
+ * @param {import("../../renderer/shader/ComputeShader.js").ComputeShader} shader
185
+ * @param {object} [options]
186
+ * @param {WGSLParser} [options.parser]
187
+ * @param {object} [options.languageCore]
188
+ * @returns {Promise<ComputeShaderEmulator>}
189
+ */
190
+ static async fromComputeShader(shader, options = {}) {
191
+ assert.defined(shader, 'shader');
192
+ const source = shader.descriptor.source;
193
+ return ComputeShaderEmulator.fromSource(source, options);
194
+ }
195
+
196
+ /**
197
+ * Build an emulator from an existing {@link ImageShader} instance — a full-screen fragment
198
+ * pass. The vertex stage is intentionally skipped (single-pixel emulation), so callers
199
+ * provide the `@builtin(position)` value (and any other fragment inputs) directly to
200
+ * {@link dispatch}.
201
+ *
202
+ * Derivative builtins (`dpdx`, `dpdy`, `fwidth` and their fine/coarse variants) throw at
203
+ * runtime — their values can't be faked from a single pixel.
204
+ *
205
+ * @example
206
+ * const emu = await ComputeShaderEmulator.fromImageShader(shader);
207
+ * emu.bindings = { input: someCPUBitmapData };
208
+ * const out = emu.dispatch(new Float32Array([100.5, 200.5, 0, 1])); // vec4 frag.position
209
+ * // `out` is the fragment's @location(0) return value (typically a vec4).
210
+ *
211
+ * @param {import("../../renderer/shader/ImageShader.js").ImageShader} shader
212
+ * @param {object} [options]
213
+ * @param {WGSLParser} [options.parser]
214
+ * @param {object} [options.languageCore]
215
+ * @returns {Promise<ComputeShaderEmulator>}
216
+ */
217
+ static async fromImageShader(shader, options = {}) {
218
+ assert.defined(shader, 'shader');
219
+ const source = shader.descriptor.source;
220
+ return ComputeShaderEmulator.fromSource(source, options);
221
+ }
222
+
223
+ /**
224
+ * Compile a {@link CodeChunk} (or a raw WGSL string) into a "library" object — every
225
+ * 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.
227
+ *
228
+ * No `@compute` entry is required. This is the one-line escape hatch for unit-testing pure
229
+ * helper code (RNGs, hashes, packing, math) without wrapping each chunk in a shader skeleton.
230
+ *
231
+ * @example
232
+ * const lib = await ComputeShaderEmulator.fromCodeChunk(chunk_random);
233
+ * expect(lib.random()).toBeLessThan(1);
234
+ *
235
+ * @param {import("../../renderer/shader/compiler/CodeChunk.js").CodeChunk | string} chunk_or_source
236
+ * @param {object} [options]
237
+ * @param {WGSLParser} [options.parser]
238
+ * @param {object} [options.languageCore]
239
+ * @returns {Promise<object>} the library module
240
+ */
241
+ static async fromCodeChunk(chunk_or_source, options = {}) {
242
+ assert.defined(chunk_or_source, 'chunk_or_source');
243
+ const source = typeof chunk_or_source === 'string'
244
+ ? chunk_or_source
245
+ : chunk_or_source.compile().text;
246
+ const { module } = await compileWgslSource(source, options);
247
+ return module;
248
+ }
249
+ }
250
+
251
+ /**
252
+ * Internal helper: parse + compile + evaluate a WGSL source string, returning the factory's
253
+ * resulting module along with the generated JS for diagnostics.
254
+ *
255
+ * @param {string} source
256
+ * @param {object} options
257
+ * @param {WGSLParser} [options.parser]
258
+ * @param {object} [options.languageCore]
259
+ * @returns {Promise<{ module: object, jsSource: string }>}
260
+ */
261
+ async function compileWgslSource(source, { parser, languageCore = WGSLLanguageCore } = {}) {
262
+ assert.isString(source, 'source');
263
+
264
+ let p = parser;
265
+ if (p === undefined) {
266
+ p = new WGSLParser();
267
+ await p.init();
268
+ }
269
+
270
+ const tree = p.parse(source);
271
+ if (tree.rootNode.hasError) {
272
+ throw new Error(`WGSL parse error in source:\n${source}`);
273
+ }
274
+
275
+
276
+ const compiler = new WGSLJavaScriptCompiler();
277
+ const jsSource = compiler.compile(tree);
278
+
279
+ let factory;
280
+ try {
281
+ // eslint-disable-next-line no-new-func
282
+ factory = (new Function(`return ${jsSource};`))();
283
+ } catch (e) {
284
+ const err = new Error(`failed to evaluate generated JavaScript: ${e.message}\n--- generated JS ---\n${jsSource}`);
285
+ err.cause = e;
286
+ throw err;
287
+ }
288
+ const module = factory(languageCore);
289
+
290
+ return { module, jsSource };
291
+ }
@@ -859,7 +859,14 @@ function collectGlobalVariable(c, node) {
859
859
 
860
860
  c.scope.declare(name, type);
861
861
 
862
- if (group !== null && binding !== null) {
862
+ // `var<immediate>` carries neither attribute immediate data is part of the shader interface
863
+ // but is not a bound resource, so WGSL gives it no @group/@binding. It still arrives from
864
+ // outside the shader, so it is a binding as far as the emulator is concerned, and binding here
865
+ // is what keeps it out of the `privateGlobals` branch below. Falling through to that branch
866
+ // would default-initialise it and every spec reading it would quietly see zeroes.
867
+ const is_immediate = address_space === 'immediate';
868
+
869
+ if (is_immediate || (group !== null && binding !== null)) {
863
870
  c.globalBindings.push({
864
871
  name, type, group, binding, addressSpace: address_space, accessMode: access_mode,
865
872
  });
@@ -1 +1 @@
1
- {"version":3,"file":"WGSLLanguageCore.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLLanguageCore.js"],"names":[],"mappings":"AA0PA;;;;;;;;;;;;GAYG;AACH,+BAFU,MAAM,CAu8Bd"}
1
+ {"version":3,"file":"WGSLLanguageCore.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLLanguageCore.js"],"names":[],"mappings":"AA0PA;;;;;;;;;;;;GAYG;AACH,+BAFU,MAAM,CAm+Bd"}