@onerjs/core 9.0.2 → 9.0.4

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 (476) hide show
  1. package/Buffers/buffer.pure.js +4 -0
  2. package/Buffers/buffer.pure.js.map +1 -1
  3. package/Cameras/camera.pure.d.ts +14 -0
  4. package/Cameras/camera.pure.js +15 -0
  5. package/Cameras/camera.pure.js.map +1 -1
  6. package/Compute/computeShader.pure.d.ts +2 -1
  7. package/Compute/computeShader.pure.js +29 -10
  8. package/Compute/computeShader.pure.js.map +1 -1
  9. package/Culling/ray.core.js +22 -9
  10. package/Culling/ray.core.js.map +1 -1
  11. package/Engines/IDrawContext.d.ts +2 -0
  12. package/Engines/IDrawContext.js.map +1 -1
  13. package/Engines/Native/nativeInterfaces.d.ts +55 -4
  14. package/Engines/Native/nativeInterfaces.js.map +1 -1
  15. package/Engines/Native/nativeRenderTargetWrapper.d.ts +1 -0
  16. package/Engines/Native/nativeRenderTargetWrapper.js +5 -1
  17. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  18. package/Engines/Processors/shaderCodeInliner.d.ts +2 -0
  19. package/Engines/Processors/shaderCodeInliner.js +251 -6
  20. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  21. package/Engines/Processors/shaderProcessor.js +10 -1
  22. package/Engines/Processors/shaderProcessor.js.map +1 -1
  23. package/Engines/WebGPU/Extensions/engine.debugging.pure.js +12 -0
  24. package/Engines/WebGPU/Extensions/engine.debugging.pure.js.map +1 -1
  25. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js +0 -1
  26. package/Engines/WebGPU/Extensions/engine.multiRender.pure.js.map +1 -1
  27. package/Engines/WebGPU/Extensions/engine.query.pure.js +5 -0
  28. package/Engines/WebGPU/Extensions/engine.query.pure.js.map +1 -1
  29. package/Engines/WebGPU/webgpuBufferManager.js +7 -0
  30. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  31. package/Engines/WebGPU/webgpuCacheTextureView.d.ts +1 -1
  32. package/Engines/WebGPU/webgpuCacheTextureView.js +20 -8
  33. package/Engines/WebGPU/webgpuCacheTextureView.js.map +1 -1
  34. package/Engines/WebGPU/webgpuDrawContext.d.ts +2 -0
  35. package/Engines/WebGPU/webgpuDrawContext.js +6 -0
  36. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  37. package/Engines/WebGPU/webgpuQuerySet.d.ts +3 -3
  38. package/Engines/WebGPU/webgpuQuerySet.js +23 -9
  39. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  40. package/Engines/WebGPU/webgpuRenderPassCommandStream.d.ts +156 -0
  41. package/Engines/WebGPU/webgpuRenderPassCommandStream.js +323 -0
  42. package/Engines/WebGPU/webgpuRenderPassCommandStream.js.map +1 -0
  43. package/Engines/WebGPU/webgpuTextureManager.d.ts +1 -1
  44. package/Engines/WebGPU/webgpuTextureManager.js +4 -3
  45. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  46. package/Engines/WebGPU/webgpuTimestampQuery.d.ts +3 -1
  47. package/Engines/WebGPU/webgpuTimestampQuery.js +9 -6
  48. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  49. package/Engines/abstractEngine.pure.d.ts +2 -0
  50. package/Engines/abstractEngine.pure.js +14 -5
  51. package/Engines/abstractEngine.pure.js.map +1 -1
  52. package/Engines/constants.d.ts +6 -0
  53. package/Engines/constants.js +6 -0
  54. package/Engines/constants.js.map +1 -1
  55. package/Engines/engine.d.ts +198 -24
  56. package/Engines/pure.d.ts +1 -0
  57. package/Engines/pure.js +1 -0
  58. package/Engines/pure.js.map +1 -1
  59. package/Engines/renderCommandBatcher.pure.d.ts +16 -0
  60. package/Engines/renderCommandBatcher.pure.js +24 -0
  61. package/Engines/renderCommandBatcher.pure.js.map +1 -0
  62. package/Engines/thinEngine.functions.js +3 -2
  63. package/Engines/thinEngine.functions.js.map +1 -1
  64. package/Engines/thinEngine.pure.js +18 -2
  65. package/Engines/thinEngine.pure.js.map +1 -1
  66. package/Engines/thinNativeEngine.pure.d.ts +10 -7
  67. package/Engines/thinNativeEngine.pure.js +117 -46
  68. package/Engines/thinNativeEngine.pure.js.map +1 -1
  69. package/Engines/thinWebGPUEngine.d.ts +8 -0
  70. package/Engines/thinWebGPUEngine.js +11 -0
  71. package/Engines/thinWebGPUEngine.js.map +1 -1
  72. package/Engines/webgpuEngine.pure.d.ts +60 -1
  73. package/Engines/webgpuEngine.pure.js +238 -42
  74. package/Engines/webgpuEngine.pure.js.map +1 -1
  75. package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.d.ts +3 -3
  76. package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js +2 -1
  77. package/FlowGraph/Blocks/Data/Audio/flowGraphGetSoundVolumeBlock.pure.js.map +1 -1
  78. package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.d.ts +3 -3
  79. package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js +2 -1
  80. package/FlowGraph/Blocks/Data/Audio/flowGraphIsSoundPlayingBlock.pure.js.map +1 -1
  81. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.d.ts +5 -0
  82. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js +8 -0
  83. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.js.map +1 -0
  84. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.d.ts +77 -0
  85. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js +141 -0
  86. package/FlowGraph/Blocks/Event/flowGraphMeshIntersectionEventBlock.pure.js.map +1 -0
  87. package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.d.ts +5 -3
  88. package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js +38 -7
  89. package/FlowGraph/Blocks/Event/flowGraphSoundEndedEventBlock.pure.js.map +1 -1
  90. package/FlowGraph/Blocks/Event/index.d.ts +1 -0
  91. package/FlowGraph/Blocks/Event/index.js +1 -0
  92. package/FlowGraph/Blocks/Event/index.js.map +1 -1
  93. package/FlowGraph/Blocks/Event/pure.d.ts +1 -0
  94. package/FlowGraph/Blocks/Event/pure.js +1 -0
  95. package/FlowGraph/Blocks/Event/pure.js.map +1 -1
  96. package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.d.ts +3 -3
  97. package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js +2 -1
  98. package/FlowGraph/Blocks/Execution/Audio/flowGraphPauseSoundBlock.pure.js.map +1 -1
  99. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.d.ts +3 -3
  100. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js +2 -1
  101. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlaySoundBlock.pure.js.map +1 -1
  102. package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.d.ts +3 -3
  103. package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js +2 -1
  104. package/FlowGraph/Blocks/Execution/Audio/flowGraphSetSoundVolumeBlock.pure.js.map +1 -1
  105. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.d.ts +3 -3
  106. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js +2 -1
  107. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopSoundBlock.pure.js.map +1 -1
  108. package/FlowGraph/Blocks/allBlocks.pure.js +2 -0
  109. package/FlowGraph/Blocks/allBlocks.pure.js.map +1 -1
  110. package/FlowGraph/Blocks/flowGraphBlockFactory.js +2 -0
  111. package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
  112. package/FlowGraph/Blocks/flowGraphBlockNames.d.ts +1 -0
  113. package/FlowGraph/Blocks/flowGraphBlockNames.js +1 -0
  114. package/FlowGraph/Blocks/flowGraphBlockNames.js.map +1 -1
  115. package/FlowGraph/flowGraph.d.ts +12 -1
  116. package/FlowGraph/flowGraph.js +38 -0
  117. package/FlowGraph/flowGraph.js.map +1 -1
  118. package/FlowGraph/flowGraphCoordinator.d.ts +44 -0
  119. package/FlowGraph/flowGraphCoordinator.js +141 -0
  120. package/FlowGraph/flowGraphCoordinator.js.map +1 -1
  121. package/FlowGraph/flowGraphDataConnection.pure.js +41 -14
  122. package/FlowGraph/flowGraphDataConnection.pure.js.map +1 -1
  123. package/FlowGraph/flowGraphParser.js +105 -5
  124. package/FlowGraph/flowGraphParser.js.map +1 -1
  125. package/FlowGraph/flowGraphSoundAssets.d.ts +40 -0
  126. package/FlowGraph/flowGraphSoundAssets.js +33 -0
  127. package/FlowGraph/flowGraphSoundAssets.js.map +1 -0
  128. package/FlowGraph/index.d.ts +1 -0
  129. package/FlowGraph/index.js +1 -0
  130. package/FlowGraph/index.js.map +1 -1
  131. package/FlowGraph/pure.d.ts +1 -0
  132. package/FlowGraph/pure.js +1 -0
  133. package/FlowGraph/pure.js.map +1 -1
  134. package/FlowGraph/serialization.d.ts +8 -0
  135. package/FlowGraph/serialization.js +31 -12
  136. package/FlowGraph/serialization.js.map +1 -1
  137. package/FlowGraph/typeDefinitions.d.ts +25 -0
  138. package/FlowGraph/typeDefinitions.js.map +1 -1
  139. package/FrameGraph/Tasks/PostProcesses/taaTask.js +2 -0
  140. package/FrameGraph/Tasks/PostProcesses/taaTask.js.map +1 -1
  141. package/Instrumentation/engineInstrumentation.d.ts +1 -0
  142. package/Instrumentation/engineInstrumentation.js +25 -6
  143. package/Instrumentation/engineInstrumentation.js.map +1 -1
  144. package/Lights/Clustered/clusteredLightContainer.pure.js +2 -0
  145. package/Lights/Clustered/clusteredLightContainer.pure.js.map +1 -1
  146. package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +36 -1
  147. package/Lights/Shadows/cascadedShadowGenerator.pure.js +202 -27
  148. package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
  149. package/Lights/directionalLight.pure.d.ts +24 -10
  150. package/Lights/directionalLight.pure.js +29 -11
  151. package/Lights/directionalLight.pure.js.map +1 -1
  152. package/Loading/sceneLoader.d.ts +1 -1
  153. package/Loading/sceneLoader.js +1 -1
  154. package/Loading/sceneLoader.js.map +1 -1
  155. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +4 -4
  156. package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
  157. package/Materials/Node/Blocks/Dual/lightBlock.pure.js +1 -1
  158. package/Materials/Node/Blocks/Dual/lightBlock.pure.js.map +1 -1
  159. package/Materials/Node/Blocks/Input/inputBlock.pure.js +4 -0
  160. package/Materials/Node/Blocks/Input/inputBlock.pure.js.map +1 -1
  161. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.d.ts +9 -0
  162. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +23 -3
  163. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  164. package/Materials/PBR/openpbrMaterial.pure.js +1 -1
  165. package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
  166. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +9 -0
  167. package/Materials/PBR/pbrBaseMaterial.pure.js +60 -1
  168. package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
  169. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +11 -0
  170. package/Materials/PBR/pbrBaseSimpleMaterial.js +21 -2
  171. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  172. package/Materials/PBR/pbrMaterial.pure.d.ts +12 -0
  173. package/Materials/PBR/pbrMaterial.pure.js +23 -3
  174. package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
  175. package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -0
  176. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +10 -0
  177. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  178. package/Materials/Textures/HTML/htmlInCanvasPolyfill.d.ts +5 -0
  179. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js +7 -0
  180. package/Materials/Textures/HTML/htmlInCanvasPolyfill.js.map +1 -1
  181. package/Materials/Textures/HTML/htmlInteractionManager.d.ts +9 -3
  182. package/Materials/Textures/HTML/htmlInteractionManager.js +64 -5
  183. package/Materials/Textures/HTML/htmlInteractionManager.js.map +1 -1
  184. package/Materials/Textures/HTML/htmlTexture.d.ts +11 -11
  185. package/Materials/Textures/HTML/htmlTexture.js +106 -65
  186. package/Materials/Textures/HTML/htmlTexture.js.map +1 -1
  187. package/Materials/Textures/Loaders/internalTextureLoader.d.ts +2 -1
  188. package/Materials/Textures/Loaders/internalTextureLoader.js.map +1 -1
  189. package/Materials/Textures/Loaders/ktxTextureLoader.d.ts +2 -1
  190. package/Materials/Textures/Loaders/ktxTextureLoader.js +4 -50
  191. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  192. package/Materials/Textures/Procedurals/proceduralTexture.pure.js +10 -0
  193. package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
  194. package/Materials/Textures/dynamicTexture.pure.js +6 -0
  195. package/Materials/Textures/dynamicTexture.pure.js.map +1 -1
  196. package/Materials/Textures/ktx2encoderTypes.d.ts +51 -0
  197. package/Materials/Textures/ktx2encoderTypes.js +2 -0
  198. package/Materials/Textures/ktx2encoderTypes.js.map +1 -0
  199. package/Materials/Textures/renderTargetTexture.pure.js +10 -2
  200. package/Materials/Textures/renderTargetTexture.pure.js.map +1 -1
  201. package/Materials/Textures/textureMerger.d.ts +11 -0
  202. package/Materials/Textures/textureMerger.js +34 -19
  203. package/Materials/Textures/textureMerger.js.map +1 -1
  204. package/Materials/Textures/textureProcessor.d.ts +145 -0
  205. package/Materials/Textures/textureProcessor.js +445 -45
  206. package/Materials/Textures/textureProcessor.js.map +1 -1
  207. package/Materials/Textures/textureSampling.functions.d.ts +41 -0
  208. package/Materials/Textures/textureSampling.functions.js +82 -0
  209. package/Materials/Textures/textureSampling.functions.js.map +1 -0
  210. package/Materials/drawWrapper.d.ts +8 -0
  211. package/Materials/drawWrapper.js +19 -0
  212. package/Materials/drawWrapper.js.map +1 -1
  213. package/Materials/effect.pure.d.ts +6 -0
  214. package/Materials/effect.pure.js +28 -6
  215. package/Materials/effect.pure.js.map +1 -1
  216. package/Materials/effect.webgl.functions.pure.js +1 -1
  217. package/Materials/effect.webgl.functions.pure.js.map +1 -1
  218. package/Materials/material.pure.d.ts +5 -0
  219. package/Materials/material.pure.js +9 -2
  220. package/Materials/material.pure.js.map +1 -1
  221. package/Materials/materialFlags.d.ts +6 -0
  222. package/Materials/materialFlags.js +14 -0
  223. package/Materials/materialFlags.js.map +1 -1
  224. package/Materials/materialHelper.functions.d.ts +2 -1
  225. package/Materials/materialHelper.functions.js +36 -2
  226. package/Materials/materialHelper.functions.js.map +1 -1
  227. package/Materials/materialHelper.geometryrendering.js +19 -16
  228. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  229. package/Materials/materialPluginManager.pure.js +12 -8
  230. package/Materials/materialPluginManager.pure.js.map +1 -1
  231. package/Materials/prePassConfiguration.js +19 -16
  232. package/Materials/prePassConfiguration.js.map +1 -1
  233. package/Materials/shaderMaterial.pure.js +19 -6
  234. package/Materials/shaderMaterial.pure.js.map +1 -1
  235. package/Materials/shadowDepthWrapper.d.ts +6 -0
  236. package/Materials/shadowDepthWrapper.js +17 -0
  237. package/Materials/shadowDepthWrapper.js.map +1 -1
  238. package/Meshes/Compression/dracoCodec.d.ts +14 -0
  239. package/Meshes/Compression/dracoCodec.js +22 -0
  240. package/Meshes/Compression/dracoCodec.js.map +1 -1
  241. package/Meshes/Compression/dracoDecoder.d.ts +1 -0
  242. package/Meshes/Compression/dracoDecoder.js +27 -0
  243. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  244. package/Meshes/Compression/dracoEncoder.d.ts +1 -0
  245. package/Meshes/Compression/dracoEncoder.js +8 -0
  246. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  247. package/Meshes/Compression/meshoptCompression.d.ts +1 -0
  248. package/Meshes/Compression/meshoptCompression.js +9 -0
  249. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  250. package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.d.ts +415 -0
  251. package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js +912 -0
  252. package/Meshes/GaussianSplatting/gaussianSplattingGpuSorter.js.map +1 -0
  253. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +3 -0
  254. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +40 -9
  255. package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
  256. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +112 -8
  257. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +696 -74
  258. package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
  259. package/Meshes/abstractMesh.pure.js +12 -4
  260. package/Meshes/abstractMesh.pure.js.map +1 -1
  261. package/Meshes/geometry.d.ts +5 -0
  262. package/Meshes/geometry.js +25 -0
  263. package/Meshes/geometry.js.map +1 -1
  264. package/Meshes/index.d.ts +1 -0
  265. package/Meshes/index.js +1 -0
  266. package/Meshes/index.js.map +1 -1
  267. package/Meshes/mesh.pure.d.ts +7 -0
  268. package/Meshes/mesh.pure.js +18 -13
  269. package/Meshes/mesh.pure.js.map +1 -1
  270. package/Meshes/pure.d.ts +1 -0
  271. package/Meshes/pure.js +1 -0
  272. package/Meshes/pure.js.map +1 -1
  273. package/Meshes/subMesh.pure.d.ts +3 -0
  274. package/Meshes/subMesh.pure.js +26 -0
  275. package/Meshes/subMesh.pure.js.map +1 -1
  276. package/Meshes/thinInstanceMesh.pure.js +5 -3
  277. package/Meshes/thinInstanceMesh.pure.js.map +1 -1
  278. package/Misc/index.d.ts +1 -0
  279. package/Misc/index.js +1 -0
  280. package/Misc/index.js.map +1 -1
  281. package/Misc/khronosTextureContainer2.d.ts +3 -2
  282. package/Misc/khronosTextureContainer2.js +24 -6
  283. package/Misc/khronosTextureContainer2.js.map +1 -1
  284. package/Misc/khronosTextureContainer2Encoder.d.ts +166 -0
  285. package/Misc/khronosTextureContainer2Encoder.js +556 -0
  286. package/Misc/khronosTextureContainer2Encoder.js.map +1 -0
  287. package/Misc/khronosTextureContainer2EncoderWorker.d.ts +61 -0
  288. package/Misc/khronosTextureContainer2EncoderWorker.js +55 -0
  289. package/Misc/khronosTextureContainer2EncoderWorker.js.map +1 -0
  290. package/Misc/pure.d.ts +1 -0
  291. package/Misc/pure.js +1 -0
  292. package/Misc/pure.js.map +1 -1
  293. package/Misc/textureFormat.functions.d.ts +6 -0
  294. package/Misc/textureFormat.functions.js +54 -0
  295. package/Misc/textureFormat.functions.js.map +1 -0
  296. package/Misc/textureTools.d.ts +6 -2
  297. package/Misc/textureTools.js +100 -42
  298. package/Misc/textureTools.js.map +1 -1
  299. package/Misc/tools.pure.js +1 -1
  300. package/Misc/tools.pure.js.map +1 -1
  301. package/Particles/Node/Blocks/systemBlock.pure.d.ts +1 -1
  302. package/Particles/Node/Blocks/systemBlock.pure.js +6 -3
  303. package/Particles/Node/Blocks/systemBlock.pure.js.map +1 -1
  304. package/Particles/computeShaderParticleSystem.pure.js +5 -0
  305. package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
  306. package/Particles/gpuParticleSystem.pure.d.ts +2 -0
  307. package/Particles/gpuParticleSystem.pure.js +25 -1
  308. package/Particles/gpuParticleSystem.pure.js.map +1 -1
  309. package/Particles/solidParticle.d.ts +5 -0
  310. package/Particles/solidParticle.js +5 -0
  311. package/Particles/solidParticle.js.map +1 -1
  312. package/Particles/solidParticleSystem.d.ts +10 -0
  313. package/Particles/solidParticleSystem.js +72 -13
  314. package/Particles/solidParticleSystem.js.map +1 -1
  315. package/Particles/thinParticleSystem.pure.js +4 -0
  316. package/Particles/thinParticleSystem.pure.js.map +1 -1
  317. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.d.ts +27 -6
  318. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js +60 -5
  319. package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.pure.js.map +1 -1
  320. package/PostProcesses/thinTAAPostProcess.d.ts +1 -0
  321. package/PostProcesses/thinTAAPostProcess.js +17 -1
  322. package/PostProcesses/thinTAAPostProcess.js.map +1 -1
  323. package/PostProcesses/volumetricLightScatteringPostProcess.pure.d.ts +2 -1
  324. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js +6 -5
  325. package/PostProcesses/volumetricLightScatteringPostProcess.pure.js.map +1 -1
  326. package/Rendering/boundingBoxRenderer.pure.js +2 -3
  327. package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
  328. package/Rendering/geometryBufferRenderer.pure.js +8 -2
  329. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  330. package/Rendering/objectRenderer.d.ts +1 -0
  331. package/Rendering/objectRenderer.js +14 -0
  332. package/Rendering/objectRenderer.js.map +1 -1
  333. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
  334. package/Shaders/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  335. package/Shaders/ShadersInclude/bumpVertex.js +1 -1
  336. package/Shaders/ShadersInclude/bumpVertex.js.map +1 -1
  337. package/Shaders/ShadersInclude/bumpVertexDeclaration.js +1 -1
  338. package/Shaders/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
  339. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +5 -1
  340. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  341. package/Shaders/ShadersInclude/helperFunctions.js +2 -2
  342. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  343. package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
  344. package/Shaders/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  345. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js +6 -0
  346. package/Shaders/ShadersInclude/openpbrVertexDeclaration.js.map +1 -1
  347. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
  348. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  349. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js +9 -0
  350. package/Shaders/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
  351. package/Shaders/ShadersInclude/pbrBlockReflectance.js +1 -1
  352. package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  353. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
  354. package/Shaders/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
  355. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +7 -1
  356. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  357. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
  358. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  359. package/Shaders/ShadersInclude/pbrIBLFunctions.js +12 -0
  360. package/Shaders/ShadersInclude/pbrIBLFunctions.js.map +1 -1
  361. package/Shaders/ShadersInclude/pbrUboDeclaration.js +1 -1
  362. package/Shaders/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  363. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +3 -0
  364. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  365. package/Shaders/geometry.vertex.js +6 -6
  366. package/Shaders/geometry.vertex.js.map +1 -1
  367. package/Shaders/gpuUpdateParticles.vertex.js +1 -1
  368. package/Shaders/gpuUpdateParticles.vertex.js.map +1 -1
  369. package/Shaders/lod.fragment.js +15 -2
  370. package/Shaders/lod.fragment.js.map +1 -1
  371. package/Shaders/lod3D.fragment.js +15 -2
  372. package/Shaders/lod3D.fragment.js.map +1 -1
  373. package/Shaders/lodCube.fragment.js +15 -2
  374. package/Shaders/lodCube.fragment.js.map +1 -1
  375. package/Shaders/openpbr.vertex.js +2 -0
  376. package/Shaders/openpbr.vertex.js.map +1 -1
  377. package/Shaders/pbr.fragment.js +12 -1
  378. package/Shaders/pbr.fragment.js.map +1 -1
  379. package/Shaders/pbr.vertex.js +2 -0
  380. package/Shaders/pbr.vertex.js.map +1 -1
  381. package/Shaders/textureMerger.fragment.js +28 -0
  382. package/Shaders/textureMerger.fragment.js.map +1 -1
  383. package/Shaders/textureProcessor.fragment.js +26 -4
  384. package/Shaders/textureProcessor.fragment.js.map +1 -1
  385. package/Shaders/volumetricLightScattering.fragment.js +1 -1
  386. package/Shaders/volumetricLightScattering.fragment.js.map +1 -1
  387. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js +2 -2
  388. package/ShadersWGSL/ShadersInclude/bumpFragmentMainFunctions.js.map +1 -1
  389. package/ShadersWGSL/ShadersInclude/bumpVertex.js +1 -1
  390. package/ShadersWGSL/ShadersInclude/bumpVertex.js.map +1 -1
  391. package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js +1 -1
  392. package/ShadersWGSL/ShadersInclude/bumpVertexDeclaration.js.map +1 -1
  393. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js +1 -1
  394. package/ShadersWGSL/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  395. package/ShadersWGSL/ShadersInclude/helperFunctions.js +2 -2
  396. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -1
  397. package/ShadersWGSL/ShadersInclude/lightFragment.js +44 -2
  398. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  399. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js +17 -3
  400. package/ShadersWGSL/ShadersInclude/lightUboDeclaration.js.map +1 -1
  401. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js +12 -1
  402. package/ShadersWGSL/ShadersInclude/lightVxUboDeclaration.js.map +1 -1
  403. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js +1 -1
  404. package/ShadersWGSL/ShadersInclude/openpbrBackgroundTransmission.js.map +1 -1
  405. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +11 -1
  406. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  407. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js +9 -0
  408. package/ShadersWGSL/ShadersInclude/pbrBlockNormalFinal.js.map +1 -1
  409. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +1 -1
  410. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  411. package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js +1 -1
  412. package/ShadersWGSL/ShadersInclude/pbrClusteredLightingFunctions.js.map +1 -1
  413. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js +1 -1
  414. package/ShadersWGSL/ShadersInclude/pbrDirectLightingSetupFunctions.js.map +1 -1
  415. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
  416. package/ShadersWGSL/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  417. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js +8 -0
  418. package/ShadersWGSL/ShadersInclude/pbrIBLFunctions.js.map +1 -1
  419. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js +1 -1
  420. package/ShadersWGSL/ShadersInclude/pbrUboDeclaration.js.map +1 -1
  421. package/ShadersWGSL/ShadersInclude/prePassVertex.js +2 -2
  422. package/ShadersWGSL/ShadersInclude/prePassVertex.js.map +1 -1
  423. package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js +1 -1
  424. package/ShadersWGSL/ShadersInclude/prePassVertexDeclaration.js.map +1 -1
  425. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js +3 -1
  426. package/ShadersWGSL/ShadersInclude/sceneUboDeclaration.js.map +1 -1
  427. package/ShadersWGSL/ShadersInclude/shadowsVertex.js +16 -0
  428. package/ShadersWGSL/ShadersInclude/shadowsVertex.js.map +1 -1
  429. package/ShadersWGSL/default.fragment.js +4 -4
  430. package/ShadersWGSL/default.fragment.js.map +1 -1
  431. package/ShadersWGSL/default.vertex.js +1 -1
  432. package/ShadersWGSL/default.vertex.js.map +1 -1
  433. package/ShadersWGSL/gaussianSplatting.vertex.js +3 -3
  434. package/ShadersWGSL/gaussianSplatting.vertex.js.map +1 -1
  435. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  436. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  437. package/ShadersWGSL/gsSortCount.compute.d.ts +5 -0
  438. package/ShadersWGSL/gsSortCount.compute.js +19 -0
  439. package/ShadersWGSL/gsSortCount.compute.js.map +1 -0
  440. package/ShadersWGSL/gsSortKeys.compute.d.ts +5 -0
  441. package/ShadersWGSL/gsSortKeys.compute.js +49 -0
  442. package/ShadersWGSL/gsSortKeys.compute.js.map +1 -0
  443. package/ShadersWGSL/gsSortOutput.compute.d.ts +5 -0
  444. package/ShadersWGSL/gsSortOutput.compute.js +28 -0
  445. package/ShadersWGSL/gsSortOutput.compute.js.map +1 -0
  446. package/ShadersWGSL/gsSortScanLocal.compute.d.ts +5 -0
  447. package/ShadersWGSL/gsSortScanLocal.compute.js +23 -0
  448. package/ShadersWGSL/gsSortScanLocal.compute.js.map +1 -0
  449. package/ShadersWGSL/gsSortScanSums.compute.d.ts +5 -0
  450. package/ShadersWGSL/gsSortScanSums.compute.js +19 -0
  451. package/ShadersWGSL/gsSortScanSums.compute.js.map +1 -0
  452. package/ShadersWGSL/gsSortScatter.compute.d.ts +5 -0
  453. package/ShadersWGSL/gsSortScatter.compute.js +33 -0
  454. package/ShadersWGSL/gsSortScatter.compute.js.map +1 -0
  455. package/ShadersWGSL/lod.fragment.js +14 -2
  456. package/ShadersWGSL/lod.fragment.js.map +1 -1
  457. package/ShadersWGSL/lod3D.fragment.js +14 -2
  458. package/ShadersWGSL/lod3D.fragment.js.map +1 -1
  459. package/ShadersWGSL/lodCube.fragment.js +14 -2
  460. package/ShadersWGSL/lodCube.fragment.js.map +1 -1
  461. package/ShadersWGSL/openpbr.vertex.js +3 -1
  462. package/ShadersWGSL/openpbr.vertex.js.map +1 -1
  463. package/ShadersWGSL/pbr.fragment.js +11 -0
  464. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  465. package/ShadersWGSL/pbr.vertex.js +3 -1
  466. package/ShadersWGSL/pbr.vertex.js.map +1 -1
  467. package/ShadersWGSL/textureMerger.fragment.js +40 -4
  468. package/ShadersWGSL/textureMerger.fragment.js.map +1 -1
  469. package/ShadersWGSL/textureProcessor.fragment.js +26 -4
  470. package/ShadersWGSL/textureProcessor.fragment.js.map +1 -1
  471. package/Sprites/spriteRenderer.js +15 -5
  472. package/Sprites/spriteRenderer.js.map +1 -1
  473. package/package.json +1 -1
  474. package/scene.pure.d.ts +23 -1
  475. package/scene.pure.js +83 -1
  476. package/scene.pure.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"systemBlock.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/systemBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"core/types\";\r\nimport { type AbstractMesh } from \"core/Meshes/abstractMesh.pure\";\r\nimport { type ParticleSystem } from \"core/Particles/particleSystem.pure\";\r\nimport { type NodeParticleConnectionPoint } from \"core/Particles/Node/nodeParticleBlockConnectionPoint\";\r\nimport { type NodeParticleBuildState } from \"core/Particles/Node/nodeParticleBuildState\";\r\n\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport { _IsSideEffectImplemented } from \"../../../Misc/devTools\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport { Vector2, Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { Color4 } from \"core/Maths/math.color.pure\";\r\nimport { BaseParticleSystem } from \"core/Particles/baseParticleSystem.pure\";\r\nimport { NodeParticleBlock } from \"core/Particles/Node/nodeParticleBlock\";\r\nimport { _TriggerSubEmitter } from \"core/Particles/Node/Blocks/Triggers/triggerTools\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"core/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\ntype CustomShader = {\r\n shaderPath: { fragmentElement: string };\r\n shaderOptions: { uniforms: string[]; samplers: string[]; defines: string[] };\r\n};\r\n\r\n/**\r\n * Block used to get a system of particles\r\n */\r\nexport class SystemBlock extends NodeParticleBlock {\r\n private static _IdCounter = 0;\r\n\r\n /**\r\n * Gets or sets the blend mode for the particle system\r\n */\r\n @editableInPropertyPage(\"Blend mode\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"Blend Mode OneOne\", value: BaseParticleSystem.BLENDMODE_ONEONE },\r\n { label: \"Blend Mode Standard\", value: BaseParticleSystem.BLENDMODE_STANDARD },\r\n { label: \"Blend Mode Add\", value: BaseParticleSystem.BLENDMODE_ADD },\r\n { label: \"Blend Mode Multiply\", value: BaseParticleSystem.BLENDMODE_MULTIPLY },\r\n { label: \"Blend Mode MultiplyAdd\", value: BaseParticleSystem.BLENDMODE_MULTIPLYADD },\r\n ],\r\n })\r\n public blendMode = BaseParticleSystem.BLENDMODE_ONEONE;\r\n\r\n /**\r\n * Gets or sets the epsilon value used for comparison\r\n */\r\n @editableInPropertyPage(\"Capacity\", PropertyTypeForEdition.Int, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0, max: 10000 })\r\n public capacity = 1000;\r\n\r\n /**\r\n * Gets or sets the manual emit count\r\n */\r\n @editableInPropertyPage(\"Manual emit count\", PropertyTypeForEdition.Int, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: -1 })\r\n public manualEmitCount = -1;\r\n\r\n /**\r\n * Gets or sets the target stop duration for the particle system\r\n */\r\n @editableInPropertyPage(\"Delay start(ms)\", PropertyTypeForEdition.Float, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0 })\r\n public startDelay = 0;\r\n\r\n /**\r\n * Gets or sets the target stop duration for the particle system\r\n */\r\n @editableInPropertyPage(\"updateSpeed\", PropertyTypeForEdition.Float, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0, max: 0.1 })\r\n public updateSpeed = 0.0167;\r\n\r\n /**\r\n * Gets or sets the number of pre-warm cycles before rendering the particle system\r\n */\r\n @editableInPropertyPage(\"Pre-warm cycles\", PropertyTypeForEdition.Float, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0 })\r\n public preWarmCycles = 0;\r\n\r\n /**\r\n * Gets or sets the time step multiplier used for pre-warm\r\n */\r\n @editableInPropertyPage(\"Pre-warm step multiplier\", PropertyTypeForEdition.Float, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0 })\r\n public preWarmStepOffset = 0;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the system is billboard based\r\n */\r\n @editableInPropertyPage(\"Is billboard based\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public isBillboardBased = true;\r\n\r\n /**\r\n * Gets or sets the billboard mode for the particle system\r\n */\r\n @editableInPropertyPage(\"Billboard mode\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"Billboard Mode All\", value: Constants.PARTICLES_BILLBOARDMODE_ALL },\r\n { label: \"Billboard Mode Y\", value: Constants.PARTICLES_BILLBOARDMODE_Y },\r\n { label: \"Billboard Mode Stretched\", value: Constants.PARTICLES_BILLBOARDMODE_STRETCHED },\r\n { label: \"Billboard Mode Stretched Local\", value: Constants.PARTICLES_BILLBOARDMODE_STRETCHED_LOCAL },\r\n ],\r\n })\r\n public billBoardMode = Constants.PARTICLES_BILLBOARDMODE_ALL;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the system coordinate space is local or global\r\n */\r\n @editableInPropertyPage(\"Is local\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public isLocal = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the system should be disposed when stopped\r\n */\r\n @editableInPropertyPage(\"Dispose on stop\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public disposeOnStop = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the system should not start automatically\r\n */\r\n @editableInPropertyPage(\"Do no start\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public doNoStart = false;\r\n\r\n /**\r\n * Gets or sets the rendering group id for the particle system (0 by default)\r\n */\r\n @editableInPropertyPage(\"Rendering group id\", PropertyTypeForEdition.Int, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0 })\r\n public renderingGroupId = 0;\r\n\r\n /** @internal */\r\n public _internalId = SystemBlock._IdCounter++;\r\n\r\n /**\r\n * Gets or sets the custom shader configuration used to render the particles.\r\n * This can be used to set your own shader to render the particle system.\r\n */\r\n public customShader: Nullable<CustomShader> = null;\r\n\r\n /**\r\n * Gets or sets the emitter for the particle system.\r\n */\r\n public emitter: Nullable<AbstractMesh | Vector3> = Vector3.Zero();\r\n\r\n /**\r\n * Create a new SystemBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this._isSystem = true;\r\n\r\n this.registerInput(\"particle\", NodeParticleBlockConnectionPointTypes.Particle);\r\n this.registerInput(\"emitRate\", NodeParticleBlockConnectionPointTypes.Int, true, 10, 0);\r\n this.registerInput(\"texture\", NodeParticleBlockConnectionPointTypes.Texture);\r\n this.registerInput(\"translationPivot\", NodeParticleBlockConnectionPointTypes.Vector2, true);\r\n this.registerInput(\"textureMask\", NodeParticleBlockConnectionPointTypes.Color4, true);\r\n this.registerInput(\"targetStopDuration\", NodeParticleBlockConnectionPointTypes.Float, true, 0, 0);\r\n this.registerInput(\"onStart\", NodeParticleBlockConnectionPointTypes.System, true);\r\n this.registerInput(\"onEnd\", NodeParticleBlockConnectionPointTypes.System, true);\r\n this.registerOutput(\"system\", NodeParticleBlockConnectionPointTypes.System);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SystemBlock\";\r\n }\r\n\r\n /**\r\n * Gets the particle input component\r\n */\r\n public get particle(): NodeParticleConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the emitRate input component\r\n */\r\n public get emitRate(): NodeParticleConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the texture input component\r\n */\r\n public get texture(): NodeParticleConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the translationPivot input component\r\n */\r\n public get translationPivot(): NodeParticleConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the textureMask input component\r\n */\r\n public get textureMask(): NodeParticleConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the targetStopDuration input component\r\n */\r\n public get targetStopDuration(): NodeParticleConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the onStart input component\r\n */\r\n public get onStart(): NodeParticleConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the onEnd input component\r\n */\r\n public get onEnd(): NodeParticleConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the system output component\r\n */\r\n public get system(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Builds the block and return a functional particle system\r\n * @param state defines the building state\r\n * @returns the built particle system\r\n */\r\n public createSystem(state: NodeParticleBuildState): ParticleSystem {\r\n state.capacity = this.capacity;\r\n state.buildId = this._buildId++;\r\n\r\n this.build(state);\r\n\r\n const particleSystem = this.particle.getConnectedValue(state) as ParticleSystem;\r\n particleSystem.particleTexture = this.texture.getConnectedValue(state);\r\n particleSystem.emitRate = this.emitRate.getConnectedValue(state) as number;\r\n particleSystem.manualEmitCount = this.manualEmitCount;\r\n particleSystem.updateSpeed = this.updateSpeed;\r\n particleSystem.preWarmCycles = this.preWarmCycles;\r\n particleSystem.preWarmStepOffset = this.preWarmStepOffset;\r\n particleSystem.blendMode = this.blendMode;\r\n particleSystem.name = this.name;\r\n particleSystem._targetStopDuration = (this.targetStopDuration.getConnectedValue(state) as number) ?? 0;\r\n particleSystem.startDelay = this.startDelay;\r\n particleSystem.isBillboardBased = this.isBillboardBased;\r\n particleSystem.billboardMode = this.billBoardMode;\r\n particleSystem.translationPivot = (this.translationPivot.getConnectedValue(state) as Vector2) || Vector2.Zero();\r\n particleSystem.textureMask = this.textureMask.getConnectedValue(state) ?? new Color4(1, 1, 1, 1);\r\n particleSystem.isLocal = this.isLocal;\r\n particleSystem.disposeOnStop = this.disposeOnStop;\r\n particleSystem.renderingGroupId = this.renderingGroupId;\r\n if (this.emitter) {\r\n particleSystem.emitter = this.emitter;\r\n }\r\n\r\n // Apply custom shader if defined\r\n if (this.customShader) {\r\n const engine = particleSystem.getScene()?.getEngine();\r\n if (engine && _IsSideEffectImplemented(engine.createEffectForParticles)) {\r\n const defines: string = this.customShader.shaderOptions.defines.length > 0 ? this.customShader.shaderOptions.defines.join(\"\\n\") : \"\";\r\n const effect = engine.createEffectForParticles(\r\n this.customShader.shaderPath.fragmentElement,\r\n this.customShader.shaderOptions.uniforms,\r\n this.customShader.shaderOptions.samplers,\r\n defines\r\n );\r\n particleSystem.setCustomEffect(effect, 0);\r\n particleSystem.customShader = this.customShader;\r\n }\r\n }\r\n\r\n // The emit rate can vary if it is connected to another block like a gradient\r\n particleSystem._calculateEmitRate = () => {\r\n state.systemContext = particleSystem;\r\n return this.emitRate.getConnectedValue(state) as number;\r\n };\r\n\r\n this.system._storedValue = this;\r\n\r\n particleSystem.canStart = () => {\r\n return !this.doNoStart;\r\n };\r\n\r\n particleSystem.onStartedObservable.add((system) => {\r\n // Triggers\r\n const onStartSystem = this.onStart.getConnectedValue(state);\r\n if (onStartSystem) {\r\n system.onStartedObservable.addOnce(() => {\r\n state.systemContext = particleSystem;\r\n const clone = _TriggerSubEmitter(onStartSystem, state.scene, state.emitterPosition!);\r\n\r\n this.onDisposeObservable.addOnce(() => {\r\n // Clean up the cloned system when the original system is disposed\r\n clone.dispose();\r\n });\r\n });\r\n }\r\n\r\n const onEndSystem = this.onEnd.getConnectedValue(state);\r\n if (onEndSystem) {\r\n system.onStoppedObservable.addOnce(() => {\r\n state.systemContext = particleSystem;\r\n const clone = _TriggerSubEmitter(onEndSystem, state.scene, state.emitterPosition!);\r\n\r\n this.onDisposeObservable.addOnce(() => {\r\n // Clean up the cloned system when the original system is disposed\r\n clone.dispose();\r\n });\r\n });\r\n }\r\n });\r\n\r\n this.onDisposeObservable.addOnce(() => {\r\n particleSystem.dispose();\r\n });\r\n\r\n // Return\r\n return particleSystem;\r\n }\r\n\r\n /**\r\n * Serializes the system block\r\n * @returns The serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.capacity = this.capacity;\r\n serializationObject.manualEmitCount = this.manualEmitCount;\r\n serializationObject.blendMode = this.blendMode;\r\n serializationObject.updateSpeed = this.updateSpeed;\r\n serializationObject.preWarmCycles = this.preWarmCycles;\r\n serializationObject.preWarmStepOffset = this.preWarmStepOffset;\r\n serializationObject.isBillboardBased = this.isBillboardBased;\r\n serializationObject.billBoardMode = this.billBoardMode;\r\n serializationObject.isLocal = this.isLocal;\r\n serializationObject.disposeOnStop = this.disposeOnStop;\r\n serializationObject.doNoStart = this.doNoStart;\r\n serializationObject.renderingGroupId = this.renderingGroupId;\r\n serializationObject.startDelay = this.startDelay;\r\n serializationObject.customShader = this.customShader;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the system block\r\n * @param serializationObject The serialized system\r\n */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.capacity = serializationObject.capacity;\r\n this.manualEmitCount = serializationObject.manualEmitCount ?? -1;\r\n this.updateSpeed = serializationObject.updateSpeed ?? 0.0167;\r\n this.preWarmCycles = serializationObject.preWarmCycles ?? 0;\r\n this.preWarmStepOffset = serializationObject.preWarmStepOffset ?? 0;\r\n this.isBillboardBased = serializationObject.isBillboardBased ?? true;\r\n this.billBoardMode = serializationObject.billBoardMode ?? Constants.PARTICLES_BILLBOARDMODE_ALL;\r\n this.isLocal = serializationObject.isLocal ?? false;\r\n this.disposeOnStop = serializationObject.disposeOnStop ?? false;\r\n this.doNoStart = !!serializationObject.doNoStart;\r\n this.renderingGroupId = serializationObject.renderingGroupId ?? 0;\r\n\r\n if (serializationObject.emitRate !== undefined) {\r\n this.emitRate.value = serializationObject.emitRate;\r\n }\r\n\r\n if (serializationObject.blendMode !== undefined) {\r\n this.blendMode = serializationObject.blendMode;\r\n }\r\n\r\n if (serializationObject.startDelay !== undefined) {\r\n this.startDelay = serializationObject.startDelay;\r\n }\r\n\r\n if (serializationObject.customShader !== undefined) {\r\n this.customShader = serializationObject.customShader;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for systemBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterSystemBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.SystemBlock\", SystemBlock);\r\n}\r\n"]}
