@babylonjs/core 8.8.0 → 8.8.2

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 (409) hide show
  1. package/Actions/actionManager.js +2 -0
  2. package/Actions/actionManager.js.map +1 -1
  3. package/Animations/animatable.core.js +1 -1
  4. package/Animations/animatable.core.js.map +1 -1
  5. package/Animations/animation.js +4 -2
  6. package/Animations/animation.js.map +1 -1
  7. package/Audio/audioEngine.d.ts +1 -1
  8. package/Audio/audioEngine.js +20 -10
  9. package/Audio/audioEngine.js.map +1 -1
  10. package/Audio/audioSceneComponent.js +2 -0
  11. package/Audio/audioSceneComponent.js.map +1 -1
  12. package/Audio/sound.js +2 -0
  13. package/Audio/sound.js.map +1 -1
  14. package/AudioV2/abstractAudio/audioEngineV2.js +8 -1
  15. package/AudioV2/abstractAudio/audioEngineV2.js.map +1 -1
  16. package/AudioV2/abstractAudio/streamingSound.js +3 -1
  17. package/AudioV2/abstractAudio/streamingSound.js.map +1 -1
  18. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js +6 -2
  19. package/AudioV2/abstractAudio/subNodes/abstractAudioSubGraph.js.map +1 -1
  20. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +3 -0
  21. package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
  22. package/AudioV2/abstractAudio/subProperties/spatialAudio.js +1 -0
  23. package/AudioV2/abstractAudio/subProperties/spatialAudio.js.map +1 -1
  24. package/AudioV2/webAudio/webAudioEngine.js +5 -1
  25. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  26. package/AudioV2/webAudio/webAudioStaticSound.js +2 -0
  27. package/AudioV2/webAudio/webAudioStaticSound.js.map +1 -1
  28. package/AudioV2/webAudio/webAudioStreamingSound.js +3 -0
  29. package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
  30. package/AudioV2/webAudio/webAudioUnmuteUI.js +1 -0
  31. package/AudioV2/webAudio/webAudioUnmuteUI.js.map +1 -1
  32. package/BakedVertexAnimation/vertexAnimationBaker.d.ts +1 -0
  33. package/BakedVertexAnimation/vertexAnimationBaker.js +3 -1
  34. package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
  35. package/Buffers/buffer.nonFloatVertexBuffers.js +1 -0
  36. package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
  37. package/Buffers/storageBuffer.js +1 -1
  38. package/Buffers/storageBuffer.js.map +1 -1
  39. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js +2 -0
  40. package/Cameras/Inputs/arcRotateCameraVRDeviceOrientationInput.js.map +1 -1
  41. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js +6 -1
  42. package/Cameras/Inputs/freeCameraDeviceOrientationInput.js.map +1 -1
  43. package/Cameras/VR/vrExperienceHelper.js +2 -0
  44. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  45. package/Collisions/gpuPicker.js +9 -6
  46. package/Collisions/gpuPicker.js.map +1 -1
  47. package/Compute/computeShader.js +1 -1
  48. package/Compute/computeShader.js.map +1 -1
  49. package/Culling/Helper/boundingInfoHelper.js +3 -3
  50. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  51. package/Culling/Helper/computeShaderBoundingHelper.js +3 -1
  52. package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
  53. package/Culling/Helper/transformFeedbackBoundingHelper.js +3 -0
  54. package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
  55. package/Debug/debugLayer.js +1 -1
  56. package/Debug/debugLayer.js.map +1 -1
  57. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +1 -0
  58. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
  59. package/Engines/Extensions/engine.prefilteredCubeTexture.js +1 -0
  60. package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
  61. package/Engines/Extensions/engine.readTexture.js +1 -0
  62. package/Engines/Extensions/engine.readTexture.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -0
  64. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  65. package/Engines/WebGPU/Extensions/engine.readTexture.js +1 -0
  66. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  67. package/Engines/WebGPU/Extensions/engine.videoTexture.js +2 -0
  68. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  69. package/Engines/WebGPU/webgpuBufferManager.js +3 -1
  70. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  71. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -0
  72. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  73. package/Engines/WebGPU/webgpuQuerySet.js +15 -9
  74. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  75. package/Engines/WebGPU/webgpuTextureManager.js +1 -0
  76. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  77. package/Engines/WebGPU/webgpuTimestampQuery.js +4 -2
  78. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  79. package/Engines/WebGPU/webgpuTintWASM.js +1 -0
  80. package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
  81. package/Engines/abstractEngine.js +5 -2
  82. package/Engines/abstractEngine.js.map +1 -1
  83. package/Engines/constants.d.ts +23 -0
  84. package/Engines/constants.js +23 -0
  85. package/Engines/constants.js.map +1 -1
  86. package/Engines/engine.common.js +7 -1
  87. package/Engines/engine.common.js.map +1 -1
  88. package/Engines/engine.js +5 -3
  89. package/Engines/engine.js.map +1 -1
  90. package/Engines/engineFactory.js +1 -1
  91. package/Engines/engineFactory.js.map +1 -1
  92. package/Engines/nativeEngine.js +19 -11
  93. package/Engines/nativeEngine.js.map +1 -1
  94. package/Engines/thinEngine.d.ts +1 -0
  95. package/Engines/thinEngine.js +22 -18
  96. package/Engines/thinEngine.js.map +1 -1
  97. package/Engines/webgpuEngine.js +30 -11
  98. package/Engines/webgpuEngine.js.map +1 -1
  99. package/FlowGraph/flowGraphParser.js +2 -2
  100. package/FlowGraph/flowGraphParser.js.map +1 -1
  101. package/FrameGraph/Node/nodeRenderGraph.js +5 -1
  102. package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
  103. package/FrameGraph/Node/nodeRenderGraphBlock.js +1 -1
  104. package/FrameGraph/Node/nodeRenderGraphBlock.js.map +1 -1
  105. package/FrameGraph/frameGraph.js +1 -1
  106. package/FrameGraph/frameGraph.js.map +1 -1
  107. package/Helpers/sceneHelpers.js +1 -3
  108. package/Helpers/sceneHelpers.js.map +1 -1
  109. package/Helpers/videoDome.js +1 -0
  110. package/Helpers/videoDome.js.map +1 -1
  111. package/Layers/thinEffectLayer.js +1 -0
  112. package/Layers/thinEffectLayer.js.map +1 -1
  113. package/LensFlares/lensFlareSystem.js +1 -0
  114. package/LensFlares/lensFlareSystem.js.map +1 -1
  115. package/Lights/Shadows/shadowGenerator.js +3 -2
  116. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  117. package/Lights/areaLight.js +2 -0
  118. package/Lights/areaLight.js.map +1 -1
  119. package/Loading/sceneLoader.js +56 -22
  120. package/Loading/sceneLoader.js.map +1 -1
  121. package/Materials/GaussianSplatting/gaussianSplattingMaterial.d.ts +15 -1
  122. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +34 -7
  123. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  124. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +1 -0
  125. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  126. package/Materials/Node/Blocks/Dual/fogBlock.js +1 -0
  127. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  128. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -0
  129. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  130. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +1 -0
  131. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +1 -0
  133. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  134. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +1 -0
  135. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  136. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +1 -0
  137. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  138. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +9 -11
  139. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  140. package/Materials/Node/Blocks/PBR/sheenBlock.js +1 -1
  141. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +6 -2
  143. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  144. package/Materials/Node/Blocks/Vertex/bonesBlock.js +1 -0
  145. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  146. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +1 -0
  147. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  148. package/Materials/Node/nodeMaterial.js +11 -3
  149. package/Materials/Node/nodeMaterial.js.map +1 -1
  150. package/Materials/Node/nodeMaterialBuildState.js +1 -0
  151. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  152. package/Materials/PBR/pbrBRDFConfiguration.d.ts +11 -0
  153. package/Materials/PBR/pbrBRDFConfiguration.js +16 -0
  154. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  155. package/Materials/PBR/pbrBaseMaterial.d.ts +4 -0
  156. package/Materials/PBR/pbrBaseMaterial.js +12 -8
  157. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  158. package/Materials/PBR/pbrMaterial.d.ts +8 -0
  159. package/Materials/PBR/pbrMaterial.js +16 -0
  160. package/Materials/PBR/pbrMaterial.js.map +1 -1
  161. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +1 -0
  162. package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
  163. package/Materials/Textures/Loaders/basisTextureLoader.js +4 -0
  164. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  165. package/Materials/Textures/Loaders/envTextureLoader.js +1 -0
  166. package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
  167. package/Materials/Textures/Loaders/exrTextureLoader.js +2 -0
  168. package/Materials/Textures/Loaders/exrTextureLoader.js.map +1 -1
  169. package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -0
  170. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  171. package/Materials/Textures/Loaders/textureLoaderManager.js +9 -9
  172. package/Materials/Textures/Loaders/textureLoaderManager.js.map +1 -1
  173. package/Materials/Textures/Packer/packer.js +3 -1
  174. package/Materials/Textures/Packer/packer.js.map +1 -1
  175. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -0
  176. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  177. package/Materials/Textures/baseTexture.polynomial.js +1 -0
  178. package/Materials/Textures/baseTexture.polynomial.js.map +1 -1
  179. package/Materials/Textures/hdrCubeTexture.js +1 -0
  180. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  181. package/Materials/Textures/internalTexture.js +1 -0
  182. package/Materials/Textures/internalTexture.js.map +1 -1
  183. package/Materials/Textures/rawCubeTexture.js +3 -0
  184. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  185. package/Materials/Textures/renderTargetTexture.js +2 -0
  186. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  187. package/Materials/Textures/videoTexture.js +6 -0
  188. package/Materials/Textures/videoTexture.js.map +1 -1
  189. package/Materials/effect.js +2 -1
  190. package/Materials/effect.js.map +1 -1
  191. package/Materials/effect.webgl.functions.js +3 -1
  192. package/Materials/effect.webgl.functions.js.map +1 -1
  193. package/Materials/effectRenderer.js +1 -0
  194. package/Materials/effectRenderer.js.map +1 -1
  195. package/Materials/material.js +2 -1
  196. package/Materials/material.js.map +1 -1
  197. package/Materials/shaderMaterial.js +4 -2
  198. package/Materials/shaderMaterial.js.map +1 -1
  199. package/Meshes/Compression/dracoCodec.js +5 -1
  200. package/Meshes/Compression/dracoCodec.js.map +1 -1
  201. package/Meshes/Compression/dracoCompression.js +4 -3
  202. package/Meshes/Compression/dracoCompression.js.map +1 -1
  203. package/Meshes/Compression/dracoCompressionWorker.js +5 -2
  204. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  205. package/Meshes/Compression/dracoDecoder.js +5 -1
  206. package/Meshes/Compression/dracoDecoder.js.map +1 -1
  207. package/Meshes/Compression/dracoEncoder.js +3 -2
  208. package/Meshes/Compression/dracoEncoder.js.map +1 -1
  209. package/Meshes/Compression/meshoptCompression.js +18 -18
  210. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  211. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +14 -15
  212. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  213. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +20 -10
  214. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  215. package/Meshes/Node/Blocks/booleanGeometryBlock.js +1 -0
  216. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  217. package/Meshes/Node/nodeGeometry.js +5 -1
  218. package/Meshes/Node/nodeGeometry.js.map +1 -1
  219. package/Meshes/mesh.js +2 -2
  220. package/Meshes/mesh.js.map +1 -1
  221. package/Meshes/meshUVSpaceRenderer.js +1 -0
  222. package/Meshes/meshUVSpaceRenderer.js.map +1 -1
  223. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +1 -0
  224. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  225. package/Misc/assetsManager.js +2 -1
  226. package/Misc/assetsManager.js.map +1 -1
  227. package/Misc/asyncLock.js +5 -2
  228. package/Misc/asyncLock.js.map +1 -1
  229. package/Misc/basis.js +9 -2
  230. package/Misc/basis.js.map +1 -1
  231. package/Misc/basisWorker.js +3 -1
  232. package/Misc/basisWorker.js.map +1 -1
  233. package/Misc/copyTextureToTexture.js +1 -0
  234. package/Misc/copyTextureToTexture.js.map +1 -1
  235. package/Misc/coroutine.js +2 -1
  236. package/Misc/coroutine.js.map +1 -1
  237. package/Misc/dataReader.js +3 -4
  238. package/Misc/dataReader.js.map +1 -1
  239. package/Misc/dumpTools.js +7 -1
  240. package/Misc/dumpTools.js.map +1 -1
  241. package/Misc/environmentTextureTools.d.ts +0 -2
  242. package/Misc/environmentTextureTools.js +20 -7
  243. package/Misc/environmentTextureTools.js.map +1 -1
  244. package/Misc/equirectangularCapture.js +2 -1
  245. package/Misc/equirectangularCapture.js.map +1 -1
  246. package/Misc/fileTools.js +2 -0
  247. package/Misc/fileTools.js.map +1 -1
  248. package/Misc/filesInput.js +5 -1
  249. package/Misc/filesInput.js.map +1 -1
  250. package/Misc/khronosTextureContainer2.js +10 -3
  251. package/Misc/khronosTextureContainer2.js.map +1 -1
  252. package/Misc/khronosTextureContainer2Worker.js +4 -1
  253. package/Misc/khronosTextureContainer2Worker.js.map +1 -1
  254. package/Misc/minMaxReducer.js +1 -0
  255. package/Misc/minMaxReducer.js.map +1 -1
  256. package/Misc/observable.extensions.js +3 -1
  257. package/Misc/observable.extensions.js.map +1 -1
  258. package/Misc/observable.js +2 -0
  259. package/Misc/observable.js.map +1 -1
  260. package/Misc/observableCoroutine.js +1 -0
  261. package/Misc/observableCoroutine.js.map +1 -1
  262. package/Misc/reflector.js +1 -0
  263. package/Misc/reflector.js.map +1 -1
  264. package/Misc/rgbdTextureTools.js +2 -1
  265. package/Misc/rgbdTextureTools.js.map +1 -1
  266. package/Misc/sceneSerializer.js +2 -2
  267. package/Misc/sceneSerializer.js.map +1 -1
  268. package/Misc/screenshotTools.js +9 -4
  269. package/Misc/screenshotTools.js.map +1 -1
  270. package/Misc/textureTools.js +2 -0
  271. package/Misc/textureTools.js.map +1 -1
  272. package/Misc/tools.internals.js +2 -1
  273. package/Misc/tools.internals.js.map +1 -1
  274. package/Misc/tools.js +9 -3
  275. package/Misc/tools.js.map +1 -1
  276. package/Misc/videoRecorder.js +1 -0
  277. package/Misc/videoRecorder.js.map +1 -1
  278. package/Misc/webRequest.fetch.js +2 -1
  279. package/Misc/webRequest.fetch.js.map +1 -1
  280. package/Misc/workerPool.js +3 -0
  281. package/Misc/workerPool.js.map +1 -1
  282. package/Particles/flowMap.js +1 -1
  283. package/Particles/flowMap.js.map +1 -1
  284. package/Particles/particleHelper.js +7 -0
  285. package/Particles/particleHelper.js.map +1 -1
  286. package/Particles/pointsCloudSystem.js +7 -7
  287. package/Particles/pointsCloudSystem.js.map +1 -1
  288. package/Particles/thinParticleSystem.js +2 -0
  289. package/Particles/thinParticleSystem.js.map +1 -1
  290. package/Physics/physicsHelper.js +2 -2
  291. package/Physics/physicsHelper.js.map +1 -1
  292. package/Physics/v1/Plugins/oimoJSPlugin.js +1 -1
  293. package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
  294. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  295. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  296. package/Rendering/GlobalIllumination/giRSMManager.js +1 -0
  297. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  298. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js +1 -0
  299. package/Rendering/IBLShadows/iblShadowsVoxelRenderer.js.map +1 -1
  300. package/Rendering/depthRenderer.js +1 -0
  301. package/Rendering/depthRenderer.js.map +1 -1
  302. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -1
  303. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  304. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  305. package/Rendering/geometryBufferRenderer.js +1 -0
  306. package/Rendering/geometryBufferRenderer.js.map +1 -1
  307. package/Rendering/iblCdfGenerator.js +4 -1
  308. package/Rendering/iblCdfGenerator.js.map +1 -1
  309. package/Shaders/ShadersInclude/lightFragment.js +5 -1
  310. package/Shaders/ShadersInclude/lightFragment.js.map +1 -1
  311. package/Shaders/ShadersInclude/pbrBRDFFunctions.js +12 -5
  312. package/Shaders/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  313. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js +3 -0
  314. package/Shaders/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  315. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js +21 -8
  316. package/Shaders/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  317. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js +3 -0
  318. package/Shaders/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  319. package/Shaders/ShadersInclude/pbrBlockReflectance.js +6 -6
  320. package/Shaders/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  321. package/Shaders/ShadersInclude/pbrBlockReflectance0.js +2 -7
  322. package/Shaders/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  323. package/Shaders/ShadersInclude/pbrBlockReflectivity.js +20 -16
  324. package/Shaders/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  325. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +6 -8
  326. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  327. package/Shaders/ShadersInclude/pbrDebug.js +2 -2
  328. package/Shaders/ShadersInclude/pbrDebug.js.map +1 -1
  329. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +1 -5
  330. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  331. package/Shaders/pbr.fragment.js +7 -3
  332. package/Shaders/pbr.fragment.js.map +1 -1
  333. package/ShadersWGSL/ShadersInclude/lightFragment.js +5 -1
  334. package/ShadersWGSL/ShadersInclude/lightFragment.js.map +1 -1
  335. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js +5 -5
  336. package/ShadersWGSL/ShadersInclude/pbrBRDFFunctions.js.map +1 -1
  337. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js +3 -0
  338. package/ShadersWGSL/ShadersInclude/pbrBlockDirectLighting.js.map +1 -1
  339. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js +21 -8
  340. package/ShadersWGSL/ShadersInclude/pbrBlockFinalLitComponents.js.map +1 -1
  341. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js +3 -0
  342. package/ShadersWGSL/ShadersInclude/pbrBlockFinalUnlitComponents.js.map +1 -1
  343. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js +6 -6
  344. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance.js.map +1 -1
  345. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js +2 -7
  346. package/ShadersWGSL/ShadersInclude/pbrBlockReflectance0.js.map +1 -1
  347. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js +22 -15
  348. package/ShadersWGSL/ShadersInclude/pbrBlockReflectivity.js.map +1 -1
  349. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js +6 -8
  350. package/ShadersWGSL/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  351. package/ShadersWGSL/ShadersInclude/pbrDebug.js +2 -2
  352. package/ShadersWGSL/ShadersInclude/pbrDebug.js.map +1 -1
  353. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +1 -7
  354. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  355. package/ShadersWGSL/pbr.fragment.js +7 -3
  356. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  357. package/Sprites/spriteManager.js +5 -1
  358. package/Sprites/spriteManager.js.map +1 -1
  359. package/Sprites/spriteRenderer.js +1 -0
  360. package/Sprites/spriteRenderer.js.map +1 -1
  361. package/XR/features/WebXRAnchorSystem.js +4 -3
  362. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  363. package/XR/features/WebXRDepthSensing.js +1 -1
  364. package/XR/features/WebXRDepthSensing.js.map +1 -1
  365. package/XR/features/WebXRHandTracking.js +4 -1
  366. package/XR/features/WebXRHandTracking.js.map +1 -1
  367. package/XR/features/WebXRHitTest.js +4 -1
  368. package/XR/features/WebXRHitTest.js.map +1 -1
  369. package/XR/features/WebXRHitTestLegacy.js +6 -5
  370. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  371. package/XR/features/WebXRImageTracking.js +2 -1
  372. package/XR/features/WebXRImageTracking.js.map +1 -1
  373. package/XR/features/WebXRLightEstimation.js +3 -0
  374. package/XR/features/WebXRLightEstimation.js.map +1 -1
  375. package/XR/features/WebXRNearInteraction.js +2 -0
  376. package/XR/features/WebXRNearInteraction.js.map +1 -1
  377. package/XR/features/WebXRPlaneDetector.js +2 -2
  378. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  379. package/XR/motionController/webXRAbstractMotionController.js +3 -2
  380. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  381. package/XR/motionController/webXRMicrosoftMixedRealityController.js +6 -6
  382. package/XR/motionController/webXRMicrosoftMixedRealityController.js.map +1 -1
  383. package/XR/motionController/webXRMotionControllerManager.js +15 -9
  384. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  385. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  386. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  387. package/XR/native/nativeXRFrame.js +1 -0
  388. package/XR/native/nativeXRFrame.js.map +1 -1
  389. package/XR/webXRDefaultExperience.js +10 -12
  390. package/XR/webXRDefaultExperience.js.map +1 -1
  391. package/XR/webXREnterExitUI.js +2 -1
  392. package/XR/webXREnterExitUI.js.map +1 -1
  393. package/XR/webXRExperienceHelper.js +5 -2
  394. package/XR/webXRExperienceHelper.js.map +1 -1
  395. package/XR/webXRFeaturesManager.js +1 -0
  396. package/XR/webXRFeaturesManager.js.map +1 -1
  397. package/XR/webXRInput.js +1 -0
  398. package/XR/webXRInput.js.map +1 -1
  399. package/XR/webXRInputSource.js +2 -0
  400. package/XR/webXRInputSource.js.map +1 -1
  401. package/XR/webXRManagedOutputCanvas.js +5 -1
  402. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  403. package/XR/webXRSessionManager.js +56 -60
  404. package/XR/webXRSessionManager.js.map +1 -1
  405. package/assetContainer.js +28 -28
  406. package/assetContainer.js.map +1 -1
  407. package/package.json +1 -1
  408. package/scene.js +5 -4
  409. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webRequest.fetch.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/webRequest.fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,GAAW,EACX,OAAgE;IAEhE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC9C,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;gBAC1B,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;oBACxB,MAAM,YAAY,GAA8B,EAAE,CAAC;oBACnD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;wBAC1B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;4BAC3C,YAAY,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBACnE,CAAC;oBACL,CAAC;oBAED,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;gBACxE,CAAC;qBAAM,CAAC;oBACJ,MAAM,CAAC,6BAA6B,GAAG,iBAAiB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9E,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { WebRequest } from \"./webRequest\";\r\n\r\n/**\r\n * Fetches a resource from the network\r\n * @param url defines the url to fetch the resource from\r\n * @param options defines the options to use when fetching the resource\r\n * @returns a promise that resolves when the resource is fetched\r\n * @internal\r\n */\r\nexport async function _FetchAsync(\r\n url: string,\r\n options: Partial<{ method: string; responseHeaders?: string[] }>\r\n): Promise<{ response: Response; headerValues: { [key: string]: string } }> {\r\n const method = options.method || \"GET\";\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const headerValues: { [key: string]: string } = {};\r\n if (options.responseHeaders) {\r\n for (const header of options.responseHeaders) {\r\n headerValues[header] = request.getResponseHeader(header) || \"\";\r\n }\r\n }\r\n\r\n resolve({ response: request.response, headerValues: headerValues });\r\n } else {\r\n reject(`Unable to fetch data from ${url}. Error code: ${request.status}`);\r\n }\r\n }\r\n });\r\n\r\n request.open(method, url);\r\n request.send();\r\n });\r\n}\r\n"]}