1
+ {"version":3,"file":"systemBlock.pure.js","sourceRoot":"","sources":["../../../../../../dev/core/src/Particles/Node/Blocks/systemBlock.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type Nullable } from \"core/types\";\r\nimport { type AbstractMesh } from \"core/Meshes/abstractMesh.pure\";\r\nimport { type ParticleSystem } from \"core/Particles/particleSystem.pure\";\r\nimport { type NodeParticleConnectionPoint } from \"core/Particles/Node/nodeParticleBlockConnectionPoint\";\r\nimport { type NodeParticleBuildState } from \"core/Particles/Node/nodeParticleBuildState\";\r\n\r\nimport { Constants } from \"../../../Engines/constants\";\r\nimport { _IsSideEffectImplemented } from \"../../../Misc/devTools\";\r\nimport { editableInPropertyPage, PropertyTypeForEdition } from \"core/Decorators/nodeDecorator\";\r\nimport { Vector2, Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { Color4 } from \"core/Maths/math.color.pure\";\r\nimport { BaseParticleSystem } from \"core/Particles/baseParticleSystem.pure\";\r\nimport { NodeParticleBlock } from \"core/Particles/Node/nodeParticleBlock\";\r\nimport { _TriggerSubEmitter } from \"core/Particles/Node/Blocks/Triggers/triggerTools\";\r\nimport { NodeParticleBlockConnectionPointTypes } from \"core/Particles/Node/Enums/nodeParticleBlockConnectionPointTypes\";\r\nimport { RegisterClass } from \"core/Misc/typeStore\";\r\n\r\ntype CustomShader = {\r\n shaderPath: { fragmentElement: string };\r\n shaderOptions: { uniforms: string[]; samplers: string[]; defines: string[] };\r\n};\r\n\r\n/**\r\n * Block used to get a system of particles\r\n */\r\nexport class SystemBlock extends NodeParticleBlock {\r\n private static _IdCounter = 0;\r\n\r\n /**\r\n * Gets or sets the blend mode for the particle system\r\n */\r\n @editableInPropertyPage(\"Blend mode\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"Blend Mode OneOne\", value: BaseParticleSystem.BLENDMODE_ONEONE },\r\n { label: \"Blend Mode Standard\", value: BaseParticleSystem.BLENDMODE_STANDARD },\r\n { label: \"Blend Mode Add\", value: BaseParticleSystem.BLENDMODE_ADD },\r\n { label: \"Blend Mode Multiply\", value: BaseParticleSystem.BLENDMODE_MULTIPLY },\r\n { label: \"Blend Mode MultiplyAdd\", value: BaseParticleSystem.BLENDMODE_MULTIPLYADD },\r\n ],\r\n })\r\n public blendMode = BaseParticleSystem.BLENDMODE_ONEONE;\r\n\r\n /**\r\n * Gets or sets the epsilon value used for comparison\r\n */\r\n @editableInPropertyPage(\"Capacity\", PropertyTypeForEdition.Int, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0, max: 10000 })\r\n public capacity = 1000;\r\n\r\n /**\r\n * Gets or sets the manual emit count\r\n */\r\n @editableInPropertyPage(\"Manual emit count\", PropertyTypeForEdition.Int, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: -1 })\r\n public manualEmitCount = -1;\r\n\r\n /**\r\n * Gets or sets the target stop duration for the particle system\r\n */\r\n @editableInPropertyPage(\"Delay start(ms)\", PropertyTypeForEdition.Float, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0 })\r\n public startDelay = 0;\r\n\r\n /**\r\n * Gets or sets the target stop duration for the particle system\r\n */\r\n @editableInPropertyPage(\"updateSpeed\", PropertyTypeForEdition.Float, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0, max: 0.1 })\r\n public updateSpeed = 0.0167;\r\n\r\n /**\r\n * Gets or sets the number of pre-warm cycles before rendering the particle system\r\n */\r\n @editableInPropertyPage(\"Pre-warm cycles\", PropertyTypeForEdition.Float, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0 })\r\n public preWarmCycles = 0;\r\n\r\n /**\r\n * Gets or sets the time step multiplier used for pre-warm (default is 1)\r\n */\r\n @editableInPropertyPage(\"Pre-warm step multiplier\", PropertyTypeForEdition.Float, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0 })\r\n public preWarmStepOffset = 1;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the system is billboard based\r\n */\r\n @editableInPropertyPage(\"Is billboard based\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public isBillboardBased = true;\r\n\r\n /**\r\n * Gets or sets the billboard mode for the particle system\r\n */\r\n @editableInPropertyPage(\"Billboard mode\", PropertyTypeForEdition.List, \"ADVANCED\", {\r\n notifiers: { rebuild: true },\r\n embedded: true,\r\n options: [\r\n { label: \"Billboard Mode All\", value: Constants.PARTICLES_BILLBOARDMODE_ALL },\r\n { label: \"Billboard Mode Y\", value: Constants.PARTICLES_BILLBOARDMODE_Y },\r\n { label: \"Billboard Mode Stretched\", value: Constants.PARTICLES_BILLBOARDMODE_STRETCHED },\r\n { label: \"Billboard Mode Stretched Local\", value: Constants.PARTICLES_BILLBOARDMODE_STRETCHED_LOCAL },\r\n ],\r\n })\r\n public billBoardMode = Constants.PARTICLES_BILLBOARDMODE_ALL;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the system coordinate space is local or global\r\n */\r\n @editableInPropertyPage(\"Is local\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public isLocal = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the system should be disposed when stopped\r\n */\r\n @editableInPropertyPage(\"Dispose on stop\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public disposeOnStop = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the system should not start automatically\r\n */\r\n @editableInPropertyPage(\"Do no start\", PropertyTypeForEdition.Boolean, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true } })\r\n public doNoStart = false;\r\n\r\n /**\r\n * Gets or sets the rendering group id for the particle system (0 by default)\r\n */\r\n @editableInPropertyPage(\"Rendering group id\", PropertyTypeForEdition.Int, \"ADVANCED\", { embedded: true, notifiers: { rebuild: true }, min: 0 })\r\n public renderingGroupId = 0;\r\n\r\n /** @internal */\r\n public _internalId = SystemBlock._IdCounter++;\r\n\r\n /**\r\n * Gets or sets the custom shader configuration used to render the particles.\r\n * This can be used to set your own shader to render the particle system.\r\n */\r\n public customShader: Nullable<CustomShader> = null;\r\n\r\n /**\r\n * Gets or sets the emitter for the particle system.\r\n */\r\n public emitter: Nullable<AbstractMesh | Vector3> = Vector3.Zero();\r\n\r\n /**\r\n * Create a new SystemBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name);\r\n\r\n this._isSystem = true;\r\n\r\n this.registerInput(\"particle\", NodeParticleBlockConnectionPointTypes.Particle);\r\n this.registerInput(\"emitRate\", NodeParticleBlockConnectionPointTypes.Int, true, 10, 0);\r\n this.registerInput(\"texture\", NodeParticleBlockConnectionPointTypes.Texture);\r\n this.registerInput(\"translationPivot\", NodeParticleBlockConnectionPointTypes.Vector2, true);\r\n this.registerInput(\"textureMask\", NodeParticleBlockConnectionPointTypes.Color4, true);\r\n this.registerInput(\"targetStopDuration\", NodeParticleBlockConnectionPointTypes.Float, true, 0, 0);\r\n this.registerInput(\"onStart\", NodeParticleBlockConnectionPointTypes.System, true);\r\n this.registerInput(\"onEnd\", NodeParticleBlockConnectionPointTypes.System, true);\r\n this.registerOutput(\"system\", NodeParticleBlockConnectionPointTypes.System);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public override getClassName() {\r\n return \"SystemBlock\";\r\n }\r\n\r\n /**\r\n * Gets the particle input component\r\n */\r\n public get particle(): NodeParticleConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n /**\r\n * Gets the emitRate input component\r\n */\r\n public get emitRate(): NodeParticleConnectionPoint {\r\n return this._inputs[1];\r\n }\r\n\r\n /**\r\n * Gets the texture input component\r\n */\r\n public get texture(): NodeParticleConnectionPoint {\r\n return this._inputs[2];\r\n }\r\n\r\n /**\r\n * Gets the translationPivot input component\r\n */\r\n public get translationPivot(): NodeParticleConnectionPoint {\r\n return this._inputs[3];\r\n }\r\n\r\n /**\r\n * Gets the textureMask input component\r\n */\r\n public get textureMask(): NodeParticleConnectionPoint {\r\n return this._inputs[4];\r\n }\r\n\r\n /**\r\n * Gets the targetStopDuration input component\r\n */\r\n public get targetStopDuration(): NodeParticleConnectionPoint {\r\n return this._inputs[5];\r\n }\r\n\r\n /**\r\n * Gets the onStart input component\r\n */\r\n public get onStart(): NodeParticleConnectionPoint {\r\n return this._inputs[6];\r\n }\r\n\r\n /**\r\n * Gets the onEnd input component\r\n */\r\n public get onEnd(): NodeParticleConnectionPoint {\r\n return this._inputs[7];\r\n }\r\n\r\n /**\r\n * Gets the system output component\r\n */\r\n public get system(): NodeParticleConnectionPoint {\r\n return this._outputs[0];\r\n }\r\n\r\n /**\r\n * Builds the block and return a functional particle system\r\n * @param state defines the building state\r\n * @returns the built particle system\r\n */\r\n public createSystem(state: NodeParticleBuildState): ParticleSystem {\r\n state.capacity = this.capacity;\r\n state.buildId = this._buildId++;\r\n\r\n this.build(state);\r\n\r\n const particleSystem = this.particle.getConnectedValue(state) as ParticleSystem;\r\n particleSystem.particleTexture = this.texture.getConnectedValue(state);\r\n particleSystem.emitRate = this.emitRate.getConnectedValue(state) as number;\r\n particleSystem.manualEmitCount = this.manualEmitCount;\r\n particleSystem.updateSpeed = this.updateSpeed;\r\n particleSystem.preWarmCycles = this.preWarmCycles;\r\n particleSystem.preWarmStepOffset = this.preWarmStepOffset;\r\n particleSystem.blendMode = this.blendMode;\r\n particleSystem.name = this.name;\r\n particleSystem._targetStopDuration = (this.targetStopDuration.getConnectedValue(state) as number) ?? 0;\r\n particleSystem.startDelay = this.startDelay;\r\n particleSystem.isBillboardBased = this.isBillboardBased;\r\n particleSystem.billboardMode = this.billBoardMode;\r\n particleSystem.translationPivot = (this.translationPivot.getConnectedValue(state) as Vector2) || Vector2.Zero();\r\n particleSystem.textureMask = this.textureMask.getConnectedValue(state) ?? new Color4(1, 1, 1, 1);\r\n particleSystem.isLocal = this.isLocal;\r\n particleSystem.disposeOnStop = this.disposeOnStop;\r\n particleSystem.renderingGroupId = this.renderingGroupId;\r\n if (this.emitter) {\r\n particleSystem.emitter = this.emitter;\r\n }\r\n\r\n // Apply custom shader if defined\r\n if (this.customShader) {\r\n const engine = particleSystem.getScene()?.getEngine();\r\n if (engine && _IsSideEffectImplemented(engine.createEffectForParticles)) {\r\n const defines: string = this.customShader.shaderOptions.defines.length > 0 ? this.customShader.shaderOptions.defines.join(\"\\n\") : \"\";\r\n const effect = engine.createEffectForParticles(\r\n this.customShader.shaderPath.fragmentElement,\r\n this.customShader.shaderOptions.uniforms,\r\n this.customShader.shaderOptions.samplers,\r\n defines\r\n );\r\n particleSystem.setCustomEffect(effect, 0);\r\n particleSystem.customShader = this.customShader;\r\n }\r\n }\r\n\r\n // The emit rate can vary if it is connected to another block like a gradient\r\n particleSystem._calculateEmitRate = () => {\r\n state.systemContext = particleSystem;\r\n return this.emitRate.getConnectedValue(state) as number;\r\n };\r\n\r\n this.system._storedValue = this;\r\n\r\n particleSystem.canStart = () => {\r\n return !this.doNoStart;\r\n };\r\n\r\n particleSystem.onStartedObservable.add((system) => {\r\n // Triggers\r\n const onStartSystem = this.onStart.getConnectedValue(state);\r\n if (onStartSystem) {\r\n system.onStartedObservable.addOnce(() => {\r\n state.systemContext = particleSystem;\r\n const clone = _TriggerSubEmitter(onStartSystem, state.scene, state.emitterPosition!);\r\n\r\n this.onDisposeObservable.addOnce(() => {\r\n // Clean up the cloned system when the original system is disposed\r\n clone.dispose();\r\n });\r\n });\r\n }\r\n\r\n const onEndSystem = this.onEnd.getConnectedValue(state);\r\n if (onEndSystem) {\r\n system.onStoppedObservable.addOnce(() => {\r\n state.systemContext = particleSystem;\r\n const clone = _TriggerSubEmitter(onEndSystem, state.scene, state.emitterPosition!);\r\n\r\n this.onDisposeObservable.addOnce(() => {\r\n // Clean up the cloned system when the original system is disposed\r\n clone.dispose();\r\n });\r\n });\r\n }\r\n });\r\n\r\n this.onDisposeObservable.addOnce(() => {\r\n particleSystem.dispose();\r\n });\r\n\r\n // Return\r\n return particleSystem;\r\n }\r\n\r\n /**\r\n * Serializes the system block\r\n * @returns The serialized object\r\n */\r\n public override serialize(): any {\r\n const serializationObject = super.serialize();\r\n\r\n serializationObject.capacity = this.capacity;\r\n serializationObject.manualEmitCount = this.manualEmitCount;\r\n serializationObject.blendMode = this.blendMode;\r\n serializationObject.updateSpeed = this.updateSpeed;\r\n serializationObject.preWarmCycles = this.preWarmCycles;\r\n serializationObject.preWarmStepOffset = this.preWarmStepOffset;\r\n serializationObject.isBillboardBased = this.isBillboardBased;\r\n serializationObject.billBoardMode = this.billBoardMode;\r\n serializationObject.isLocal = this.isLocal;\r\n serializationObject.disposeOnStop = this.disposeOnStop;\r\n serializationObject.doNoStart = this.doNoStart;\r\n serializationObject.renderingGroupId = this.renderingGroupId;\r\n serializationObject.startDelay = this.startDelay;\r\n serializationObject.customShader = this.customShader;\r\n\r\n return serializationObject;\r\n }\r\n\r\n /**\r\n * Deserializes the system block\r\n * @param serializationObject The serialized system\r\n */\r\n public override _deserialize(serializationObject: any) {\r\n super._deserialize(serializationObject);\r\n\r\n this.capacity = serializationObject.capacity;\r\n this.manualEmitCount = serializationObject.manualEmitCount ?? -1;\r\n // SystemBlock had no preWarmStepOffset before it was serialized (Nov 2025), so graphs without the field ran\r\n // with ParticleSystem's default step multiplier of 1. A missing updateSpeed is ambiguous (graphs saved before\r\n // Nov 3, 2025 ran at 0.01, later ones at 0.0167), so it keeps the SystemBlock default.\r\n this.updateSpeed = serializationObject.updateSpeed ?? 0.0167;\r\n this.preWarmCycles = serializationObject.preWarmCycles ?? 0;\r\n this.preWarmStepOffset = serializationObject.preWarmStepOffset ?? 1;\r\n this.isBillboardBased = serializationObject.isBillboardBased ?? true;\r\n this.billBoardMode = serializationObject.billBoardMode ?? Constants.PARTICLES_BILLBOARDMODE_ALL;\r\n this.isLocal = serializationObject.isLocal ?? false;\r\n this.disposeOnStop = serializationObject.disposeOnStop ?? false;\r\n this.doNoStart = !!serializationObject.doNoStart;\r\n this.renderingGroupId = serializationObject.renderingGroupId ?? 0;\r\n\r\n if (serializationObject.emitRate !== undefined) {\r\n this.emitRate.value = serializationObject.emitRate;\r\n }\r\n\r\n if (serializationObject.blendMode !== undefined) {\r\n this.blendMode = serializationObject.blendMode;\r\n }\r\n\r\n if (serializationObject.startDelay !== undefined) {\r\n this.startDelay = serializationObject.startDelay;\r\n }\r\n\r\n if (serializationObject.customShader !== undefined) {\r\n this.customShader = serializationObject.customShader;\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for systemBlock.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterSystemBlock(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.SystemBlock\", SystemBlock);\r\n}\r\n"]}
@@ -19,6 +19,11 @@ export class ComputeShaderParticleSystem {
19
19
  /** @internal */
20
20
  contextLost() {
21
21
  this._updateComputeShader = undefined;
22
+ // Dispose the storage buffers before dropping them, so they don't stay registered in engine._storageBuffers
23
+ // (the engine would rebuild them after a context restoration, and they would never be released)
24
+ for (const buffer of this._bufferComputeShader) {
25
+ buffer.dispose();
26
+ }
22
27
  this._bufferComputeShader.length = 0;
23
28
  this._renderVertexBuffers.length = 0;
24
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"computeShaderParticleSystem.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/computeShaderParticleSystem.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type WebGPUEngine } from \"../Engines/webgpuEngine.pure\";\r\nimport { StorageBuffer } from \"../Buffers/storageBuffer\";\r\nimport { ComputeShader } from \"../Compute/computeShader.pure\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport { type IGPUParticleSystemPlatform } from \"./IGPUParticleSystemPlatform\";\r\nimport { type Buffer, type VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { type GPUParticleSystem } from \"./gpuParticleSystem.pure\";\r\nimport { type DataArray, type Nullable } from \"../types\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { UniformBufferEffectCommonAccessor } from \"../Materials/uniformBufferEffectCommonAccessor\";\r\nimport { type ComputeBindingMapping } from \"../Engines/Extensions/engine.computeShader.pure\";\r\nimport { type Effect } from \"../Materials/effect.pure\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/** @internal */\r\nexport class ComputeShaderParticleSystem implements IGPUParticleSystemPlatform {\r\n private _parent: GPUParticleSystem;\r\n private _engine: WebGPUEngine;\r\n private _updateComputeShader: ComputeShader;\r\n private _simParamsComputeShader: UniformBuffer;\r\n private _bufferComputeShader: StorageBuffer[] = [];\r\n private _renderVertexBuffers: Array<{ [key: string]: VertexBuffer }> = [];\r\n\r\n /** @internal */\r\n public readonly alignDataInBuffer = true;\r\n\r\n /** @internal */\r\n constructor(parent: GPUParticleSystem, engine: WebGPUEngine) {\r\n this._parent = parent;\r\n this._engine = engine;\r\n }\r\n\r\n /** @internal */\r\n public contextLost(): void {\r\n this._updateComputeShader = undefined as any;\r\n this._bufferComputeShader.length = 0;\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferCreated(): boolean {\r\n return !!this._updateComputeShader;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferReady(): boolean {\r\n return this._updateComputeShader?.isReady() ?? false;\r\n }\r\n\r\n /** @internal */\r\n public createUpdateBuffer(defines: string): UniformBufferEffectCommonAccessor {\r\n const bindingsMapping: ComputeBindingMapping = {\r\n params: { group: 0, binding: 0 },\r\n particlesIn: { group: 0, binding: 1 },\r\n particlesOut: { group: 0, binding: 2 },\r\n randomTexture: { group: 0, binding: 3 },\r\n randomTexture2: { group: 0, binding: 4 },\r\n };\r\n if (this._parent._sizeGradientsTexture) {\r\n bindingsMapping[\"sizeGradientTexture\"] = { group: 1, binding: 1 };\r\n }\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n bindingsMapping[\"angularSpeedGradientTexture\"] = { group: 1, binding: 3 };\r\n }\r\n if (this._parent._velocityGradientsTexture) {\r\n bindingsMapping[\"velocityGradientTexture\"] = { group: 1, binding: 5 };\r\n }\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n bindingsMapping[\"limitVelocityGradientTexture\"] = { group: 1, binding: 7 };\r\n }\r\n if (this._parent._dragGradientsTexture) {\r\n bindingsMapping[\"dragGradientTexture\"] = { group: 1, binding: 9 };\r\n }\r\n if (this._parent.noiseTexture) {\r\n bindingsMapping[\"noiseTexture\"] = { group: 1, binding: 11 };\r\n }\r\n if (this._parent.flowMap) {\r\n bindingsMapping[\"flowMapTexture\"] = { group: 1, binding: 13 };\r\n }\r\n if (this._parent._meshPositionTexture) {\r\n bindingsMapping[\"meshPositionTexture\"] = { group: 1, binding: 14 };\r\n }\r\n if (this._parent._meshNormalTexture) {\r\n bindingsMapping[\"meshNormalTexture\"] = { group: 1, binding: 15 };\r\n }\r\n\r\n this._updateComputeShader = new ComputeShader(\"updateParticles\", this._engine, \"gpuUpdateParticles\", {\r\n bindingsMapping,\r\n defines: defines.split(\"\\n\"),\r\n useExplicitComputePipelineLayout: true,\r\n });\r\n\r\n this._simParamsComputeShader?.dispose();\r\n this._simParamsComputeShader = new UniformBuffer(this._engine, undefined, undefined, \"ComputeShaderParticleSystemUBO\");\r\n\r\n this._simParamsComputeShader.addUniform(\"currentCount\", 1);\r\n this._simParamsComputeShader.addUniform(\"timeDelta\", 1);\r\n this._simParamsComputeShader.addUniform(\"stopFactor\", 1);\r\n this._simParamsComputeShader.addUniform(\"randomTextureSize\", 1);\r\n this._simParamsComputeShader.addUniform(\"lifeTime\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitPower\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitIndex\", 1);\r\n this._simParamsComputeShader.addUniform(\"emitCount\", 1);\r\n if (!this._parent._colorGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"color1\", 4);\r\n this._simParamsComputeShader.addUniform(\"color2\", 4);\r\n }\r\n this._simParamsComputeShader.addUniform(\"sizeRange\", 2);\r\n this._simParamsComputeShader.addUniform(\"scaleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"angleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"gravity\", 3);\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"limitVelocityDamping\", 1);\r\n }\r\n if (this._parent.isAnimationSheetEnabled) {\r\n this._simParamsComputeShader.addUniform(\"cellInfos\", 4);\r\n }\r\n if (this._parent.noiseTexture) {\r\n this._simParamsComputeShader.addUniform(\"noiseStrength\", 3);\r\n }\r\n if (this._parent.flowMap) {\r\n this._simParamsComputeShader.addUniform(\"flowMapProjection\", 16);\r\n this._simParamsComputeShader.addUniform(\"flowMapStrength\", 1);\r\n }\r\n if (!this._parent.isLocal) {\r\n this._simParamsComputeShader.addUniform(\"emitterWM\", 16);\r\n }\r\n if (this._parent.attractors.length > 0) {\r\n this._simParamsComputeShader.addUniform(\"attractorCount\", 1);\r\n for (let i = 0; i < this._parent.maxAttractors; i++) {\r\n this._simParamsComputeShader.addUniform(\"attractorPositionAndStrength[\" + i + \"]\", 4);\r\n }\r\n }\r\n if (this._parent._startSizeGradients && this._parent._startSizeGradients.length > 0) {\r\n this._simParamsComputeShader.addUniform(\"startSizeGradientFactor\", 1);\r\n }\r\n if (this._parent._lifeTimeGradients && this._parent._lifeTimeGradients.length > 0) {\r\n this._simParamsComputeShader.addUniform(\"lifeTimeGradientRange\", 2);\r\n }\r\n if (this._parent._meshPositionTexture) {\r\n this._simParamsComputeShader.addUniform(\"meshTriangleCount\", 1);\r\n this._simParamsComputeShader.addUniform(\"meshTextureWidth\", 1);\r\n }\r\n if (this._parent.particleEmitterType) {\r\n this._parent.particleEmitterType.buildUniformLayout(this._simParamsComputeShader);\r\n }\r\n\r\n this._updateComputeShader.setUniformBuffer(\"params\", this._simParamsComputeShader);\r\n\r\n return new UniformBufferEffectCommonAccessor(this._simParamsComputeShader);\r\n }\r\n\r\n /** @internal */\r\n public createVertexBuffers(updateBuffer: Buffer, renderVertexBuffers: { [key: string]: VertexBuffer }): void {\r\n this._renderVertexBuffers.push(renderVertexBuffers);\r\n }\r\n\r\n /** @internal */\r\n public createParticleBuffer(data: number[]): DataArray | DataBuffer {\r\n const buffer = new StorageBuffer(\r\n this._engine,\r\n data.length * 4,\r\n Constants.BUFFER_CREATIONFLAG_READWRITE | Constants.BUFFER_CREATIONFLAG_VERTEX,\r\n \"ComputeShaderParticleSystemBuffer\"\r\n );\r\n\r\n buffer.update(data);\r\n this._bufferComputeShader.push(buffer);\r\n\r\n return buffer.getBuffer();\r\n }\r\n\r\n /** @internal */\r\n public bindDrawBuffers(index: number, effect: Effect, indexBuffer: Nullable<DataBuffer>): void {\r\n this._engine.bindBuffers(this._renderVertexBuffers[index], indexBuffer, effect);\r\n }\r\n\r\n /** @internal */\r\n public preUpdateParticleBuffer(): void {}\r\n\r\n /** @internal */\r\n public updateParticleBuffer(index: number, targetBuffer: Buffer, currentActiveCount: number): void {\r\n this._simParamsComputeShader.update();\r\n\r\n this._updateComputeShader.setTexture(\"randomTexture\", this._parent._randomTexture, false);\r\n this._updateComputeShader.setTexture(\"randomTexture2\", this._parent._randomTexture2, false);\r\n if (this._parent._sizeGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"sizeGradientTexture\", this._parent._sizeGradientsTexture);\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"angularSpeedGradientTexture\", this._parent._angularSpeedGradientsTexture);\r\n }\r\n\r\n if (this._parent._velocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"velocityGradientTexture\", this._parent._velocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"limitVelocityGradientTexture\", this._parent._limitVelocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._dragGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"dragGradientTexture\", this._parent._dragGradientsTexture);\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateComputeShader.setTexture(\"noiseTexture\", this._parent.noiseTexture);\r\n }\r\n\r\n if (this._parent.flowMap) {\r\n this._updateComputeShader.setTexture(\"flowMapTexture\", this._parent.flowMap);\r\n }\r\n\r\n if (this._parent._meshPositionTexture) {\r\n this._updateComputeShader.setTexture(\"meshPositionTexture\", this._parent._meshPositionTexture, false);\r\n }\r\n\r\n if (this._parent._meshNormalTexture) {\r\n this._updateComputeShader.setTexture(\"meshNormalTexture\", this._parent._meshNormalTexture, false);\r\n }\r\n\r\n this._updateComputeShader.setStorageBuffer(\"particlesIn\", this._bufferComputeShader[index]);\r\n this._updateComputeShader.setStorageBuffer(\"particlesOut\", this._bufferComputeShader[index ^ 1]);\r\n\r\n this._updateComputeShader.dispatch(Math.ceil(currentActiveCount / 64));\r\n }\r\n\r\n /** @internal */\r\n public releaseBuffers(): void {\r\n for (let i = 0; i < this._bufferComputeShader.length; ++i) {\r\n this._bufferComputeShader[i].dispose();\r\n }\r\n\r\n this._bufferComputeShader.length = 0;\r\n\r\n this._simParamsComputeShader?.dispose();\r\n (<any>this._simParamsComputeShader) = null;\r\n\r\n (<any>this._updateComputeShader) = null;\r\n }\r\n\r\n /** @internal */\r\n public releaseVertexBuffers(): void {\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for computeShaderParticleSystem.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterComputeShaderParticleSystem(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.ComputeShaderParticleSystem\", ComputeShaderParticleSystem);\r\n}\r\n"]}
1
+ {"version":3,"file":"computeShaderParticleSystem.pure.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/computeShaderParticleSystem.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { type WebGPUEngine } from \"../Engines/webgpuEngine.pure\";\r\nimport { StorageBuffer } from \"../Buffers/storageBuffer\";\r\nimport { ComputeShader } from \"../Compute/computeShader.pure\";\r\nimport { UniformBuffer } from \"../Materials/uniformBuffer\";\r\nimport { type IGPUParticleSystemPlatform } from \"./IGPUParticleSystemPlatform\";\r\nimport { type Buffer, type VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { type GPUParticleSystem } from \"./gpuParticleSystem.pure\";\r\nimport { type DataArray, type Nullable } from \"../types\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { UniformBufferEffectCommonAccessor } from \"../Materials/uniformBufferEffectCommonAccessor\";\r\nimport { type ComputeBindingMapping } from \"../Engines/Extensions/engine.computeShader.pure\";\r\nimport { type Effect } from \"../Materials/effect.pure\";\r\nimport { RegisterClass } from \"../Misc/typeStore\";\r\n\r\n/** @internal */\r\nexport class ComputeShaderParticleSystem implements IGPUParticleSystemPlatform {\r\n private _parent: GPUParticleSystem;\r\n private _engine: WebGPUEngine;\r\n private _updateComputeShader: ComputeShader;\r\n private _simParamsComputeShader: UniformBuffer;\r\n private _bufferComputeShader: StorageBuffer[] = [];\r\n private _renderVertexBuffers: Array<{ [key: string]: VertexBuffer }> = [];\r\n\r\n /** @internal */\r\n public readonly alignDataInBuffer = true;\r\n\r\n /** @internal */\r\n constructor(parent: GPUParticleSystem, engine: WebGPUEngine) {\r\n this._parent = parent;\r\n this._engine = engine;\r\n }\r\n\r\n /** @internal */\r\n public contextLost(): void {\r\n this._updateComputeShader = undefined as any;\r\n // Dispose the storage buffers before dropping them, so they don't stay registered in engine._storageBuffers\r\n // (the engine would rebuild them after a context restoration, and they would never be released)\r\n for (const buffer of this._bufferComputeShader) {\r\n buffer.dispose();\r\n }\r\n this._bufferComputeShader.length = 0;\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferCreated(): boolean {\r\n return !!this._updateComputeShader;\r\n }\r\n\r\n /** @internal */\r\n public isUpdateBufferReady(): boolean {\r\n return this._updateComputeShader?.isReady() ?? false;\r\n }\r\n\r\n /** @internal */\r\n public createUpdateBuffer(defines: string): UniformBufferEffectCommonAccessor {\r\n const bindingsMapping: ComputeBindingMapping = {\r\n params: { group: 0, binding: 0 },\r\n particlesIn: { group: 0, binding: 1 },\r\n particlesOut: { group: 0, binding: 2 },\r\n randomTexture: { group: 0, binding: 3 },\r\n randomTexture2: { group: 0, binding: 4 },\r\n };\r\n if (this._parent._sizeGradientsTexture) {\r\n bindingsMapping[\"sizeGradientTexture\"] = { group: 1, binding: 1 };\r\n }\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n bindingsMapping[\"angularSpeedGradientTexture\"] = { group: 1, binding: 3 };\r\n }\r\n if (this._parent._velocityGradientsTexture) {\r\n bindingsMapping[\"velocityGradientTexture\"] = { group: 1, binding: 5 };\r\n }\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n bindingsMapping[\"limitVelocityGradientTexture\"] = { group: 1, binding: 7 };\r\n }\r\n if (this._parent._dragGradientsTexture) {\r\n bindingsMapping[\"dragGradientTexture\"] = { group: 1, binding: 9 };\r\n }\r\n if (this._parent.noiseTexture) {\r\n bindingsMapping[\"noiseTexture\"] = { group: 1, binding: 11 };\r\n }\r\n if (this._parent.flowMap) {\r\n bindingsMapping[\"flowMapTexture\"] = { group: 1, binding: 13 };\r\n }\r\n if (this._parent._meshPositionTexture) {\r\n bindingsMapping[\"meshPositionTexture\"] = { group: 1, binding: 14 };\r\n }\r\n if (this._parent._meshNormalTexture) {\r\n bindingsMapping[\"meshNormalTexture\"] = { group: 1, binding: 15 };\r\n }\r\n\r\n this._updateComputeShader = new ComputeShader(\"updateParticles\", this._engine, \"gpuUpdateParticles\", {\r\n bindingsMapping,\r\n defines: defines.split(\"\\n\"),\r\n useExplicitComputePipelineLayout: true,\r\n });\r\n\r\n this._simParamsComputeShader?.dispose();\r\n this._simParamsComputeShader = new UniformBuffer(this._engine, undefined, undefined, \"ComputeShaderParticleSystemUBO\");\r\n\r\n this._simParamsComputeShader.addUniform(\"currentCount\", 1);\r\n this._simParamsComputeShader.addUniform(\"timeDelta\", 1);\r\n this._simParamsComputeShader.addUniform(\"stopFactor\", 1);\r\n this._simParamsComputeShader.addUniform(\"randomTextureSize\", 1);\r\n this._simParamsComputeShader.addUniform(\"lifeTime\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitPower\", 2);\r\n this._simParamsComputeShader.addUniform(\"emitIndex\", 1);\r\n this._simParamsComputeShader.addUniform(\"emitCount\", 1);\r\n if (!this._parent._colorGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"color1\", 4);\r\n this._simParamsComputeShader.addUniform(\"color2\", 4);\r\n }\r\n this._simParamsComputeShader.addUniform(\"sizeRange\", 2);\r\n this._simParamsComputeShader.addUniform(\"scaleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"angleRange\", 4);\r\n this._simParamsComputeShader.addUniform(\"gravity\", 3);\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._simParamsComputeShader.addUniform(\"limitVelocityDamping\", 1);\r\n }\r\n if (this._parent.isAnimationSheetEnabled) {\r\n this._simParamsComputeShader.addUniform(\"cellInfos\", 4);\r\n }\r\n if (this._parent.noiseTexture) {\r\n this._simParamsComputeShader.addUniform(\"noiseStrength\", 3);\r\n }\r\n if (this._parent.flowMap) {\r\n this._simParamsComputeShader.addUniform(\"flowMapProjection\", 16);\r\n this._simParamsComputeShader.addUniform(\"flowMapStrength\", 1);\r\n }\r\n if (!this._parent.isLocal) {\r\n this._simParamsComputeShader.addUniform(\"emitterWM\", 16);\r\n }\r\n if (this._parent.attractors.length > 0) {\r\n this._simParamsComputeShader.addUniform(\"attractorCount\", 1);\r\n for (let i = 0; i < this._parent.maxAttractors; i++) {\r\n this._simParamsComputeShader.addUniform(\"attractorPositionAndStrength[\" + i + \"]\", 4);\r\n }\r\n }\r\n if (this._parent._startSizeGradients && this._parent._startSizeGradients.length > 0) {\r\n this._simParamsComputeShader.addUniform(\"startSizeGradientFactor\", 1);\r\n }\r\n if (this._parent._lifeTimeGradients && this._parent._lifeTimeGradients.length > 0) {\r\n this._simParamsComputeShader.addUniform(\"lifeTimeGradientRange\", 2);\r\n }\r\n if (this._parent._meshPositionTexture) {\r\n this._simParamsComputeShader.addUniform(\"meshTriangleCount\", 1);\r\n this._simParamsComputeShader.addUniform(\"meshTextureWidth\", 1);\r\n }\r\n if (this._parent.particleEmitterType) {\r\n this._parent.particleEmitterType.buildUniformLayout(this._simParamsComputeShader);\r\n }\r\n\r\n this._updateComputeShader.setUniformBuffer(\"params\", this._simParamsComputeShader);\r\n\r\n return new UniformBufferEffectCommonAccessor(this._simParamsComputeShader);\r\n }\r\n\r\n /** @internal */\r\n public createVertexBuffers(updateBuffer: Buffer, renderVertexBuffers: { [key: string]: VertexBuffer }): void {\r\n this._renderVertexBuffers.push(renderVertexBuffers);\r\n }\r\n\r\n /** @internal */\r\n public createParticleBuffer(data: number[]): DataArray | DataBuffer {\r\n const buffer = new StorageBuffer(\r\n this._engine,\r\n data.length * 4,\r\n Constants.BUFFER_CREATIONFLAG_READWRITE | Constants.BUFFER_CREATIONFLAG_VERTEX,\r\n \"ComputeShaderParticleSystemBuffer\"\r\n );\r\n\r\n buffer.update(data);\r\n this._bufferComputeShader.push(buffer);\r\n\r\n return buffer.getBuffer();\r\n }\r\n\r\n /** @internal */\r\n public bindDrawBuffers(index: number, effect: Effect, indexBuffer: Nullable<DataBuffer>): void {\r\n this._engine.bindBuffers(this._renderVertexBuffers[index], indexBuffer, effect);\r\n }\r\n\r\n /** @internal */\r\n public preUpdateParticleBuffer(): void {}\r\n\r\n /** @internal */\r\n public updateParticleBuffer(index: number, targetBuffer: Buffer, currentActiveCount: number): void {\r\n this._simParamsComputeShader.update();\r\n\r\n this._updateComputeShader.setTexture(\"randomTexture\", this._parent._randomTexture, false);\r\n this._updateComputeShader.setTexture(\"randomTexture2\", this._parent._randomTexture2, false);\r\n if (this._parent._sizeGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"sizeGradientTexture\", this._parent._sizeGradientsTexture);\r\n }\r\n\r\n if (this._parent._angularSpeedGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"angularSpeedGradientTexture\", this._parent._angularSpeedGradientsTexture);\r\n }\r\n\r\n if (this._parent._velocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"velocityGradientTexture\", this._parent._velocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._limitVelocityGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"limitVelocityGradientTexture\", this._parent._limitVelocityGradientsTexture);\r\n }\r\n\r\n if (this._parent._dragGradientsTexture) {\r\n this._updateComputeShader.setTexture(\"dragGradientTexture\", this._parent._dragGradientsTexture);\r\n }\r\n\r\n if (this._parent.noiseTexture) {\r\n this._updateComputeShader.setTexture(\"noiseTexture\", this._parent.noiseTexture);\r\n }\r\n\r\n if (this._parent.flowMap) {\r\n this._updateComputeShader.setTexture(\"flowMapTexture\", this._parent.flowMap);\r\n }\r\n\r\n if (this._parent._meshPositionTexture) {\r\n this._updateComputeShader.setTexture(\"meshPositionTexture\", this._parent._meshPositionTexture, false);\r\n }\r\n\r\n if (this._parent._meshNormalTexture) {\r\n this._updateComputeShader.setTexture(\"meshNormalTexture\", this._parent._meshNormalTexture, false);\r\n }\r\n\r\n this._updateComputeShader.setStorageBuffer(\"particlesIn\", this._bufferComputeShader[index]);\r\n this._updateComputeShader.setStorageBuffer(\"particlesOut\", this._bufferComputeShader[index ^ 1]);\r\n\r\n this._updateComputeShader.dispatch(Math.ceil(currentActiveCount / 64));\r\n }\r\n\r\n /** @internal */\r\n public releaseBuffers(): void {\r\n for (let i = 0; i < this._bufferComputeShader.length; ++i) {\r\n this._bufferComputeShader[i].dispose();\r\n }\r\n\r\n this._bufferComputeShader.length = 0;\r\n\r\n this._simParamsComputeShader?.dispose();\r\n (<any>this._simParamsComputeShader) = null;\r\n\r\n (<any>this._updateComputeShader) = null;\r\n }\r\n\r\n /** @internal */\r\n public releaseVertexBuffers(): void {\r\n this._renderVertexBuffers.length = 0;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for computeShaderParticleSystem.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterComputeShaderParticleSystem(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(\"BABYLON.ComputeShaderParticleSystem\", ComputeShaderParticleSystem);\r\n}\r\n"]}
@@ -67,6 +67,7 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
67
67
  private readonly _rawTextureWidth;