1
+ {"version":3,"file":"webRequest.fetch.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/webRequest.fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,GAAW,EACX,OAAgE;IAEhE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;YAC9C,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC;gBAC1B,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;oBACxB,MAAM,YAAY,GAA8B,EAAE,CAAC;oBACnD,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;wBAC1B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;4BAC3C,YAAY,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;wBACnE,CAAC;oBACL,CAAC;oBAED,OAAO,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC,CAAC;gBACxE,CAAC;qBAAM,CAAC;oBACJ,2EAA2E;oBAC3E,MAAM,CAAC,6BAA6B,GAAG,iBAAiB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9E,CAAC;YACL,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,EAAE,CAAC;IACnB,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { WebRequest } from \"./webRequest\";\r\n\r\n/**\r\n * Fetches a resource from the network\r\n * @param url defines the url to fetch the resource from\r\n * @param options defines the options to use when fetching the resource\r\n * @returns a promise that resolves when the resource is fetched\r\n * @internal\r\n */\r\nexport async function _FetchAsync(\r\n url: string,\r\n options: Partial<{ method: string; responseHeaders?: string[] }>\r\n): Promise<{ response: Response; headerValues: { [key: string]: string } }> {\r\n const method = options.method || \"GET\";\r\n return await new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const headerValues: { [key: string]: string } = {};\r\n if (options.responseHeaders) {\r\n for (const header of options.responseHeaders) {\r\n headerValues[header] = request.getResponseHeader(header) || \"\";\r\n }\r\n }\r\n\r\n resolve({ response: request.response, headerValues: headerValues });\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(`Unable to fetch data from ${url}. Error code: ${request.status}`);\r\n }\r\n }\r\n });\r\n\r\n request.open(method, url);\r\n request.send();\r\n });\r\n}\r\n"]}
@@ -18,6 +18,7 @@ export class WorkerPool {
18
18
  */
19
19
  dispose() {
20
20
  for (const workerInfo of this._workerInfos) {
21
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then
21
22
  workerInfo.workerPromise.then((worker) => {
22
23
  worker.terminate();
23
24
  });
@@ -46,6 +47,7 @@ export class WorkerPool {
46
47
  }
47
48
  _execute(workerInfo, action) {
48
49
  workerInfo.idle = false;
50
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then
49
51
  workerInfo.workerPromise.then((worker) => {
50
52
  action(worker, () => {
51
53
  const nextAction = this._pendingActions.shift();
@@ -97,6 +99,7 @@ export class AutoReleaseWorkerPool extends WorkerPool {
97
99
  if (workerInfo.idle) {
98
100
  // Schedule the worker to be terminated after the elapsed time.
99
101
  workerInfo.timeoutId = setTimeout(() => {
102
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then
100
103
  workerInfo.workerPromise.then((worker) => {
101
104
  worker.terminate();
102
105
  });
@@ -1 +1 @@
1
- {"version":3,"file":"workerPool.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/workerPool.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IDisposable } from \"../scene\";\r\n\r\ninterface IWorkerInfo {\r\n workerPromise: Promise<Worker>;\r\n idle: boolean;\r\n timeoutId?: ReturnType<typeof setTimeout>;\r\n}\r\n\r\n/**\r\n * Helper class to push actions to a pool of workers.\r\n */\r\nexport class WorkerPool implements IDisposable {\r\n protected _workerInfos: Array<IWorkerInfo>;\r\n protected _pendingActions = new Array<(worker: Worker, onComplete: () => void) => void>();\r\n\r\n /**\r\n * Constructor\r\n * @param workers Array of workers to use for actions\r\n */\r\n constructor(workers: Array<Worker>) {\r\n this._workerInfos = workers.map((worker) => ({\r\n workerPromise: Promise.resolve(worker),\r\n idle: true,\r\n }));\r\n }\r\n\r\n /**\r\n * Terminates all workers and clears any pending actions.\r\n */\r\n public dispose(): void {\r\n for (const workerInfo of this._workerInfos) {\r\n workerInfo.workerPromise.then((worker) => {\r\n worker.terminate();\r\n });\r\n }\r\n\r\n this._workerInfos.length = 0;\r\n this._pendingActions.length = 0;\r\n }\r\n\r\n /**\r\n * Pushes an action to the worker pool. If all the workers are active, the action will be\r\n * pended until a worker has completed its action.\r\n * @param action The action to perform. Call onComplete when the action is complete.\r\n */\r\n public push(action: (worker: Worker, onComplete: () => void) => void): void {\r\n if (!this._executeOnIdleWorker(action)) {\r\n this._pendingActions.push(action);\r\n }\r\n }\r\n\r\n protected _executeOnIdleWorker(action: (worker: Worker, onComplete: () => void) => void): boolean {\r\n for (const workerInfo of this._workerInfos) {\r\n if (workerInfo.idle) {\r\n this._execute(workerInfo, action);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected _execute(workerInfo: IWorkerInfo, action: (worker: Worker, onComplete: () => void) => void): void {\r\n workerInfo.idle = false;\r\n workerInfo.workerPromise.then((worker) => {\r\n action(worker, () => {\r\n const nextAction = this._pendingActions.shift();\r\n if (nextAction) {\r\n this._execute(workerInfo, nextAction);\r\n } else {\r\n workerInfo.idle = true;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Options for AutoReleaseWorkerPool\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface AutoReleaseWorkerPoolOptions {\r\n /**\r\n * Idle time elapsed before workers are terminated.\r\n */\r\n idleTimeElapsedBeforeRelease: number;\r\n}\r\n\r\n/**\r\n * Similar to the WorkerPool class except it creates and destroys workers automatically with a maximum of `maxWorkers` workers.\r\n * Workers are terminated when it is idle for at least `idleTimeElapsedBeforeRelease` milliseconds.\r\n */\r\nexport class AutoReleaseWorkerPool extends WorkerPool {\r\n /**\r\n * Default options for the constructor.\r\n * Override to change the defaults.\r\n */\r\n public static DefaultOptions: AutoReleaseWorkerPoolOptions = {\r\n idleTimeElapsedBeforeRelease: 1000,\r\n };\r\n\r\n private readonly _maxWorkers: number;\r\n private readonly _createWorkerAsync: () => Promise<Worker>;\r\n private readonly _options: AutoReleaseWorkerPoolOptions;\r\n\r\n constructor(maxWorkers: number, createWorkerAsync: () => Promise<Worker>, options = AutoReleaseWorkerPool.DefaultOptions) {\r\n super([]);\r\n\r\n this._maxWorkers = maxWorkers;\r\n this._createWorkerAsync = createWorkerAsync;\r\n this._options = options;\r\n }\r\n\r\n public override push(action: (worker: Worker, onComplete: () => void) => void): void {\r\n if (!this._executeOnIdleWorker(action)) {\r\n if (this._workerInfos.length < this._maxWorkers) {\r\n const workerInfo: IWorkerInfo = {\r\n workerPromise: this._createWorkerAsync(),\r\n idle: false,\r\n };\r\n this._workerInfos.push(workerInfo);\r\n this._execute(workerInfo, action);\r\n } else {\r\n this._pendingActions.push(action);\r\n }\r\n }\r\n }\r\n\r\n protected override _execute(workerInfo: IWorkerInfo, action: (worker: Worker, onComplete: () => void) => void): void {\r\n // Reset the idle timeout.\r\n if (workerInfo.timeoutId) {\r\n clearTimeout(workerInfo.timeoutId);\r\n delete workerInfo.timeoutId;\r\n }\r\n\r\n super._execute(workerInfo, (worker, onComplete) => {\r\n action(worker, () => {\r\n onComplete();\r\n\r\n if (workerInfo.idle) {\r\n // Schedule the worker to be terminated after the elapsed time.\r\n workerInfo.timeoutId = setTimeout(() => {\r\n workerInfo.workerPromise.then((worker) => {\r\n worker.terminate();\r\n });\r\n\r\n const indexOf = this._workerInfos.indexOf(workerInfo);\r\n if (indexOf !== -1) {\r\n this._workerInfos.splice(indexOf, 1);\r\n }\r\n }, this._options.idleTimeElapsedBeforeRelease);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"workerPool.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/workerPool.ts"],"names":[],"mappings":"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","sourcesContent":["import type { IDisposable } from \"../scene\";\r\n\r\ninterface IWorkerInfo {\r\n workerPromise: Promise<Worker>;\r\n idle: boolean;\r\n timeoutId?: ReturnType<typeof setTimeout>;\r\n}\r\n\r\n/**\r\n * Helper class to push actions to a pool of workers.\r\n */\r\nexport class WorkerPool implements IDisposable {\r\n protected _workerInfos: Array<IWorkerInfo>;\r\n protected _pendingActions = new Array<(worker: Worker, onComplete: () => void) => void>();\r\n\r\n /**\r\n * Constructor\r\n * @param workers Array of workers to use for actions\r\n */\r\n constructor(workers: Array<Worker>) {\r\n this._workerInfos = workers.map((worker) => ({\r\n workerPromise: Promise.resolve(worker),\r\n idle: true,\r\n }));\r\n }\r\n\r\n /**\r\n * Terminates all workers and clears any pending actions.\r\n */\r\n public dispose(): void {\r\n for (const workerInfo of this._workerInfos) {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n workerInfo.workerPromise.then((worker) => {\r\n worker.terminate();\r\n });\r\n }\r\n\r\n this._workerInfos.length = 0;\r\n this._pendingActions.length = 0;\r\n }\r\n\r\n /**\r\n * Pushes an action to the worker pool. If all the workers are active, the action will be\r\n * pended until a worker has completed its action.\r\n * @param action The action to perform. Call onComplete when the action is complete.\r\n */\r\n public push(action: (worker: Worker, onComplete: () => void) => void): void {\r\n if (!this._executeOnIdleWorker(action)) {\r\n this._pendingActions.push(action);\r\n }\r\n }\r\n\r\n protected _executeOnIdleWorker(action: (worker: Worker, onComplete: () => void) => void): boolean {\r\n for (const workerInfo of this._workerInfos) {\r\n if (workerInfo.idle) {\r\n this._execute(workerInfo, action);\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n protected _execute(workerInfo: IWorkerInfo, action: (worker: Worker, onComplete: () => void) => void): void {\r\n workerInfo.idle = false;\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n workerInfo.workerPromise.then((worker) => {\r\n action(worker, () => {\r\n const nextAction = this._pendingActions.shift();\r\n if (nextAction) {\r\n this._execute(workerInfo, nextAction);\r\n } else {\r\n workerInfo.idle = true;\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Options for AutoReleaseWorkerPool\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface AutoReleaseWorkerPoolOptions {\r\n /**\r\n * Idle time elapsed before workers are terminated.\r\n */\r\n idleTimeElapsedBeforeRelease: number;\r\n}\r\n\r\n/**\r\n * Similar to the WorkerPool class except it creates and destroys workers automatically with a maximum of `maxWorkers` workers.\r\n * Workers are terminated when it is idle for at least `idleTimeElapsedBeforeRelease` milliseconds.\r\n */\r\nexport class AutoReleaseWorkerPool extends WorkerPool {\r\n /**\r\n * Default options for the constructor.\r\n * Override to change the defaults.\r\n */\r\n public static DefaultOptions: AutoReleaseWorkerPoolOptions = {\r\n idleTimeElapsedBeforeRelease: 1000,\r\n };\r\n\r\n private readonly _maxWorkers: number;\r\n private readonly _createWorkerAsync: () => Promise<Worker>;\r\n private readonly _options: AutoReleaseWorkerPoolOptions;\r\n\r\n constructor(maxWorkers: number, createWorkerAsync: () => Promise<Worker>, options = AutoReleaseWorkerPool.DefaultOptions) {\r\n super([]);\r\n\r\n this._maxWorkers = maxWorkers;\r\n this._createWorkerAsync = createWorkerAsync;\r\n this._options = options;\r\n }\r\n\r\n public override push(action: (worker: Worker, onComplete: () => void) => void): void {\r\n if (!this._executeOnIdleWorker(action)) {\r\n if (this._workerInfos.length < this._maxWorkers) {\r\n const workerInfo: IWorkerInfo = {\r\n workerPromise: this._createWorkerAsync(),\r\n idle: false,\r\n };\r\n this._workerInfos.push(workerInfo);\r\n this._execute(workerInfo, action);\r\n } else {\r\n this._pendingActions.push(action);\r\n }\r\n }\r\n }\r\n\r\n protected override _execute(workerInfo: IWorkerInfo, action: (worker: Worker, onComplete: () => void) => void): void {\r\n // Reset the idle timeout.\r\n if (workerInfo.timeoutId) {\r\n clearTimeout(workerInfo.timeoutId);\r\n delete workerInfo.timeoutId;\r\n }\r\n\r\n super._execute(workerInfo, (worker, onComplete) => {\r\n action(worker, () => {\r\n onComplete();\r\n\r\n if (workerInfo.idle) {\r\n // Schedule the worker to be terminated after the elapsed time.\r\n workerInfo.timeoutId = setTimeout(() => {\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n workerInfo.workerPromise.then((worker) => {\r\n worker.terminate();\r\n });\r\n\r\n const indexOf = this._workerInfos.indexOf(workerInfo);\r\n if (indexOf !== -1) {\r\n this._workerInfos.splice(indexOf, 1);\r\n }\r\n }, this._options.idleTimeElapsedBeforeRelease);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n"]}
@@ -64,7 +64,7 @@ export class FlowMap {
64
64
  * @returns a promise that resolves to a FlowMap object
65
65
  */
66
66
  static async FromUrlAsync(url) {
67
- return new Promise((resolve, reject) => {
67
+ return await new Promise((resolve, reject) => {
68
68
  const flowCanvas = document.createElement("canvas");
69
69
  const flowCtx = flowCanvas.getContext("2d");
70
70
  let flowImageData = null;
@@ -1 +1 @@
1
- {"version":3,"file":"flowMap.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/flowMap.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport type { Particle } from \"../Particles/particle\";\r\nimport type { IVector3Like } from \"../Maths/math.like\";\r\n\r\nconst FlowVector = new Vector3(0, 0, 0);\r\nconst ScaledFlowVector = new Vector3(0, 0, 0);\r\nconst ScreenPos = new Vector3(0, 0, 0);\r\n\r\n/**\r\n * Represents an object that can move or be influenced by FlowMap\r\n */\r\nexport interface IFlowable {\r\n /**\r\n * The direction vector indicating the flow or movement direction of the object.\r\n */\r\n direction: Vector3;\r\n\r\n /**\r\n * The current position of the object in 3D space.\r\n */\r\n position: Vector3;\r\n}\r\n\r\n/**\r\n * Class used to represent a particle flow map.\r\n * #5DM02T#7\r\n * GPUParts: #5DM02T#12 (webgl2)\r\n * GPUParts: #5DM02T#13 (webgpu)\r\n */\r\nexport class FlowMap {\r\n /**\r\n * Create a new flow map.\r\n * @param width defines the width of the flow map\r\n * @param height defines the height of the flow map\r\n * @param data defines the data of the flow map\r\n */\r\n constructor(\r\n public readonly width: number,\r\n public readonly height: number,\r\n public readonly data: Uint8ClampedArray\r\n ) {}\r\n\r\n public processFlowable(flowable: IFlowable, strength = 1, flowMapSamplePosOrTransformationMatrix?: IVector3Like | Matrix) {\r\n if (!flowMapSamplePosOrTransformationMatrix) {\r\n return;\r\n }\r\n\r\n // Convert world pos to screen pos\r\n if (flowMapSamplePosOrTransformationMatrix instanceof Matrix) {\r\n Vector3.TransformCoordinatesToRef(flowable.position, flowMapSamplePosOrTransformationMatrix, ScreenPos);\r\n } else {\r\n ScreenPos.x = flowMapSamplePosOrTransformationMatrix.x;\r\n ScreenPos.y = flowMapSamplePosOrTransformationMatrix.y;\r\n ScreenPos.z = flowMapSamplePosOrTransformationMatrix.z;\r\n }\r\n\r\n const u = ScreenPos.x * 0.5 + 0.5;\r\n const v = 1.0 - (ScreenPos.y * 0.5 + 0.5);\r\n\r\n const x = Math.floor(u * this.width);\r\n const y = Math.floor(v * this.height);\r\n\r\n // Clamp\r\n if (x < 0 || x >= this.width || y < 0 || y >= this.height) {\r\n return;\r\n }\r\n\r\n const index = (y * this.width + x) * 4;\r\n const r = this.data[index];\r\n const g = this.data[index + 1];\r\n const b = this.data[index + 2];\r\n const a = this.data[index + 3];\r\n\r\n const fx = (r / 255.0) * 2.0 - 1.0;\r\n const fy = (g / 255.0) * 2.0 - 1.0;\r\n const fz = (b / 255.0) * 2.0 - 1.0;\r\n const localStrength = a / 255.0;\r\n\r\n FlowVector.set(fx, fy, fz);\r\n FlowVector.scaleToRef(strength * localStrength, ScaledFlowVector);\r\n\r\n flowable.direction.addInPlace(ScaledFlowVector); // Update IFlowable velocity\r\n }\r\n\r\n /** @internal */\r\n public _processParticle(particle: Particle, strength = 1, matrix?: Matrix) {\r\n this.processFlowable(particle, strength, matrix);\r\n }\r\n\r\n /**\r\n * Creates a FlowMap from a url.\r\n * @param url The url of the image to load\r\n * @returns a promise that resolves to a FlowMap object\r\n */\r\n public static async FromUrlAsync(url: string): Promise<FlowMap> {\r\n return new Promise((resolve, reject) => {\r\n const flowCanvas = document.createElement(\"canvas\");\r\n const flowCtx = flowCanvas.getContext(\"2d\")!;\r\n let flowImageData = null;\r\n\r\n const flowMapImage = new Image();\r\n flowMapImage.crossOrigin = \"anonymous\"; // If loading from another domain\r\n flowMapImage.src = url;\r\n\r\n flowMapImage.onerror = (e) => {\r\n reject(new Error(`Failed to load image: ${url} : ${e}`));\r\n };\r\n\r\n flowMapImage.onload = () => {\r\n flowCanvas.width = flowMapImage.width;\r\n flowCanvas.height = flowMapImage.height;\r\n flowCtx.drawImage(flowMapImage, 0, 0);\r\n flowImageData = flowCtx.getImageData(0, 0, flowCanvas.width, flowCanvas.height);\r\n\r\n resolve(new FlowMap(flowCanvas.width, flowCanvas.height, flowImageData.data));\r\n };\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"flowMap.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/flowMap.ts"],"names":[],"mappings":"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","sourcesContent":["import { Matrix, Vector3 } from \"../Maths/math.vector\";\r\nimport type { Particle } from \"../Particles/particle\";\r\nimport type { IVector3Like } from \"../Maths/math.like\";\r\n\r\nconst FlowVector = new Vector3(0, 0, 0);\r\nconst ScaledFlowVector = new Vector3(0, 0, 0);\r\nconst ScreenPos = new Vector3(0, 0, 0);\r\n\r\n/**\r\n * Represents an object that can move or be influenced by FlowMap\r\n */\r\nexport interface IFlowable {\r\n /**\r\n * The direction vector indicating the flow or movement direction of the object.\r\n */\r\n direction: Vector3;\r\n\r\n /**\r\n * The current position of the object in 3D space.\r\n */\r\n position: Vector3;\r\n}\r\n\r\n/**\r\n * Class used to represent a particle flow map.\r\n * #5DM02T#7\r\n * GPUParts: #5DM02T#12 (webgl2)\r\n * GPUParts: #5DM02T#13 (webgpu)\r\n */\r\nexport class FlowMap {\r\n /**\r\n * Create a new flow map.\r\n * @param width defines the width of the flow map\r\n * @param height defines the height of the flow map\r\n * @param data defines the data of the flow map\r\n */\r\n constructor(\r\n public readonly width: number,\r\n public readonly height: number,\r\n public readonly data: Uint8ClampedArray\r\n ) {}\r\n\r\n public processFlowable(flowable: IFlowable, strength = 1, flowMapSamplePosOrTransformationMatrix?: IVector3Like | Matrix) {\r\n if (!flowMapSamplePosOrTransformationMatrix) {\r\n return;\r\n }\r\n\r\n // Convert world pos to screen pos\r\n if (flowMapSamplePosOrTransformationMatrix instanceof Matrix) {\r\n Vector3.TransformCoordinatesToRef(flowable.position, flowMapSamplePosOrTransformationMatrix, ScreenPos);\r\n } else {\r\n ScreenPos.x = flowMapSamplePosOrTransformationMatrix.x;\r\n ScreenPos.y = flowMapSamplePosOrTransformationMatrix.y;\r\n ScreenPos.z = flowMapSamplePosOrTransformationMatrix.z;\r\n }\r\n\r\n const u = ScreenPos.x * 0.5 + 0.5;\r\n const v = 1.0 - (ScreenPos.y * 0.5 + 0.5);\r\n\r\n const x = Math.floor(u * this.width);\r\n const y = Math.floor(v * this.height);\r\n\r\n // Clamp\r\n if (x < 0 || x >= this.width || y < 0 || y >= this.height) {\r\n return;\r\n }\r\n\r\n const index = (y * this.width + x) * 4;\r\n const r = this.data[index];\r\n const g = this.data[index + 1];\r\n const b = this.data[index + 2];\r\n const a = this.data[index + 3];\r\n\r\n const fx = (r / 255.0) * 2.0 - 1.0;\r\n const fy = (g / 255.0) * 2.0 - 1.0;\r\n const fz = (b / 255.0) * 2.0 - 1.0;\r\n const localStrength = a / 255.0;\r\n\r\n FlowVector.set(fx, fy, fz);\r\n FlowVector.scaleToRef(strength * localStrength, ScaledFlowVector);\r\n\r\n flowable.direction.addInPlace(ScaledFlowVector); // Update IFlowable velocity\r\n }\r\n\r\n /** @internal */\r\n public _processParticle(particle: Particle, strength = 1, matrix?: Matrix) {\r\n this.processFlowable(particle, strength, matrix);\r\n }\r\n\r\n /**\r\n * Creates a FlowMap from a url.\r\n * @param url The url of the image to load\r\n * @returns a promise that resolves to a FlowMap object\r\n */\r\n public static async FromUrlAsync(url: string): Promise<FlowMap> {\r\n return await new Promise((resolve, reject) => {\r\n const flowCanvas = document.createElement(\"canvas\");\r\n const flowCtx = flowCanvas.getContext(\"2d\")!;\r\n let flowImageData = null;\r\n\r\n const flowMapImage = new Image();\r\n flowMapImage.crossOrigin = \"anonymous\"; // If loading from another domain\r\n flowMapImage.src = url;\r\n\r\n flowMapImage.onerror = (e) => {\r\n reject(new Error(`Failed to load image: ${url} : ${e}`));\r\n };\r\n\r\n flowMapImage.onload = () => {\r\n flowCanvas.width = flowMapImage.width;\r\n flowCanvas.height = flowMapImage.height;\r\n flowCtx.drawImage(flowMapImage, 0, 0);\r\n flowImageData = flowCtx.getImageData(0, 0, flowCanvas.width, flowCanvas.height);\r\n\r\n resolve(new FlowMap(flowCanvas.width, flowCanvas.height, flowImageData.data));\r\n };\r\n });\r\n }\r\n}\r\n"]}
@@ -54,6 +54,7 @@ export class ParticleHelper {
54
54
  * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)
55
55
  * @returns the ParticleSystemSet created
56
56
  */
57
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
57
58
  static CreateAsync(type, scene, gpu = false, capacity) {
58
59
  if (!scene) {
59
60
  scene = EngineStore.LastCreatedScene;
@@ -63,6 +64,7 @@ export class ParticleHelper {
63
64
  return new Promise((resolve, reject) => {
64
65
  if (gpu && !GPUParticleSystem.IsSupported) {
65
66
  scene.removePendingData(token);
67
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
66
68
  return reject("Particle system with GPU is not supported.");
67
69
  }
68
70
  Tools.LoadFile(`${ParticleHelper.BaseAssetsUrl}/systems/${type}.json`, (data) => {
@@ -71,6 +73,7 @@ export class ParticleHelper {
71
73
  return resolve(ParticleSystemSet.Parse(newData, scene, gpu, capacity));
72
74
  }, undefined, undefined, undefined, () => {
73
75
  scene.removePendingData(token);
76
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
74
77
  return reject(`An error occurred with the creation of your particle system. Check if your type '${type}' exists.`);
75
78
  });
76
79
  });
@@ -98,6 +101,7 @@ export class ParticleHelper {
98
101
  * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)
99
102
  * @returns a promise that will resolve to the new particle system
100
103
  */
104
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
101
105
  static ParseFromFileAsync(name, url, scene, gpu = false, rootUrl = "", capacity) {
102
106
  return new Promise((resolve, reject) => {
103
107
  const request = new WebRequest();
@@ -118,6 +122,7 @@ export class ParticleHelper {
118
122
  resolve(output);
119
123
  }
120
124
  else {
125
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
121
126
  reject("Unable to load the particle system");
122
127
  }
123
128
  }
@@ -135,6 +140,7 @@ export class ParticleHelper {
135
140
  * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)
136
141
  * @returns a promise that will resolve to the new particle system
137
142
  */
143
+ // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax
138
144
  static ParseFromSnippetAsync(snippetId, scene, gpu = false, rootUrl = "", capacity) {
139
145
  if (snippetId === "_BLANK") {
140
146
  const system = this.CreateDefault(null);
@@ -159,6 +165,7 @@ export class ParticleHelper {
159
165
  resolve(output);
160
166
  }
161
167
  else {
168
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
162
169
  reject("Unable to load the snippet " + snippetId);
163
170
  }
164
171
  }
@@ -1 +1 @@
1
- {"version":3,"file":"particleHelper.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/particleHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IParticleSystem } from \"./IParticleSystem\";\r\nimport { GPUParticleSystem } from \"./gpuParticleSystem\";\r\nimport { ParticleSystemSet } from \"./particleSystemSet\";\r\nimport { ParticleSystem } from \"./particleSystem\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\nimport { Constants } from \"../Engines/constants\";\r\n/**\r\n * This class is made for on one-liner static method to help creating particle system set.\r\n */\r\nexport class ParticleHelper {\r\n /**\r\n * Gets or sets base Assets URL\r\n */\r\n public static BaseAssetsUrl = ParticleSystemSet.BaseAssetsUrl;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n /**\r\n * Create a default particle system that you can tweak\r\n * @param emitter defines the emitter to use\r\n * @param capacity defines the system capacity (default is 500 particles)\r\n * @param scene defines the hosting scene\r\n * @param useGPU defines if a GPUParticleSystem must be created (default is false)\r\n * @returns the new Particle system\r\n */\r\n public static CreateDefault(emitter: Nullable<AbstractMesh | Vector3>, capacity = 500, scene?: Scene, useGPU = false): IParticleSystem {\r\n let system: IParticleSystem;\r\n\r\n if (useGPU) {\r\n system = new GPUParticleSystem(\"default system\", { capacity: capacity }, scene!);\r\n } else {\r\n system = new ParticleSystem(\"default system\", capacity, scene!);\r\n }\r\n\r\n system.emitter = emitter;\r\n const textureUrl = Tools.GetAssetUrl(\"https://assets.babylonjs.com/core/textures/flare.png\");\r\n system.particleTexture = new Texture(textureUrl, system.getScene());\r\n system.createConeEmitter(0.1, Math.PI / 4);\r\n\r\n // Particle color\r\n system.color1 = new Color4(1.0, 1.0, 1.0, 1.0);\r\n system.color2 = new Color4(1.0, 1.0, 1.0, 1.0);\r\n system.colorDead = new Color4(1.0, 1.0, 1.0, 0.0);\r\n\r\n // Particle Size\r\n system.minSize = 0.1;\r\n system.maxSize = 0.1;\r\n\r\n // Emission speed\r\n system.minEmitPower = 2;\r\n system.maxEmitPower = 2;\r\n\r\n // Update speed\r\n system.updateSpeed = 1 / 60;\r\n\r\n system.emitRate = 30;\r\n\r\n return system;\r\n }\r\n\r\n /**\r\n * This is the main static method (one-liner) of this helper to create different particle systems\r\n * @param type This string represents the type to the particle system to create\r\n * @param scene The scene where the particle system should live\r\n * @param gpu If the system will use gpu\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns the ParticleSystemSet created\r\n */\r\n public static CreateAsync(type: string, scene: Nullable<Scene>, gpu: boolean = false, capacity?: number): Promise<ParticleSystemSet> {\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n const token = {};\r\n\r\n scene!.addPendingData(token);\r\n\r\n return new Promise((resolve, reject) => {\r\n if (gpu && !GPUParticleSystem.IsSupported) {\r\n scene!.removePendingData(token);\r\n return reject(\"Particle system with GPU is not supported.\");\r\n }\r\n\r\n Tools.LoadFile(\r\n `${ParticleHelper.BaseAssetsUrl}/systems/${type}.json`,\r\n (data) => {\r\n scene!.removePendingData(token);\r\n const newData = JSON.parse(data.toString());\r\n return resolve(ParticleSystemSet.Parse(newData, scene!, gpu, capacity));\r\n },\r\n undefined,\r\n undefined,\r\n undefined,\r\n () => {\r\n scene!.removePendingData(token);\r\n return reject(`An error occurred with the creation of your particle system. Check if your type '${type}' exists.`);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Static function used to export a particle system to a ParticleSystemSet variable.\r\n * Please note that the emitter shape is not exported\r\n * @param systems defines the particle systems to export\r\n * @returns the created particle system set\r\n */\r\n public static ExportSet(systems: IParticleSystem[]): ParticleSystemSet {\r\n const set = new ParticleSystemSet();\r\n\r\n for (const system of systems) {\r\n set.systems.push(system);\r\n }\r\n\r\n return set;\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved in a remote file\r\n * @param name defines the name of the particle system to create (can be null or empty to use the one from the json data)\r\n * @param url defines the url to load from\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static ParseFromFileAsync(name: Nullable<string>, url: string, scene: Scene, gpu: boolean = false, rootUrl: string = \"\", capacity?: number): Promise<IParticleSystem> {\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const serializationObject = JSON.parse(request.responseText);\r\n let output: IParticleSystem;\r\n\r\n if (gpu) {\r\n output = GPUParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n } else {\r\n output = ParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n }\r\n\r\n if (name) {\r\n output.name = name;\r\n }\r\n\r\n resolve(output);\r\n } else {\r\n reject(\"Unable to load the particle system\");\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", url);\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved by the particle system editor\r\n * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static ParseFromSnippetAsync(snippetId: string, scene: Scene, gpu: boolean = false, rootUrl: string = \"\", capacity?: number): Promise<IParticleSystem> {\r\n if (snippetId === \"_BLANK\") {\r\n const system = this.CreateDefault(null);\r\n system.start();\r\n return Promise.resolve(system);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.particleSystem);\r\n let output: IParticleSystem;\r\n\r\n if (gpu) {\r\n output = GPUParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n } else {\r\n output = ParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n }\r\n output.snippetId = snippetId;\r\n\r\n resolve(output);\r\n } else {\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved by the particle system editor\r\n * @deprecated Please use ParseFromSnippetAsync instead\r\n * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static CreateFromSnippetAsync = ParticleHelper.ParseFromSnippetAsync;\r\n}\r\n"]}
1
+ {"version":3,"file":"particleHelper.js","sourceRoot":"","sources":["../../../../dev/core/src/Particles/particleHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { Scene } from \"../scene\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { Vector3 } from \"../Maths/math.vector\";\r\nimport { Color4 } from \"../Maths/math.color\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { IParticleSystem } from \"./IParticleSystem\";\r\nimport { GPUParticleSystem } from \"./gpuParticleSystem\";\r\nimport { ParticleSystemSet } from \"./particleSystemSet\";\r\nimport { ParticleSystem } from \"./particleSystem\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\nimport { Constants } from \"../Engines/constants\";\r\n/**\r\n * This class is made for on one-liner static method to help creating particle system set.\r\n */\r\nexport class ParticleHelper {\r\n /**\r\n * Gets or sets base Assets URL\r\n */\r\n public static BaseAssetsUrl = ParticleSystemSet.BaseAssetsUrl;\r\n\r\n /** Define the Url to load snippets */\r\n public static SnippetUrl = Constants.SnippetUrl;\r\n\r\n /**\r\n * Create a default particle system that you can tweak\r\n * @param emitter defines the emitter to use\r\n * @param capacity defines the system capacity (default is 500 particles)\r\n * @param scene defines the hosting scene\r\n * @param useGPU defines if a GPUParticleSystem must be created (default is false)\r\n * @returns the new Particle system\r\n */\r\n public static CreateDefault(emitter: Nullable<AbstractMesh | Vector3>, capacity = 500, scene?: Scene, useGPU = false): IParticleSystem {\r\n let system: IParticleSystem;\r\n\r\n if (useGPU) {\r\n system = new GPUParticleSystem(\"default system\", { capacity: capacity }, scene!);\r\n } else {\r\n system = new ParticleSystem(\"default system\", capacity, scene!);\r\n }\r\n\r\n system.emitter = emitter;\r\n const textureUrl = Tools.GetAssetUrl(\"https://assets.babylonjs.com/core/textures/flare.png\");\r\n system.particleTexture = new Texture(textureUrl, system.getScene());\r\n system.createConeEmitter(0.1, Math.PI / 4);\r\n\r\n // Particle color\r\n system.color1 = new Color4(1.0, 1.0, 1.0, 1.0);\r\n system.color2 = new Color4(1.0, 1.0, 1.0, 1.0);\r\n system.colorDead = new Color4(1.0, 1.0, 1.0, 0.0);\r\n\r\n // Particle Size\r\n system.minSize = 0.1;\r\n system.maxSize = 0.1;\r\n\r\n // Emission speed\r\n system.minEmitPower = 2;\r\n system.maxEmitPower = 2;\r\n\r\n // Update speed\r\n system.updateSpeed = 1 / 60;\r\n\r\n system.emitRate = 30;\r\n\r\n return system;\r\n }\r\n\r\n /**\r\n * This is the main static method (one-liner) of this helper to create different particle systems\r\n * @param type This string represents the type to the particle system to create\r\n * @param scene The scene where the particle system should live\r\n * @param gpu If the system will use gpu\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns the ParticleSystemSet created\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public static CreateAsync(type: string, scene: Nullable<Scene>, gpu: boolean = false, capacity?: number): Promise<ParticleSystemSet> {\r\n if (!scene) {\r\n scene = EngineStore.LastCreatedScene;\r\n }\r\n\r\n const token = {};\r\n\r\n scene!.addPendingData(token);\r\n\r\n return new Promise((resolve, reject) => {\r\n if (gpu && !GPUParticleSystem.IsSupported) {\r\n scene!.removePendingData(token);\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n return reject(\"Particle system with GPU is not supported.\");\r\n }\r\n\r\n Tools.LoadFile(\r\n `${ParticleHelper.BaseAssetsUrl}/systems/${type}.json`,\r\n (data) => {\r\n scene!.removePendingData(token);\r\n const newData = JSON.parse(data.toString());\r\n return resolve(ParticleSystemSet.Parse(newData, scene!, gpu, capacity));\r\n },\r\n undefined,\r\n undefined,\r\n undefined,\r\n () => {\r\n scene!.removePendingData(token);\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n return reject(`An error occurred with the creation of your particle system. Check if your type '${type}' exists.`);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Static function used to export a particle system to a ParticleSystemSet variable.\r\n * Please note that the emitter shape is not exported\r\n * @param systems defines the particle systems to export\r\n * @returns the created particle system set\r\n */\r\n public static ExportSet(systems: IParticleSystem[]): ParticleSystemSet {\r\n const set = new ParticleSystemSet();\r\n\r\n for (const system of systems) {\r\n set.systems.push(system);\r\n }\r\n\r\n return set;\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved in a remote file\r\n * @param name defines the name of the particle system to create (can be null or empty to use the one from the json data)\r\n * @param url defines the url to load from\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public static ParseFromFileAsync(name: Nullable<string>, url: string, scene: Scene, gpu: boolean = false, rootUrl: string = \"\", capacity?: number): Promise<IParticleSystem> {\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const serializationObject = JSON.parse(request.responseText);\r\n let output: IParticleSystem;\r\n\r\n if (gpu) {\r\n output = GPUParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n } else {\r\n output = ParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n }\r\n\r\n if (name) {\r\n output.name = name;\r\n }\r\n\r\n resolve(output);\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Unable to load the particle system\");\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", url);\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved by the particle system editor\r\n * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public static ParseFromSnippetAsync(snippetId: string, scene: Scene, gpu: boolean = false, rootUrl: string = \"\", capacity?: number): Promise<IParticleSystem> {\r\n if (snippetId === \"_BLANK\") {\r\n const system = this.CreateDefault(null);\r\n system.start();\r\n return Promise.resolve(system);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n const request = new WebRequest();\r\n request.addEventListener(\"readystatechange\", () => {\r\n if (request.readyState == 4) {\r\n if (request.status == 200) {\r\n const snippet = JSON.parse(JSON.parse(request.responseText).jsonPayload);\r\n const serializationObject = JSON.parse(snippet.particleSystem);\r\n let output: IParticleSystem;\r\n\r\n if (gpu) {\r\n output = GPUParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n } else {\r\n output = ParticleSystem.Parse(serializationObject, scene, rootUrl, false, capacity);\r\n }\r\n output.snippetId = snippetId;\r\n\r\n resolve(output);\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(\"Unable to load the snippet \" + snippetId);\r\n }\r\n }\r\n });\r\n\r\n request.open(\"GET\", this.SnippetUrl + \"/\" + snippetId.replace(/#/g, \"/\"));\r\n request.send();\r\n });\r\n }\r\n\r\n /**\r\n * Creates a particle system from a snippet saved by the particle system editor\r\n * @deprecated Please use ParseFromSnippetAsync instead\r\n * @param snippetId defines the snippet to load (can be set to _BLANK to create a default one)\r\n * @param scene defines the hosting scene\r\n * @param gpu If the system will use gpu\r\n * @param rootUrl defines the root URL to use to load textures and relative dependencies\r\n * @param capacity defines the system capacity (if null or undefined the sotred capacity will be used)\r\n * @returns a promise that will resolve to the new particle system\r\n */\r\n public static CreateFromSnippetAsync = ParticleHelper.ParseFromSnippetAsync;\r\n}\r\n"]}
@@ -109,13 +109,12 @@ export class PointsCloudSystem {
109
109
  * @param material The material to use to render the mesh. If not provided, will create a default one
110
110
  * @returns a promise for the created mesh
111
111
  */
112
- buildMeshAsync(material) {
113
- return Promise.all(this._promises).then(async () => {
114
- this._isReady = true;
115
- return this._buildMeshAsync(material);
116
- });
112
+ async buildMeshAsync(material) {
113
+ await Promise.all(this._promises);
114
+ this._isReady = true;
115
+ return await this._buildMeshAsync(material);
117
116
  }
118
- _buildMeshAsync(material) {
117
+ async _buildMeshAsync(material) {
119
118
  if (this.nbParticles === 0) {
120
119
  this.addPoints(1);
121
120
  }
@@ -151,7 +150,7 @@ export class PointsCloudSystem {
151
150
  mat.pointSize = this._size;
152
151
  }
153
152
  mesh.material = mat;
154
- return new Promise((resolve) => resolve(mesh));
153
+ return mesh;
155
154
  }
156
155
  // adds a new particle object in the particles array
157
156
  _addParticle(idx, group, groupId, idxInGroup) {
@@ -459,6 +458,7 @@ export class PointsCloudSystem {
459
458
  finalize();
460
459
  }
461
460
  else {
461
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then
462
462
  dataPromise.then((data) => {
463
463
  pointsGroup._groupImageData = data;
464
464
  finalize();