68
68
  private _platform;
69
69
  private _rebuildingAfterContextLost;
70
+ private _rebuildRetryTimeout;
70
71
  /**
71
72
  * Whether the particle buffer needs to store the initial emission direction.
72
73
  * True when particles are not billboarded (they orient by direction) or when
@@ -582,6 +583,7 @@ export declare class GPUParticleSystem extends BaseParticleSystem implements IDi
582
583
  * Rebuilds the particle system
583
584
  */
584
585
  rebuild(): void;
586
+ private _cancelRebuildRetry;
585
587
  private _releaseBuffers;
586
588
  /**
587
589
  * Disposes the particle system and free the associated resources
@@ -780,6 +780,7 @@ export class GPUParticleSystem extends BaseParticleSystem {
780
780
  this._renderShadersLoaded = false;
781
781
  this._rawTextureWidth = 256;
782
782
  this._rebuildingAfterContextLost = false;
783
+ this._rebuildRetryTimeout = null;
783
784
  // Emit rate gradient caching (mirrors ThinParticleSystem)
784
785
  this._currentEmitRateGradient = null;
785
786
  this._currentEmitRate1 = 0;
@@ -2056,22 +2057,43 @@ export class GPUParticleSystem extends BaseParticleSystem {
2056
2057
  */
2057
2058
  rebuild() {
2058
2059
  const checkUpdateEffect = () => {
2060
+ this._rebuildRetryTimeout = null;
2059
2061
  if (!this._recreateUpdateEffect() || !this._platform.isUpdateBufferReady()) {
2060
- setTimeout(checkUpdateEffect, 10);
2062
+ this._rebuildRetryTimeout = setTimeout(checkUpdateEffect, 10);
2061
2063
  }
2062
2064
  else {
2063
2065
  this._initialize(true);
2064
2066
  this._rebuildingAfterContextLost = false;
2065
2067
  }
2066
2068
  };
2069
+ // A previous rebuild still waiting for the update effect is superseded by this one
2070
+ this._cancelRebuildRetry();
2067
2071
  this._createIndexBuffer();
2068
2072
  this._cachedUpdateDefines = "";
2069
2073
  // Re-upload mesh emitter data if the mesh geometry changed
2070
2074
  this._disposeMeshEmitterTextures();
2071
2075
  this._platform.contextLost();
2072
2076
  this._rebuildingAfterContextLost = true;
2077
+ // The draw contexts can still hold resources of the lost device (in WebGPU, the indirect draw buffer used for the instanced draws)
2078
+ for (const drawWrappers of this._drawWrappers) {
2079
+ if (!drawWrappers) {
2080
+ continue;
2081
+ }
2082
+ for (const drawWrapper of drawWrappers) {
2083
+ drawWrapper?._recreateDrawContext(this._engine);
2084
+ }
2085
+ }
2086
+ for (const blendMode in this._customWrappers) {
2087
+ this._customWrappers[blendMode]?._recreateDrawContext(this._engine);
2088
+ }
2073
2089
  checkUpdateEffect();
2074
2090
  }
2091
+ _cancelRebuildRetry() {
2092
+ if (this._rebuildRetryTimeout !== null) {
2093
+ clearTimeout(this._rebuildRetryTimeout);
2094
+ this._rebuildRetryTimeout = null;
2095
+ }
2096
+ }
2075
2097
  _releaseBuffers() {
2076
2098
  if (this._buffer0) {
2077
2099
  this._buffer0.dispose();
@@ -2092,6 +2114,8 @@ export class GPUParticleSystem extends BaseParticleSystem {
2092
2114
  * @param disposeTexture defines if the particule texture must be disposed as well (true by default)
2093
2115
  */
2094
2116
  dispose(disposeTexture = true) {
2117
+ // A rebuild waiting for the update effect would recreate the particle buffers after the disposal
2118
+ this._cancelRebuildRetry();
2095
2119
  this._engine._onReleaseRenderPassObservable?.remove(this._renderPassObserver);
2096
2120
  this._renderPassObserver = null;
2097
2121
  for (const drawWrappers of this._drawWrappers) {