@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":"assetsManager.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/assetsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { IParticleSystem } from \"../Particles/IParticleSystem\";\r\nimport type { Skeleton } from \"../Bones/skeleton\";\r\nimport { SceneLoader, SceneLoaderAnimationGroupLoadingMode } from \"../Loading/sceneLoader\";\r\nimport { Tools } from \"./tools\";\r\nimport { Observable } from \"./observable\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { CubeTexture } from \"../Materials/Textures/cubeTexture\";\r\nimport { HDRCubeTexture } from \"../Materials/Textures/hdrCubeTexture\";\r\nimport { EquiRectangularCubeTexture } from \"../Materials/Textures/equiRectangularCubeTexture\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { Animatable } from \"../Animations/animatable.core\";\r\nimport type { AnimationGroup } from \"../Animations/animationGroup\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * Defines the list of states available for a task inside a AssetsManager\r\n */\r\nexport const enum AssetTaskState {\r\n /**\r\n * Initialization\r\n */\r\n INIT,\r\n /**\r\n * Running\r\n */\r\n RUNNING,\r\n /**\r\n * Done\r\n */\r\n DONE,\r\n /**\r\n * Error\r\n */\r\n ERROR,\r\n}\r\n\r\n/**\r\n * Define an abstract asset task used with a AssetsManager class to load assets into a scene\r\n */\r\nexport abstract class AbstractAssetTask {\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: any) => void;\r\n\r\n /**\r\n * Callback called when the task is not successful\r\n */\r\n public onError: (task: any, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new AssetsManager\r\n * @param name defines the name of the task\r\n */\r\n constructor(\r\n /**\r\n * Task name\r\n */ public name: string\r\n ) {}\r\n\r\n private _isCompleted = false;\r\n private _taskState = AssetTaskState.INIT;\r\n private _errorObject: { message?: string; exception?: any };\r\n\r\n /**\r\n * Get if the task is completed\r\n */\r\n public get isCompleted(): boolean {\r\n return this._isCompleted;\r\n }\r\n\r\n /**\r\n * Gets the current state of the task\r\n */\r\n public get taskState(): AssetTaskState {\r\n return this._taskState;\r\n }\r\n\r\n /**\r\n * Gets the current error object (if task is in error)\r\n */\r\n public get errorObject(): { message?: string; exception?: any } {\r\n return this._errorObject;\r\n }\r\n\r\n /**\r\n * Internal only\r\n * @internal\r\n */\r\n public _setErrorObject(message?: string, exception?: any) {\r\n if (this._errorObject) {\r\n return;\r\n }\r\n\r\n this._errorObject = {\r\n message: message,\r\n exception: exception,\r\n };\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public run(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n this._taskState = AssetTaskState.RUNNING;\r\n this.runTask(\r\n scene,\r\n () => {\r\n this._onDoneCallback(onSuccess, onError);\r\n },\r\n (msg, exception) => {\r\n this._onErrorCallback(onError, msg, exception);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n throw new Error(\"runTask is not implemented\");\r\n }\r\n\r\n /**\r\n * Reset will set the task state back to INIT, so the next load call of the assets manager will execute this task again.\r\n * This can be used with failed tasks that have the reason for failure fixed.\r\n */\r\n public reset() {\r\n this._taskState = AssetTaskState.INIT;\r\n }\r\n\r\n private _onErrorCallback(onError: (message?: string, exception?: any) => void, message?: string, exception?: any) {\r\n this._taskState = AssetTaskState.ERROR;\r\n\r\n this._errorObject = {\r\n message: message,\r\n exception: exception,\r\n };\r\n\r\n if (this.onError) {\r\n this.onError(this, message, exception);\r\n }\r\n\r\n onError();\r\n }\r\n\r\n private _onDoneCallback(onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n try {\r\n this._taskState = AssetTaskState.DONE;\r\n this._isCompleted = true;\r\n\r\n if (this.onSuccess) {\r\n this.onSuccess(this);\r\n }\r\n\r\n onSuccess();\r\n } catch (e) {\r\n this._onErrorCallback(onError, \"Task is done, error executing success callback(s)\", e);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Define the interface used by progress events raised during assets loading\r\n */\r\nexport interface IAssetsProgressEvent {\r\n /**\r\n * Defines the number of remaining tasks to process\r\n */\r\n remainingCount: number;\r\n /**\r\n * Defines the total number of tasks\r\n */\r\n totalCount: number;\r\n /**\r\n * Defines the task that was just processed\r\n */\r\n task: AbstractAssetTask;\r\n}\r\n\r\n/**\r\n * Class used to share progress information about assets loading\r\n */\r\nexport class AssetsProgressEvent implements IAssetsProgressEvent {\r\n /**\r\n * Defines the number of remaining tasks to process\r\n */\r\n public remainingCount: number;\r\n /**\r\n * Defines the total number of tasks\r\n */\r\n public totalCount: number;\r\n /**\r\n * Defines the task that was just processed\r\n */\r\n public task: AbstractAssetTask;\r\n\r\n /**\r\n * Creates a AssetsProgressEvent\r\n * @param remainingCount defines the number of remaining tasks to process\r\n * @param totalCount defines the total number of tasks\r\n * @param task defines the task that was just processed\r\n */\r\n constructor(remainingCount: number, totalCount: number, task: AbstractAssetTask) {\r\n this.remainingCount = remainingCount;\r\n this.totalCount = totalCount;\r\n this.task = task;\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load assets into a container\r\n */\r\nexport class ContainerAssetTask extends AbstractAssetTask {\r\n /**\r\n * Get the loaded asset container\r\n */\r\n public loadedContainer: AssetContainer;\r\n /**\r\n * Gets the list of loaded transforms\r\n */\r\n public loadedTransformNodes: Array<TransformNode>;\r\n /**\r\n * Gets the list of loaded meshes\r\n */\r\n public loadedMeshes: Array<AbstractMesh>;\r\n /**\r\n * Gets the list of loaded particle systems\r\n */\r\n public loadedParticleSystems: Array<IParticleSystem>;\r\n /**\r\n * Gets the list of loaded skeletons\r\n */\r\n public loadedSkeletons: Array<Skeleton>;\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: ContainerAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: ContainerAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new ContainerAssetTask\r\n * @param name defines the name of the task\r\n * @param meshesNames defines the list of mesh's names you want to load\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param sceneFilename defines the filename or File of the scene to load from\r\n * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the list of mesh's names you want to load\r\n */\r\n public meshesNames: any,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename or File of the scene to load from\r\n */\r\n public sceneFilename: string | File,\r\n /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.LoadAssetContainer(\r\n this.rootUrl,\r\n this.sceneFilename,\r\n scene,\r\n (container: AssetContainer) => {\r\n this.loadedContainer = container;\r\n this.loadedMeshes = container.meshes;\r\n this.loadedTransformNodes = container.transformNodes;\r\n this.loadedParticleSystems = container.particleSystems;\r\n this.loadedSkeletons = container.skeletons;\r\n this.loadedAnimationGroups = container.animationGroups;\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load meshes\r\n */\r\nexport class MeshAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the list of loaded transforms\r\n */\r\n public loadedTransformNodes: Array<TransformNode>;\r\n /**\r\n * Gets the list of loaded meshes\r\n */\r\n public loadedMeshes: Array<AbstractMesh>;\r\n /**\r\n * Gets the list of loaded particle systems\r\n */\r\n public loadedParticleSystems: Array<IParticleSystem>;\r\n /**\r\n * Gets the list of loaded skeletons\r\n */\r\n public loadedSkeletons: Array<Skeleton>;\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: MeshAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: MeshAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new MeshAssetTask\r\n * @param name defines the name of the task\r\n * @param meshesNames defines the list of mesh's names you want to load\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param sceneFilename defines the filename or File of the scene to load from\r\n * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the list of mesh's names you want to load\r\n */\r\n public meshesNames: any,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename or File of the scene to load from\r\n */\r\n public sceneFilename: string | File,\r\n /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.ImportMesh(\r\n this.meshesNames,\r\n this.rootUrl,\r\n this.sceneFilename,\r\n scene,\r\n (meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[], transformNodes: TransformNode[]) => {\r\n this.loadedMeshes = meshes;\r\n this.loadedTransformNodes = transformNodes;\r\n this.loadedParticleSystems = particleSystems;\r\n this.loadedSkeletons = skeletons;\r\n this.loadedAnimationGroups = animationGroups;\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load animations\r\n */\r\nexport class AnimationAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n /**\r\n * Gets the list of loaded animatables\r\n */\r\n public loadedAnimatables: Array<Animatable>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: AnimationAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: AnimationAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new AnimationAssetTask\r\n * @param name defines the name of the task\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param filename defines the filename or File of the scene to load from\r\n * @param targetConverter defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename to load from\r\n */\r\n public filename: string | File,\r\n /**\r\n * Defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n */\r\n public targetConverter?: Nullable<(target: any) => any>,\r\n /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const startingIndexForNewAnimatables = scene.animatables.length;\r\n const startingIndexForNewAnimationGroups = scene.animationGroups.length;\r\n this.loadedAnimatables = [];\r\n this.loadedAnimationGroups = [];\r\n SceneLoader.ImportAnimations(\r\n this.rootUrl,\r\n this.filename,\r\n scene,\r\n false,\r\n SceneLoaderAnimationGroupLoadingMode.NoSync,\r\n this.targetConverter,\r\n () => {\r\n this.loadedAnimatables = scene.animatables.slice(startingIndexForNewAnimatables);\r\n this.loadedAnimationGroups = scene.animationGroups.slice(startingIndexForNewAnimationGroups);\r\n\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load text content\r\n */\r\nexport class TextFileAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded text string\r\n */\r\n public text: string;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: TextFileAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: TextFileAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new TextFileAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(\r\n this.url,\r\n (data) => {\r\n this.text = data as string;\r\n onSuccess();\r\n },\r\n undefined,\r\n false,\r\n false,\r\n (request, exception) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load binary data\r\n */\r\nexport class BinaryFileAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded data (as an array buffer)\r\n */\r\n public data: ArrayBuffer;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: BinaryFileAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: BinaryFileAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new BinaryFileAssetTask object\r\n * @param name defines the name of the new task\r\n * @param url defines the location of the file to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(\r\n this.url,\r\n (data) => {\r\n this.data = data as ArrayBuffer;\r\n onSuccess();\r\n },\r\n undefined,\r\n true,\r\n true,\r\n (request, exception) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load images\r\n */\r\nexport class ImageAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded images\r\n */\r\n public image: HTMLImageElement;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: ImageAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: ImageAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new ImageAssetTask\r\n * @param name defines the name of the task\r\n * @param url defines the location of the image to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the image to load\r\n */\r\n public url: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const img = new Image();\r\n\r\n Tools.SetCorsBehavior(this.url, img);\r\n\r\n img.onload = () => {\r\n this.image = img;\r\n onSuccess();\r\n };\r\n\r\n img.onerror = (err: string | Event): any => {\r\n onError(\"Error loading image\", err);\r\n };\r\n\r\n img.src = this.url;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the interface used by texture loading tasks\r\n */\r\nexport interface ITextureAssetTask<Tex extends BaseTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n texture: Tex;\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load 2D textures\r\n */\r\nexport class TextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<Texture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: Texture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: TextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: TextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new TextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param noMipmap defines if mipmap should not be generated (default is false)\r\n * @param invertY defines if texture must be inverted on Y axis (default is true)\r\n * @param samplingMode defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines if mipmap should not be generated (default is false)\r\n */\r\n public noMipmap?: boolean,\r\n /**\r\n * [true] Defines if texture must be inverted on Y axis (default is true)\r\n */\r\n public invertY: boolean = true,\r\n /**\r\n * [3] Defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n */\r\n public samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new Texture(this.url, scene, this.noMipmap, this.invertY, this.samplingMode, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load cube textures\r\n */\r\nexport class CubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<CubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: CubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: CubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: CubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new CubeTextureAssetTask\r\n * @param name defines the name of the task\r\n * @param url defines the location of the files to load (You have to specify the folder where the files are + filename with no extension)\r\n * @param extensions defines the extensions to use to load files ([\"_px\", \"_py\", \"_pz\", \"_nx\", \"_ny\", \"_nz\"] by default)\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param files defines the explicit list of files (undefined by default)\r\n * @param prefiltered\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the files to load (You have to specify the folder where the files are + filename with no extension)\r\n */\r\n public url: string,\r\n /**\r\n * Defines the extensions to use to load files ([\"_px\", \"_py\", \"_pz\", \"_nx\", \"_ny\", \"_nz\"] by default)\r\n */\r\n public extensions?: string[],\r\n /**\r\n * Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap?: boolean,\r\n /**\r\n * Defines the explicit list of files (undefined by default)\r\n */\r\n public files?: string[],\r\n /**\r\n * Defines the prefiltered texture option (default is false)\r\n */\r\n public prefiltered?: boolean\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new CubeTexture(this.url, scene, this.extensions, this.noMipmap, this.files, onload, onerror, undefined, this.prefiltered);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load HDR cube textures\r\n */\r\nexport class HDRCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<HDRCubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: HDRCubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: HDRCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: HDRCubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new HDRCubeTextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param size defines the desired size (the more it increases the longer the generation will be) If the size is omitted this implies you are using a preprocessed cubemap.\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param generateHarmonics specifies whether you want to extract the polynomial harmonics during the generation process (default is true)\r\n * @param gammaSpace specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n * @param reserved Internal use only\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines the desired size (the more it increases the longer the generation will be)\r\n */\r\n public size: number,\r\n /**\r\n * [false] Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap = false,\r\n /**\r\n * [true] Specifies whether you want to extract the polynomial harmonics during the generation process (default is true)\r\n */\r\n public generateHarmonics = true,\r\n /**\r\n * [false] Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n */\r\n public gammaSpace = false,\r\n /**\r\n * [false] Internal Use Only\r\n */\r\n public reserved = false\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new HDRCubeTexture(this.url, scene, this.size, this.noMipmap, this.generateHarmonics, this.gammaSpace, this.reserved, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load Equirectangular cube textures\r\n */\r\nexport class EquiRectangularCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<EquiRectangularCubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: EquiRectangularCubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: EquiRectangularCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: EquiRectangularCubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new EquiRectangularCubeTextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param size defines the desired size (the more it increases the longer the generation will be)\r\n * If the size is omitted this implies you are using a preprocessed cubemap.\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param gammaSpace specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space)\r\n * (default is true)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines the desired size (the more it increases the longer the generation will be)\r\n */\r\n public size: number,\r\n /**\r\n * [false] Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap: boolean = false,\r\n /**\r\n * [true] Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space,\r\n * but the standard material would require them in Gamma space) (default is true)\r\n */\r\n public gammaSpace: boolean = true\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void): void {\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new EquiRectangularCubeTexture(this.url, scene, this.size, this.noMipmap, this.gammaSpace, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * This class can be used to easily import assets into a scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/importers/assetManager\r\n */\r\nexport class AssetsManager {\r\n private _scene: Scene;\r\n private _isLoading = false;\r\n\r\n protected _tasks = new Array<AbstractAssetTask>();\r\n protected _waitingTasksCount = 0;\r\n protected _totalTasksCount = 0;\r\n\r\n /**\r\n * Callback called when all tasks are processed\r\n */\r\n public onFinish: (tasks: AbstractAssetTask[]) => void;\r\n\r\n /**\r\n * Callback called when a task is successful\r\n */\r\n public onTaskSuccess: (task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Callback called when a task had an error\r\n */\r\n public onTaskError: (task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Callback called when a task is done (whatever the result is)\r\n */\r\n public onProgress: (remainingCount: number, totalCount: number, task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Observable called when all tasks are processed\r\n */\r\n public onTaskSuccessObservable = new Observable<AbstractAssetTask>();\r\n\r\n /**\r\n * Observable called when a task had an error\r\n */\r\n public onTaskErrorObservable = new Observable<AbstractAssetTask>();\r\n\r\n /**\r\n * Observable called when all tasks were executed\r\n */\r\n public onTasksDoneObservable = new Observable<AbstractAssetTask[]>();\r\n\r\n /**\r\n * Observable called when a task is done (whatever the result is)\r\n */\r\n public onProgressObservable = new Observable<IAssetsProgressEvent>();\r\n\r\n /**\r\n * Gets or sets a boolean defining if the AssetsManager should use the default loading screen\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\n public useDefaultLoadingScreen = true;\r\n\r\n /**\r\n * Gets or sets a boolean defining if the AssetsManager should automatically hide the loading screen\r\n * when all assets have been downloaded.\r\n * If set to false, you need to manually call in hideLoadingUI() once your scene is ready.\r\n */\r\n public autoHideLoadingUI = true;\r\n\r\n /**\r\n * Creates a new AssetsManager\r\n * @param scene defines the scene to work on\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n }\r\n\r\n /**\r\n * Add a ContainerAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param meshesNames defines the name of meshes to load\r\n * @param rootUrl defines the root url to use to locate files\r\n * @param sceneFilename defines the filename of the scene file or the File itself\r\n * @param extension defines the extension to use to load the file\r\n * @returns a new ContainerAssetTask object\r\n */\r\n public addContainerTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File, extension?: string): ContainerAssetTask {\r\n const task = new ContainerAssetTask(taskName, meshesNames, rootUrl, sceneFilename, extension);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a MeshAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param meshesNames defines the name of meshes to load\r\n * @param rootUrl defines the root url to use to locate files\r\n * @param sceneFilename defines the filename of the scene file or the File itself\r\n * @param extension defines the extension to use to load the file\r\n * @returns a new MeshAssetTask object\r\n */\r\n public addMeshTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File, extension?: string): MeshAssetTask {\r\n const task = new MeshAssetTask(taskName, meshesNames, rootUrl, sceneFilename, extension);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a TextFileAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new TextFileAssetTask object\r\n */\r\n public addTextFileTask(taskName: string, url: string): TextFileAssetTask {\r\n const task = new TextFileAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a BinaryFileAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new BinaryFileAssetTask object\r\n */\r\n public addBinaryFileTask(taskName: string, url: string): BinaryFileAssetTask {\r\n const task = new BinaryFileAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a ImageAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new ImageAssetTask object\r\n */\r\n public addImageTask(taskName: string, url: string): ImageAssetTask {\r\n const task = new ImageAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a TextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param invertY defines if you want to invert Y axis of the loaded texture (true by default)\r\n * @param samplingMode defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default)\r\n * @returns a new TextureAssetTask object\r\n */\r\n public addTextureTask(taskName: string, url: string, noMipmap?: boolean, invertY?: boolean, samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE): TextureAssetTask {\r\n const task = new TextureAssetTask(taskName, url, noMipmap, invertY, samplingMode);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a CubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param extensions defines the extension to use to load the cube map (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param files defines the list of files to load (can be null)\r\n * @param prefiltered defines the prefiltered texture option (default is false)\r\n * @returns a new CubeTextureAssetTask object\r\n */\r\n public addCubeTextureTask(taskName: string, url: string, extensions?: string[], noMipmap?: boolean, files?: string[], prefiltered?: boolean): CubeTextureAssetTask {\r\n const task = new CubeTextureAssetTask(taskName, url, extensions, noMipmap, files, prefiltered);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n *\r\n * Add a HDRCubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param size defines the size you want for the cubemap (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param generateHarmonics defines if you want to automatically generate (true by default)\r\n * @param gammaSpace specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n * @param reserved Internal use only\r\n * @returns a new HDRCubeTextureAssetTask object\r\n */\r\n public addHDRCubeTextureTask(\r\n taskName: string,\r\n url: string,\r\n size: number,\r\n noMipmap = false,\r\n generateHarmonics = true,\r\n gammaSpace = false,\r\n reserved = false\r\n ): HDRCubeTextureAssetTask {\r\n const task = new HDRCubeTextureAssetTask(taskName, url, size, noMipmap, generateHarmonics, gammaSpace, reserved);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n *\r\n * Add a EquiRectangularCubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param size defines the size you want for the cubemap (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param gammaSpace Specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those textures in linear space, but the standard material would require them in Gamma space)\r\n * @returns a new EquiRectangularCubeTextureAssetTask object\r\n */\r\n public addEquiRectangularCubeTextureAssetTask(taskName: string, url: string, size: number, noMipmap = false, gammaSpace = true): EquiRectangularCubeTextureAssetTask {\r\n const task = new EquiRectangularCubeTextureAssetTask(taskName, url, size, noMipmap, gammaSpace);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Remove a task from the assets manager.\r\n * @param task the task to remove\r\n */\r\n public removeTask(task: AbstractAssetTask) {\r\n const index = this._tasks.indexOf(task);\r\n\r\n if (index > -1) {\r\n this._tasks.splice(index, 1);\r\n }\r\n }\r\n\r\n private _decreaseWaitingTasksCount(task: AbstractAssetTask): void {\r\n this._waitingTasksCount--;\r\n\r\n try {\r\n if (this.onProgress) {\r\n this.onProgress(this._waitingTasksCount, this._totalTasksCount, task);\r\n }\r\n\r\n this.onProgressObservable.notifyObservers(new AssetsProgressEvent(this._waitingTasksCount, this._totalTasksCount, task));\r\n } catch (e) {\r\n Logger.Error(\"Error running progress callbacks.\");\r\n Logger.Log(e);\r\n }\r\n\r\n if (this._waitingTasksCount === 0) {\r\n try {\r\n const currentTasks = this._tasks.slice();\r\n\r\n if (this.onFinish) {\r\n // Calling onFinish with immutable array of tasks\r\n this.onFinish(currentTasks);\r\n }\r\n\r\n // Let's remove successful tasks\r\n for (const task of currentTasks) {\r\n if (task.taskState === AssetTaskState.DONE) {\r\n const index = this._tasks.indexOf(task);\r\n\r\n if (index > -1) {\r\n this._tasks.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n this.onTasksDoneObservable.notifyObservers(this._tasks);\r\n } catch (e) {\r\n Logger.Error(\"Error running tasks-done callbacks.\");\r\n Logger.Log(e);\r\n }\r\n this._isLoading = false;\r\n if (this.autoHideLoadingUI) {\r\n this._scene.getEngine().hideLoadingUI();\r\n }\r\n }\r\n }\r\n\r\n private _runTask(task: AbstractAssetTask): void {\r\n const done = () => {\r\n try {\r\n if (this.onTaskSuccess) {\r\n this.onTaskSuccess(task);\r\n }\r\n this.onTaskSuccessObservable.notifyObservers(task);\r\n this._decreaseWaitingTasksCount(task);\r\n } catch (e) {\r\n error(\"Error executing task success callbacks\", e);\r\n }\r\n };\r\n\r\n const error = (message?: string, exception?: any) => {\r\n task._setErrorObject(message, exception);\r\n\r\n if (this.onTaskError) {\r\n this.onTaskError(task);\r\n } else if (!task.onError) {\r\n Logger.Error(this._formatTaskErrorMessage(task));\r\n }\r\n this.onTaskErrorObservable.notifyObservers(task);\r\n this._decreaseWaitingTasksCount(task);\r\n };\r\n\r\n task.run(this._scene, done, error);\r\n }\r\n\r\n private _formatTaskErrorMessage(task: AbstractAssetTask) {\r\n let errorMessage = \"Unable to complete task \" + task.name;\r\n\r\n if (task.errorObject.message) {\r\n errorMessage += `: ${task.errorObject.message}`;\r\n }\r\n if (task.errorObject.exception) {\r\n errorMessage += `: ${task.errorObject.exception}`;\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Reset the AssetsManager and remove all tasks\r\n * @returns the current instance of the AssetsManager\r\n */\r\n public reset(): AssetsManager {\r\n this._isLoading = false;\r\n this._tasks = new Array<AbstractAssetTask>();\r\n return this;\r\n }\r\n\r\n /**\r\n * Start the loading process\r\n * @returns the current instance of the AssetsManager\r\n */\r\n public load(): AssetsManager {\r\n if (this._isLoading) {\r\n return this;\r\n }\r\n this._isLoading = true;\r\n this._waitingTasksCount = this._tasks.length;\r\n this._totalTasksCount = this._tasks.length;\r\n\r\n if (this._waitingTasksCount === 0) {\r\n this._isLoading = false;\r\n if (this.onFinish) {\r\n this.onFinish(this._tasks);\r\n }\r\n this.onTasksDoneObservable.notifyObservers(this._tasks);\r\n return this;\r\n }\r\n\r\n if (this.useDefaultLoadingScreen) {\r\n this._scene.getEngine().displayLoadingUI();\r\n }\r\n\r\n for (let index = 0; index < this._tasks.length; index++) {\r\n const task = this._tasks[index];\r\n if (task.taskState === AssetTaskState.INIT) {\r\n this._runTask(task);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Start the loading process as an async operation\r\n * @returns a promise returning the list of failed tasks\r\n */\r\n public async loadAsync(): Promise<void> {\r\n return new Promise((resolve, reject) => {\r\n if (this._isLoading) {\r\n resolve();\r\n return;\r\n }\r\n this.onTasksDoneObservable.addOnce((remainingTasks) => {\r\n if (remainingTasks && remainingTasks.length) {\r\n reject(remainingTasks);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n\r\n this.load();\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"assetsManager.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/assetsManager.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scene } from \"../scene\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { IParticleSystem } from \"../Particles/IParticleSystem\";\r\nimport type { Skeleton } from \"../Bones/skeleton\";\r\nimport { SceneLoader, SceneLoaderAnimationGroupLoadingMode } from \"../Loading/sceneLoader\";\r\nimport { Tools } from \"./tools\";\r\nimport { Observable } from \"./observable\";\r\nimport type { BaseTexture } from \"../Materials/Textures/baseTexture\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { CubeTexture } from \"../Materials/Textures/cubeTexture\";\r\nimport { HDRCubeTexture } from \"../Materials/Textures/hdrCubeTexture\";\r\nimport { EquiRectangularCubeTexture } from \"../Materials/Textures/equiRectangularCubeTexture\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport type { Animatable } from \"../Animations/animatable.core\";\r\nimport type { AnimationGroup } from \"../Animations/animationGroup\";\r\nimport type { AssetContainer } from \"../assetContainer\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport type { Nullable } from \"../types\";\r\n\r\n/**\r\n * Defines the list of states available for a task inside a AssetsManager\r\n */\r\nexport const enum AssetTaskState {\r\n /**\r\n * Initialization\r\n */\r\n INIT,\r\n /**\r\n * Running\r\n */\r\n RUNNING,\r\n /**\r\n * Done\r\n */\r\n DONE,\r\n /**\r\n * Error\r\n */\r\n ERROR,\r\n}\r\n\r\n/**\r\n * Define an abstract asset task used with a AssetsManager class to load assets into a scene\r\n */\r\nexport abstract class AbstractAssetTask {\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public onSuccess: (task: any) => void;\r\n\r\n /**\r\n * Callback called when the task is not successful\r\n */\r\n public onError: (task: any, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new AssetsManager\r\n * @param name defines the name of the task\r\n */\r\n constructor(\r\n /**\r\n * Task name\r\n */ public name: string\r\n ) {}\r\n\r\n private _isCompleted = false;\r\n private _taskState = AssetTaskState.INIT;\r\n private _errorObject: { message?: string; exception?: any };\r\n\r\n /**\r\n * Get if the task is completed\r\n */\r\n public get isCompleted(): boolean {\r\n return this._isCompleted;\r\n }\r\n\r\n /**\r\n * Gets the current state of the task\r\n */\r\n public get taskState(): AssetTaskState {\r\n return this._taskState;\r\n }\r\n\r\n /**\r\n * Gets the current error object (if task is in error)\r\n */\r\n public get errorObject(): { message?: string; exception?: any } {\r\n return this._errorObject;\r\n }\r\n\r\n /**\r\n * Internal only\r\n * @internal\r\n */\r\n public _setErrorObject(message?: string, exception?: any) {\r\n if (this._errorObject) {\r\n return;\r\n }\r\n\r\n this._errorObject = {\r\n message: message,\r\n exception: exception,\r\n };\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public run(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n this._taskState = AssetTaskState.RUNNING;\r\n this.runTask(\r\n scene,\r\n () => {\r\n this._onDoneCallback(onSuccess, onError);\r\n },\r\n (msg, exception) => {\r\n this._onErrorCallback(onError, msg, exception);\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n throw new Error(\"runTask is not implemented\");\r\n }\r\n\r\n /**\r\n * Reset will set the task state back to INIT, so the next load call of the assets manager will execute this task again.\r\n * This can be used with failed tasks that have the reason for failure fixed.\r\n */\r\n public reset() {\r\n this._taskState = AssetTaskState.INIT;\r\n }\r\n\r\n private _onErrorCallback(onError: (message?: string, exception?: any) => void, message?: string, exception?: any) {\r\n this._taskState = AssetTaskState.ERROR;\r\n\r\n this._errorObject = {\r\n message: message,\r\n exception: exception,\r\n };\r\n\r\n if (this.onError) {\r\n this.onError(this, message, exception);\r\n }\r\n\r\n onError();\r\n }\r\n\r\n private _onDoneCallback(onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n try {\r\n this._taskState = AssetTaskState.DONE;\r\n this._isCompleted = true;\r\n\r\n if (this.onSuccess) {\r\n this.onSuccess(this);\r\n }\r\n\r\n onSuccess();\r\n } catch (e) {\r\n this._onErrorCallback(onError, \"Task is done, error executing success callback(s)\", e);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Define the interface used by progress events raised during assets loading\r\n */\r\nexport interface IAssetsProgressEvent {\r\n /**\r\n * Defines the number of remaining tasks to process\r\n */\r\n remainingCount: number;\r\n /**\r\n * Defines the total number of tasks\r\n */\r\n totalCount: number;\r\n /**\r\n * Defines the task that was just processed\r\n */\r\n task: AbstractAssetTask;\r\n}\r\n\r\n/**\r\n * Class used to share progress information about assets loading\r\n */\r\nexport class AssetsProgressEvent implements IAssetsProgressEvent {\r\n /**\r\n * Defines the number of remaining tasks to process\r\n */\r\n public remainingCount: number;\r\n /**\r\n * Defines the total number of tasks\r\n */\r\n public totalCount: number;\r\n /**\r\n * Defines the task that was just processed\r\n */\r\n public task: AbstractAssetTask;\r\n\r\n /**\r\n * Creates a AssetsProgressEvent\r\n * @param remainingCount defines the number of remaining tasks to process\r\n * @param totalCount defines the total number of tasks\r\n * @param task defines the task that was just processed\r\n */\r\n constructor(remainingCount: number, totalCount: number, task: AbstractAssetTask) {\r\n this.remainingCount = remainingCount;\r\n this.totalCount = totalCount;\r\n this.task = task;\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load assets into a container\r\n */\r\nexport class ContainerAssetTask extends AbstractAssetTask {\r\n /**\r\n * Get the loaded asset container\r\n */\r\n public loadedContainer: AssetContainer;\r\n /**\r\n * Gets the list of loaded transforms\r\n */\r\n public loadedTransformNodes: Array<TransformNode>;\r\n /**\r\n * Gets the list of loaded meshes\r\n */\r\n public loadedMeshes: Array<AbstractMesh>;\r\n /**\r\n * Gets the list of loaded particle systems\r\n */\r\n public loadedParticleSystems: Array<IParticleSystem>;\r\n /**\r\n * Gets the list of loaded skeletons\r\n */\r\n public loadedSkeletons: Array<Skeleton>;\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: ContainerAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: ContainerAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new ContainerAssetTask\r\n * @param name defines the name of the task\r\n * @param meshesNames defines the list of mesh's names you want to load\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param sceneFilename defines the filename or File of the scene to load from\r\n * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the list of mesh's names you want to load\r\n */\r\n public meshesNames: any,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename or File of the scene to load from\r\n */\r\n public sceneFilename: string | File,\r\n /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.LoadAssetContainer(\r\n this.rootUrl,\r\n this.sceneFilename,\r\n scene,\r\n (container: AssetContainer) => {\r\n this.loadedContainer = container;\r\n this.loadedMeshes = container.meshes;\r\n this.loadedTransformNodes = container.transformNodes;\r\n this.loadedParticleSystems = container.particleSystems;\r\n this.loadedSkeletons = container.skeletons;\r\n this.loadedAnimationGroups = container.animationGroups;\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load meshes\r\n */\r\nexport class MeshAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the list of loaded transforms\r\n */\r\n public loadedTransformNodes: Array<TransformNode>;\r\n /**\r\n * Gets the list of loaded meshes\r\n */\r\n public loadedMeshes: Array<AbstractMesh>;\r\n /**\r\n * Gets the list of loaded particle systems\r\n */\r\n public loadedParticleSystems: Array<IParticleSystem>;\r\n /**\r\n * Gets the list of loaded skeletons\r\n */\r\n public loadedSkeletons: Array<Skeleton>;\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: MeshAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: MeshAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new MeshAssetTask\r\n * @param name defines the name of the task\r\n * @param meshesNames defines the list of mesh's names you want to load\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param sceneFilename defines the filename or File of the scene to load from\r\n * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the list of mesh's names you want to load\r\n */\r\n public meshesNames: any,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename or File of the scene to load from\r\n */\r\n public sceneFilename: string | File,\r\n /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n SceneLoader.ImportMesh(\r\n this.meshesNames,\r\n this.rootUrl,\r\n this.sceneFilename,\r\n scene,\r\n (meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], animationGroups: AnimationGroup[], transformNodes: TransformNode[]) => {\r\n this.loadedMeshes = meshes;\r\n this.loadedTransformNodes = transformNodes;\r\n this.loadedParticleSystems = particleSystems;\r\n this.loadedSkeletons = skeletons;\r\n this.loadedAnimationGroups = animationGroups;\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load animations\r\n */\r\nexport class AnimationAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the list of loaded animation groups\r\n */\r\n public loadedAnimationGroups: Array<AnimationGroup>;\r\n /**\r\n * Gets the list of loaded animatables\r\n */\r\n public loadedAnimatables: Array<Animatable>;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: AnimationAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: AnimationAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new AnimationAssetTask\r\n * @param name defines the name of the task\r\n * @param rootUrl defines the root url to use as a base to load your meshes and associated resources\r\n * @param filename defines the filename or File of the scene to load from\r\n * @param targetConverter defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n * @param extension defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the root url to use as a base to load your meshes and associated resources\r\n */\r\n public rootUrl: string,\r\n /**\r\n * Defines the filename to load from\r\n */\r\n public filename: string | File,\r\n /**\r\n * Defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n */\r\n public targetConverter?: Nullable<(target: any) => any>,\r\n /**\r\n * Defines the extension to use to load the scene (if not defined, \".babylon\" will be used)\r\n */\r\n public extension?: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const startingIndexForNewAnimatables = scene.animatables.length;\r\n const startingIndexForNewAnimationGroups = scene.animationGroups.length;\r\n this.loadedAnimatables = [];\r\n this.loadedAnimationGroups = [];\r\n SceneLoader.ImportAnimations(\r\n this.rootUrl,\r\n this.filename,\r\n scene,\r\n false,\r\n SceneLoaderAnimationGroupLoadingMode.NoSync,\r\n this.targetConverter,\r\n () => {\r\n this.loadedAnimatables = scene.animatables.slice(startingIndexForNewAnimatables);\r\n this.loadedAnimationGroups = scene.animationGroups.slice(startingIndexForNewAnimationGroups);\r\n\r\n onSuccess();\r\n },\r\n null,\r\n (scene, message, exception) => {\r\n onError(message, exception);\r\n },\r\n this.extension\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load text content\r\n */\r\nexport class TextFileAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded text string\r\n */\r\n public text: string;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: TextFileAssetTask) => void;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: TextFileAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new TextFileAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(\r\n this.url,\r\n (data) => {\r\n this.text = data as string;\r\n onSuccess();\r\n },\r\n undefined,\r\n false,\r\n false,\r\n (request, exception) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load binary data\r\n */\r\nexport class BinaryFileAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded data (as an array buffer)\r\n */\r\n public data: ArrayBuffer;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: BinaryFileAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: BinaryFileAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new BinaryFileAssetTask object\r\n * @param name defines the name of the new task\r\n * @param url defines the location of the file to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n scene._loadFile(\r\n this.url,\r\n (data) => {\r\n this.data = data as ArrayBuffer;\r\n onSuccess();\r\n },\r\n undefined,\r\n true,\r\n true,\r\n (request, exception) => {\r\n if (request) {\r\n onError(request.status + \" \" + request.statusText, exception);\r\n }\r\n }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load images\r\n */\r\nexport class ImageAssetTask extends AbstractAssetTask {\r\n /**\r\n * Gets the loaded images\r\n */\r\n public image: HTMLImageElement;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: ImageAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: ImageAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new ImageAssetTask\r\n * @param name defines the name of the task\r\n * @param url defines the location of the image to load\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the image to load\r\n */\r\n public url: string\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const img = new Image();\r\n\r\n Tools.SetCorsBehavior(this.url, img);\r\n\r\n img.onload = () => {\r\n this.image = img;\r\n onSuccess();\r\n };\r\n\r\n img.onerror = (err: string | Event): any => {\r\n onError(\"Error loading image\", err);\r\n };\r\n\r\n img.src = this.url;\r\n }\r\n}\r\n\r\n/**\r\n * Defines the interface used by texture loading tasks\r\n */\r\nexport interface ITextureAssetTask<Tex extends BaseTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n texture: Tex;\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load 2D textures\r\n */\r\nexport class TextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<Texture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: Texture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: TextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: TextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new TextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param noMipmap defines if mipmap should not be generated (default is false)\r\n * @param invertY defines if texture must be inverted on Y axis (default is true)\r\n * @param samplingMode defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines if mipmap should not be generated (default is false)\r\n */\r\n public noMipmap?: boolean,\r\n /**\r\n * [true] Defines if texture must be inverted on Y axis (default is true)\r\n */\r\n public invertY: boolean = true,\r\n /**\r\n * [3] Defines the sampling mode to use (default is Texture.TRILINEAR_SAMPLINGMODE)\r\n */\r\n public samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new Texture(this.url, scene, this.noMipmap, this.invertY, this.samplingMode, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load cube textures\r\n */\r\nexport class CubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<CubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: CubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: CubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: CubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new CubeTextureAssetTask\r\n * @param name defines the name of the task\r\n * @param url defines the location of the files to load (You have to specify the folder where the files are + filename with no extension)\r\n * @param extensions defines the extensions to use to load files ([\"_px\", \"_py\", \"_pz\", \"_nx\", \"_ny\", \"_nz\"] by default)\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param files defines the explicit list of files (undefined by default)\r\n * @param prefiltered\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the files to load (You have to specify the folder where the files are + filename with no extension)\r\n */\r\n public url: string,\r\n /**\r\n * Defines the extensions to use to load files ([\"_px\", \"_py\", \"_pz\", \"_nx\", \"_ny\", \"_nz\"] by default)\r\n */\r\n public extensions?: string[],\r\n /**\r\n * Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap?: boolean,\r\n /**\r\n * Defines the explicit list of files (undefined by default)\r\n */\r\n public files?: string[],\r\n /**\r\n * Defines the prefiltered texture option (default is false)\r\n */\r\n public prefiltered?: boolean\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new CubeTexture(this.url, scene, this.extensions, this.noMipmap, this.files, onload, onerror, undefined, this.prefiltered);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load HDR cube textures\r\n */\r\nexport class HDRCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<HDRCubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: HDRCubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: HDRCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: HDRCubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new HDRCubeTextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param size defines the desired size (the more it increases the longer the generation will be) If the size is omitted this implies you are using a preprocessed cubemap.\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param generateHarmonics specifies whether you want to extract the polynomial harmonics during the generation process (default is true)\r\n * @param gammaSpace specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n * @param reserved Internal use only\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines the desired size (the more it increases the longer the generation will be)\r\n */\r\n public size: number,\r\n /**\r\n * [false] Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap = false,\r\n /**\r\n * [true] Specifies whether you want to extract the polynomial harmonics during the generation process (default is true)\r\n */\r\n public generateHarmonics = true,\r\n /**\r\n * [false] Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n */\r\n public gammaSpace = false,\r\n /**\r\n * [false] Internal Use Only\r\n */\r\n public reserved = false\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void) {\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new HDRCubeTexture(this.url, scene, this.size, this.noMipmap, this.generateHarmonics, this.gammaSpace, this.reserved, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * Define a task used by AssetsManager to load Equirectangular cube textures\r\n */\r\nexport class EquiRectangularCubeTextureAssetTask extends AbstractAssetTask implements ITextureAssetTask<EquiRectangularCubeTexture> {\r\n /**\r\n * Gets the loaded texture\r\n */\r\n public texture: EquiRectangularCubeTexture;\r\n\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onSuccess: (task: EquiRectangularCubeTextureAssetTask) => void;\r\n /**\r\n * Callback called when the task is successful\r\n */\r\n public override onError: (task: EquiRectangularCubeTextureAssetTask, message?: string, exception?: any) => void;\r\n\r\n /**\r\n * Creates a new EquiRectangularCubeTextureAssetTask object\r\n * @param name defines the name of the task\r\n * @param url defines the location of the file to load\r\n * @param size defines the desired size (the more it increases the longer the generation will be)\r\n * If the size is omitted this implies you are using a preprocessed cubemap.\r\n * @param noMipmap defines if mipmaps should not be generated (default is false)\r\n * @param gammaSpace specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space)\r\n * (default is true)\r\n */\r\n constructor(\r\n /**\r\n * Defines the name of the task\r\n */\r\n public override name: string,\r\n /**\r\n * Defines the location of the file to load\r\n */\r\n public url: string,\r\n /**\r\n * Defines the desired size (the more it increases the longer the generation will be)\r\n */\r\n public size: number,\r\n /**\r\n * [false] Defines if mipmaps should not be generated (default is false)\r\n */\r\n public noMipmap: boolean = false,\r\n /**\r\n * [true] Specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space,\r\n * but the standard material would require them in Gamma space) (default is true)\r\n */\r\n public gammaSpace: boolean = true\r\n ) {\r\n super(name);\r\n }\r\n\r\n /**\r\n * Execute the current task\r\n * @param scene defines the scene where you want your assets to be loaded\r\n * @param onSuccess is a callback called when the task is successfully executed\r\n * @param onError is a callback called if an error occurs\r\n */\r\n public override runTask(scene: Scene, onSuccess: () => void, onError: (message?: string, exception?: any) => void): void {\r\n const onload = () => {\r\n onSuccess();\r\n };\r\n\r\n const onerror = (message?: string, exception?: any) => {\r\n onError(message, exception);\r\n };\r\n\r\n this.texture = new EquiRectangularCubeTexture(this.url, scene, this.size, this.noMipmap, this.gammaSpace, onload, onerror);\r\n }\r\n}\r\n\r\n/**\r\n * This class can be used to easily import assets into a scene\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/importers/assetManager\r\n */\r\nexport class AssetsManager {\r\n private _scene: Scene;\r\n private _isLoading = false;\r\n\r\n protected _tasks = new Array<AbstractAssetTask>();\r\n protected _waitingTasksCount = 0;\r\n protected _totalTasksCount = 0;\r\n\r\n /**\r\n * Callback called when all tasks are processed\r\n */\r\n public onFinish: (tasks: AbstractAssetTask[]) => void;\r\n\r\n /**\r\n * Callback called when a task is successful\r\n */\r\n public onTaskSuccess: (task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Callback called when a task had an error\r\n */\r\n public onTaskError: (task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Callback called when a task is done (whatever the result is)\r\n */\r\n public onProgress: (remainingCount: number, totalCount: number, task: AbstractAssetTask) => void;\r\n\r\n /**\r\n * Observable called when all tasks are processed\r\n */\r\n public onTaskSuccessObservable = new Observable<AbstractAssetTask>();\r\n\r\n /**\r\n * Observable called when a task had an error\r\n */\r\n public onTaskErrorObservable = new Observable<AbstractAssetTask>();\r\n\r\n /**\r\n * Observable called when all tasks were executed\r\n */\r\n public onTasksDoneObservable = new Observable<AbstractAssetTask[]>();\r\n\r\n /**\r\n * Observable called when a task is done (whatever the result is)\r\n */\r\n public onProgressObservable = new Observable<IAssetsProgressEvent>();\r\n\r\n /**\r\n * Gets or sets a boolean defining if the AssetsManager should use the default loading screen\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/scene/customLoadingScreen\r\n */\r\n public useDefaultLoadingScreen = true;\r\n\r\n /**\r\n * Gets or sets a boolean defining if the AssetsManager should automatically hide the loading screen\r\n * when all assets have been downloaded.\r\n * If set to false, you need to manually call in hideLoadingUI() once your scene is ready.\r\n */\r\n public autoHideLoadingUI = true;\r\n\r\n /**\r\n * Creates a new AssetsManager\r\n * @param scene defines the scene to work on\r\n */\r\n constructor(scene?: Scene) {\r\n this._scene = scene || <Scene>EngineStore.LastCreatedScene;\r\n }\r\n\r\n /**\r\n * Add a ContainerAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param meshesNames defines the name of meshes to load\r\n * @param rootUrl defines the root url to use to locate files\r\n * @param sceneFilename defines the filename of the scene file or the File itself\r\n * @param extension defines the extension to use to load the file\r\n * @returns a new ContainerAssetTask object\r\n */\r\n public addContainerTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File, extension?: string): ContainerAssetTask {\r\n const task = new ContainerAssetTask(taskName, meshesNames, rootUrl, sceneFilename, extension);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a MeshAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param meshesNames defines the name of meshes to load\r\n * @param rootUrl defines the root url to use to locate files\r\n * @param sceneFilename defines the filename of the scene file or the File itself\r\n * @param extension defines the extension to use to load the file\r\n * @returns a new MeshAssetTask object\r\n */\r\n public addMeshTask(taskName: string, meshesNames: any, rootUrl: string, sceneFilename: string | File, extension?: string): MeshAssetTask {\r\n const task = new MeshAssetTask(taskName, meshesNames, rootUrl, sceneFilename, extension);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a TextFileAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new TextFileAssetTask object\r\n */\r\n public addTextFileTask(taskName: string, url: string): TextFileAssetTask {\r\n const task = new TextFileAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a BinaryFileAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new BinaryFileAssetTask object\r\n */\r\n public addBinaryFileTask(taskName: string, url: string): BinaryFileAssetTask {\r\n const task = new BinaryFileAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a ImageAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @returns a new ImageAssetTask object\r\n */\r\n public addImageTask(taskName: string, url: string): ImageAssetTask {\r\n const task = new ImageAssetTask(taskName, url);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a TextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param invertY defines if you want to invert Y axis of the loaded texture (true by default)\r\n * @param samplingMode defines the sampling mode to use (Texture.TRILINEAR_SAMPLINGMODE by default)\r\n * @returns a new TextureAssetTask object\r\n */\r\n public addTextureTask(taskName: string, url: string, noMipmap?: boolean, invertY?: boolean, samplingMode: number = Texture.TRILINEAR_SAMPLINGMODE): TextureAssetTask {\r\n const task = new TextureAssetTask(taskName, url, noMipmap, invertY, samplingMode);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Add a CubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param extensions defines the extension to use to load the cube map (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param files defines the list of files to load (can be null)\r\n * @param prefiltered defines the prefiltered texture option (default is false)\r\n * @returns a new CubeTextureAssetTask object\r\n */\r\n public addCubeTextureTask(taskName: string, url: string, extensions?: string[], noMipmap?: boolean, files?: string[], prefiltered?: boolean): CubeTextureAssetTask {\r\n const task = new CubeTextureAssetTask(taskName, url, extensions, noMipmap, files, prefiltered);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n *\r\n * Add a HDRCubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param size defines the size you want for the cubemap (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param generateHarmonics defines if you want to automatically generate (true by default)\r\n * @param gammaSpace specifies if the texture will be use in gamma or linear space (the PBR material requires those texture in linear space, but the standard material would require them in Gamma space) (default is false)\r\n * @param reserved Internal use only\r\n * @returns a new HDRCubeTextureAssetTask object\r\n */\r\n public addHDRCubeTextureTask(\r\n taskName: string,\r\n url: string,\r\n size: number,\r\n noMipmap = false,\r\n generateHarmonics = true,\r\n gammaSpace = false,\r\n reserved = false\r\n ): HDRCubeTextureAssetTask {\r\n const task = new HDRCubeTextureAssetTask(taskName, url, size, noMipmap, generateHarmonics, gammaSpace, reserved);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n *\r\n * Add a EquiRectangularCubeTextureAssetTask to the list of active tasks\r\n * @param taskName defines the name of the new task\r\n * @param url defines the url of the file to load\r\n * @param size defines the size you want for the cubemap (can be null)\r\n * @param noMipmap defines if the texture must not receive mipmaps (false by default)\r\n * @param gammaSpace Specifies if the texture will be used in gamma or linear space\r\n * (the PBR material requires those textures in linear space, but the standard material would require them in Gamma space)\r\n * @returns a new EquiRectangularCubeTextureAssetTask object\r\n */\r\n public addEquiRectangularCubeTextureAssetTask(taskName: string, url: string, size: number, noMipmap = false, gammaSpace = true): EquiRectangularCubeTextureAssetTask {\r\n const task = new EquiRectangularCubeTextureAssetTask(taskName, url, size, noMipmap, gammaSpace);\r\n this._tasks.push(task);\r\n\r\n return task;\r\n }\r\n\r\n /**\r\n * Remove a task from the assets manager.\r\n * @param task the task to remove\r\n */\r\n public removeTask(task: AbstractAssetTask) {\r\n const index = this._tasks.indexOf(task);\r\n\r\n if (index > -1) {\r\n this._tasks.splice(index, 1);\r\n }\r\n }\r\n\r\n private _decreaseWaitingTasksCount(task: AbstractAssetTask): void {\r\n this._waitingTasksCount--;\r\n\r\n try {\r\n if (this.onProgress) {\r\n this.onProgress(this._waitingTasksCount, this._totalTasksCount, task);\r\n }\r\n\r\n this.onProgressObservable.notifyObservers(new AssetsProgressEvent(this._waitingTasksCount, this._totalTasksCount, task));\r\n } catch (e) {\r\n Logger.Error(\"Error running progress callbacks.\");\r\n Logger.Log(e);\r\n }\r\n\r\n if (this._waitingTasksCount === 0) {\r\n try {\r\n const currentTasks = this._tasks.slice();\r\n\r\n if (this.onFinish) {\r\n // Calling onFinish with immutable array of tasks\r\n this.onFinish(currentTasks);\r\n }\r\n\r\n // Let's remove successful tasks\r\n for (const task of currentTasks) {\r\n if (task.taskState === AssetTaskState.DONE) {\r\n const index = this._tasks.indexOf(task);\r\n\r\n if (index > -1) {\r\n this._tasks.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n this.onTasksDoneObservable.notifyObservers(this._tasks);\r\n } catch (e) {\r\n Logger.Error(\"Error running tasks-done callbacks.\");\r\n Logger.Log(e);\r\n }\r\n this._isLoading = false;\r\n if (this.autoHideLoadingUI) {\r\n this._scene.getEngine().hideLoadingUI();\r\n }\r\n }\r\n }\r\n\r\n private _runTask(task: AbstractAssetTask): void {\r\n const done = () => {\r\n try {\r\n if (this.onTaskSuccess) {\r\n this.onTaskSuccess(task);\r\n }\r\n this.onTaskSuccessObservable.notifyObservers(task);\r\n this._decreaseWaitingTasksCount(task);\r\n } catch (e) {\r\n error(\"Error executing task success callbacks\", e);\r\n }\r\n };\r\n\r\n const error = (message?: string, exception?: any) => {\r\n task._setErrorObject(message, exception);\r\n\r\n if (this.onTaskError) {\r\n this.onTaskError(task);\r\n } else if (!task.onError) {\r\n Logger.Error(this._formatTaskErrorMessage(task));\r\n }\r\n this.onTaskErrorObservable.notifyObservers(task);\r\n this._decreaseWaitingTasksCount(task);\r\n };\r\n\r\n task.run(this._scene, done, error);\r\n }\r\n\r\n private _formatTaskErrorMessage(task: AbstractAssetTask) {\r\n let errorMessage = \"Unable to complete task \" + task.name;\r\n\r\n if (task.errorObject.message) {\r\n errorMessage += `: ${task.errorObject.message}`;\r\n }\r\n if (task.errorObject.exception) {\r\n errorMessage += `: ${task.errorObject.exception}`;\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n /**\r\n * Reset the AssetsManager and remove all tasks\r\n * @returns the current instance of the AssetsManager\r\n */\r\n public reset(): AssetsManager {\r\n this._isLoading = false;\r\n this._tasks = new Array<AbstractAssetTask>();\r\n return this;\r\n }\r\n\r\n /**\r\n * Start the loading process\r\n * @returns the current instance of the AssetsManager\r\n */\r\n public load(): AssetsManager {\r\n if (this._isLoading) {\r\n return this;\r\n }\r\n this._isLoading = true;\r\n this._waitingTasksCount = this._tasks.length;\r\n this._totalTasksCount = this._tasks.length;\r\n\r\n if (this._waitingTasksCount === 0) {\r\n this._isLoading = false;\r\n if (this.onFinish) {\r\n this.onFinish(this._tasks);\r\n }\r\n this.onTasksDoneObservable.notifyObservers(this._tasks);\r\n return this;\r\n }\r\n\r\n if (this.useDefaultLoadingScreen) {\r\n this._scene.getEngine().displayLoadingUI();\r\n }\r\n\r\n for (let index = 0; index < this._tasks.length; index++) {\r\n const task = this._tasks[index];\r\n if (task.taskState === AssetTaskState.INIT) {\r\n this._runTask(task);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Start the loading process as an async operation\r\n * @returns a promise returning the list of failed tasks\r\n */\r\n public async loadAsync(): Promise<void> {\r\n return await new Promise((resolve, reject) => {\r\n if (this._isLoading) {\r\n resolve();\r\n return;\r\n }\r\n this.onTasksDoneObservable.addOnce((remainingTasks) => {\r\n if (remainingTasks && remainingTasks.length) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(remainingTasks);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n\r\n this.load();\r\n });\r\n }\r\n}\r\n"]}
package/Misc/asyncLock.js CHANGED
@@ -34,9 +34,11 @@ export class AsyncLock {
34
34
  return func();
35
35
  }
36
36
  : func;
37
+ // eslint-disable-next-line github/no-then
37
38
  const newOperation = this._currentOperation.then(wrappedFunc);
38
39
  // NOTE: It would be simpler to just hold a Promise<unknown>, but this class should not prevent an object held by the returned promise from being garbage collected.
39
40
  this._currentOperation = new Promise((resolve) => {
41
+ // eslint-disable-next-line github/no-then
40
42
  newOperation.then(() => resolve(), resolve);
41
43
  });
42
44
  return newOperation;
@@ -61,10 +63,11 @@ export class AsyncLock {
61
63
  if (acquiredLocks === locks.length) {
62
64
  deferred.resolve(await func());
63
65
  }
64
- return deferred.promise;
66
+ return await deferred.promise;
67
+ // eslint-disable-next-line github/no-then
65
68
  }, signal).catch((e) => deferred.reject(e));
66
69
  }
67
- return deferred.promise;
70
+ return await deferred.promise;
68
71
  }
69
72
  }
70
73
  //# sourceMappingURL=asyncLock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"asyncLock.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/asyncLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,SAAS;IAAtB;QACY,sBAAiB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAyDjE,CAAC;IAvDG;;;;;OAKG;IACH,2FAA2F;IACpF,SAAS,CAAI,IAA0B,EAAE,MAAoB;QAChE,MAAM,EAAE,cAAc,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAG,MAAM;YACtB,CAAC,CAAC,qEAAqE;gBACrE,GAAG,EAAE;oBACD,MAAM,CAAC,cAAc,EAAE,CAAC;oBACxB,OAAO,IAAI,EAAE,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC,IAAI,CAAC;QAEX,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,oKAAoK;QACpK,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnD,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAI,IAA0B,EAAE,KAAkB,EAAE,MAAoB;QACjG,MAAM,EAAE,cAAc,EAAE,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,MAAM,IAAI,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAK,CAAC;QACnC,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;gBACtB,aAAa,EAAE,CAAC;gBAChB,IAAI,aAAa,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjC,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,QAAQ,CAAC,OAAO,CAAC;YAC5B,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC5B,CAAC;CACJ","sourcesContent":["import { Deferred } from \"./deferred\";\r\n\r\n/**\r\n * Provides a simple way of creating the rough equivalent of an async critical section.\r\n *\r\n * @example\r\n * ```typescript\r\n * const myLock = new AsyncLock();\r\n *\r\n * private async MyFuncAsync(): Promise<void> {\r\n * await myLock.lockAsync(async () => {\r\n * await operation1Async();\r\n * await operation2Async();\r\n * });\r\n * }\r\n * ```\r\n */\r\nexport class AsyncLock {\r\n private _currentOperation: Promise<void> = Promise.resolve();\r\n\r\n /**\r\n * Executes the provided function when the lock is acquired (e.g. when the previous operation finishes).\r\n * @param func The function to execute.\r\n * @param signal An optional signal that can be used to abort the operation.\r\n * @returns A promise that resolves when the func finishes executing.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public lockAsync<T>(func: () => T | Promise<T>, signal?: AbortSignal): Promise<T> {\r\n signal?.throwIfAborted();\r\n\r\n const wrappedFunc = signal\r\n ? // eslint-disable-next-line @typescript-eslint/promise-function-async\r\n () => {\r\n signal.throwIfAborted();\r\n return func();\r\n }\r\n : func;\r\n\r\n const newOperation = this._currentOperation.then(wrappedFunc);\r\n // NOTE: It would be simpler to just hold a Promise<unknown>, but this class should not prevent an object held by the returned promise from being garbage collected.\r\n this._currentOperation = new Promise<void>((resolve) => {\r\n newOperation.then(() => resolve(), resolve);\r\n });\r\n return newOperation;\r\n }\r\n\r\n /**\r\n * Executes the provided function when all the specified locks are acquired.\r\n * @param func The function to execute.\r\n * @param locks The locks to acquire.\r\n * @param signal An optional signal that can be used to abort the operation.\r\n * @returns A promise that resolves when the func finishes executing.\r\n */\r\n public static async LockAsync<T>(func: () => T | Promise<T>, locks: AsyncLock[], signal?: AbortSignal): Promise<T> {\r\n signal?.throwIfAborted();\r\n\r\n if (locks.length === 0) {\r\n return await func();\r\n }\r\n\r\n const deferred = new Deferred<T>();\r\n let acquiredLocks = 0;\r\n\r\n for (const lock of locks) {\r\n lock.lockAsync(async () => {\r\n acquiredLocks++;\r\n if (acquiredLocks === locks.length) {\r\n deferred.resolve(await func());\r\n }\r\n return deferred.promise;\r\n }, signal).catch((e) => deferred.reject(e));\r\n }\r\n\r\n return deferred.promise;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"asyncLock.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/asyncLock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,SAAS;IAAtB;QACY,sBAAiB,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IA4DjE,CAAC;IA1DG;;;;;OAKG;IACH,2FAA2F;IACpF,SAAS,CAAI,IAA0B,EAAE,MAAoB;QAChE,MAAM,EAAE,cAAc,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAG,MAAM;YACtB,CAAC,CAAC,qEAAqE;gBACrE,GAAG,EAAE;oBACD,MAAM,CAAC,cAAc,EAAE,CAAC;oBACxB,OAAO,IAAI,EAAE,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC,IAAI,CAAC;QAEX,0CAA0C;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,oKAAoK;QACpK,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACnD,0CAA0C;YAC1C,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,KAAK,CAAC,SAAS,CAAI,IAA0B,EAAE,KAAkB,EAAE,MAAoB;QACjG,MAAM,EAAE,cAAc,EAAE,CAAC;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,MAAM,IAAI,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAK,CAAC;QACnC,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE;gBACtB,aAAa,EAAE,CAAC;gBAChB,IAAI,aAAa,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjC,QAAQ,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;gBACnC,CAAC;gBACD,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC;gBAC9B,0CAA0C;YAC9C,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,MAAM,QAAQ,CAAC,OAAO,CAAC;IAClC,CAAC;CACJ","sourcesContent":["import { Deferred } from \"./deferred\";\r\n\r\n/**\r\n * Provides a simple way of creating the rough equivalent of an async critical section.\r\n *\r\n * @example\r\n * ```typescript\r\n * const myLock = new AsyncLock();\r\n *\r\n * private async MyFuncAsync(): Promise<void> {\r\n * await myLock.lockAsync(async () => {\r\n * await operation1Async();\r\n * await operation2Async();\r\n * });\r\n * }\r\n * ```\r\n */\r\nexport class AsyncLock {\r\n private _currentOperation: Promise<void> = Promise.resolve();\r\n\r\n /**\r\n * Executes the provided function when the lock is acquired (e.g. when the previous operation finishes).\r\n * @param func The function to execute.\r\n * @param signal An optional signal that can be used to abort the operation.\r\n * @returns A promise that resolves when the func finishes executing.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/promise-function-async, no-restricted-syntax\r\n public lockAsync<T>(func: () => T | Promise<T>, signal?: AbortSignal): Promise<T> {\r\n signal?.throwIfAborted();\r\n\r\n const wrappedFunc = signal\r\n ? // eslint-disable-next-line @typescript-eslint/promise-function-async\r\n () => {\r\n signal.throwIfAborted();\r\n return func();\r\n }\r\n : func;\r\n\r\n // eslint-disable-next-line github/no-then\r\n const newOperation = this._currentOperation.then(wrappedFunc);\r\n // NOTE: It would be simpler to just hold a Promise<unknown>, but this class should not prevent an object held by the returned promise from being garbage collected.\r\n this._currentOperation = new Promise<void>((resolve) => {\r\n // eslint-disable-next-line github/no-then\r\n newOperation.then(() => resolve(), resolve);\r\n });\r\n return newOperation;\r\n }\r\n\r\n /**\r\n * Executes the provided function when all the specified locks are acquired.\r\n * @param func The function to execute.\r\n * @param locks The locks to acquire.\r\n * @param signal An optional signal that can be used to abort the operation.\r\n * @returns A promise that resolves when the func finishes executing.\r\n */\r\n public static async LockAsync<T>(func: () => T | Promise<T>, locks: AsyncLock[], signal?: AbortSignal): Promise<T> {\r\n signal?.throwIfAborted();\r\n\r\n if (locks.length === 0) {\r\n return await func();\r\n }\r\n\r\n const deferred = new Deferred<T>();\r\n let acquiredLocks = 0;\r\n\r\n for (const lock of locks) {\r\n lock.lockAsync(async () => {\r\n acquiredLocks++;\r\n if (acquiredLocks === locks.length) {\r\n deferred.resolve(await func());\r\n }\r\n return await deferred.promise;\r\n // eslint-disable-next-line github/no-then\r\n }, signal).catch((e) => deferred.reject(e));\r\n }\r\n\r\n return await deferred.promise;\r\n }\r\n}\r\n"]}
package/Misc/basis.js CHANGED
@@ -107,20 +107,24 @@ const CreateWorkerAsync = async () => {
107
107
  }
108
108
  else {
109
109
  Tools.LoadFileAsync(Tools.GetBabylonScriptURL(BasisToolsOptions.WasmModuleURL))
110
+ // eslint-disable-next-line github/no-then
110
111
  .then((wasmBinary) => {
111
112
  if (typeof URL !== "function") {
113
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
112
114
  return reject("Basis transcoder requires an environment with a URL constructor");
113
115
  }
114
116
  // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
115
117
  const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunction})()`], { type: "application/javascript" }));
116
118
  LocalWorker = new Worker(workerBlobUrl);
119
+ // eslint-disable-next-line github/no-then
117
120
  initializeWebWorker(LocalWorker, wasmBinary, BasisToolsOptions.JSModuleURL).then(res, reject);
118
121
  })
122
+ // eslint-disable-next-line github/no-then
119
123
  .catch(reject);
120
124
  }
121
125
  });
122
126
  }
123
- return WorkerPromise;
127
+ return await WorkerPromise;
124
128
  };
125
129
  /**
126
130
  * Set the worker to use for transcoding
@@ -137,13 +141,15 @@ export const SetBasisTranscoderWorker = (worker) => {
137
141
  */
138
142
  export const TranscodeAsync = async (data, config) => {
139
143
  const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;
140
- return new Promise((res, rej) => {
144
+ return await new Promise((res, rej) => {
145
+ // eslint-disable-next-line github/no-then
141
146
  CreateWorkerAsync().then(() => {
142
147
  const actionId = ActionId++;
143
148
  const messageHandler = (msg) => {
144
149
  if (msg.data.action === "transcode" && msg.data.id === actionId) {
145
150
  LocalWorker.removeEventListener("message", messageHandler);
146
151
  if (!msg.data.success) {
152
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
147
153
  rej("Transcode is not supported on this device");
148
154
  }
149
155
  else {
@@ -158,6 +164,7 @@ export const TranscodeAsync = async (data, config) => {
158
164
  dataViewCopy.buffer,
159
165
  ]);
160
166
  }, (error) => {
167
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
161
168
  rej(error);
162
169
  });
163
170
  });
package/Misc/basis.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"basis.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/basis.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../types\";\r\nimport { Tools } from \"./tools\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { initializeWebWorker, workerFunction } from \"./basisWorker\";\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\n\r\n/**\r\n * Info about the .basis files\r\n */\r\nexport class BasisFileInfo {\r\n /**\r\n * If the file has alpha\r\n */\r\n public hasAlpha: boolean;\r\n /**\r\n * Info about each image of the basis file\r\n */\r\n public images: Array<{ levels: Array<{ width: number; height: number; transcodedPixels: ArrayBufferView }> }>;\r\n}\r\n\r\n/**\r\n * Result of transcoding a basis file\r\n */\r\nclass TranscodeResult {\r\n /**\r\n * Info about the .basis file\r\n */\r\n public fileInfo: BasisFileInfo;\r\n /**\r\n * Format to use when loading the file\r\n */\r\n public format: number;\r\n}\r\n\r\n/**\r\n * Configuration options for the Basis transcoder\r\n */\r\nexport class BasisTranscodeConfiguration {\r\n /**\r\n * Supported compression formats used to determine the supported output format of the transcoder\r\n */\r\n supportedCompressionFormats?: {\r\n /**\r\n * etc1 compression format\r\n */\r\n etc1?: boolean;\r\n /**\r\n * s3tc compression format\r\n */\r\n s3tc?: boolean;\r\n /**\r\n * pvrtc compression format\r\n */\r\n pvrtc?: boolean;\r\n /**\r\n * etc2 compression format\r\n */\r\n etc2?: boolean;\r\n /**\r\n * astc compression format\r\n */\r\n astc?: boolean;\r\n /**\r\n * bc7 compression format\r\n */\r\n bc7?: boolean;\r\n };\r\n /**\r\n * If mipmap levels should be loaded for transcoded images (Default: true)\r\n */\r\n loadMipmapLevels?: boolean;\r\n /**\r\n * Index of a single image to load (Default: all images)\r\n */\r\n loadSingleImage?: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n * Enum of basis transcoder formats\r\n */\r\nenum BASIS_FORMATS {\r\n cTFETC1 = 0,\r\n cTFETC2 = 1,\r\n cTFBC1 = 2,\r\n cTFBC3 = 3,\r\n cTFBC4 = 4,\r\n cTFBC5 = 5,\r\n cTFBC7 = 6,\r\n cTFPVRTC1_4_RGB = 8,\r\n cTFPVRTC1_4_RGBA = 9,\r\n cTFASTC_4x4 = 10,\r\n cTFATC_RGB = 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA = 12,\r\n cTFRGBA32 = 13,\r\n cTFRGB565 = 14,\r\n cTFBGR565 = 15,\r\n cTFRGBA4444 = 16,\r\n cTFFXT1_RGB = 17,\r\n cTFPVRTC2_4_RGB = 18,\r\n cTFPVRTC2_4_RGBA = 19,\r\n cTFETC2_EAC_R11 = 20,\r\n cTFETC2_EAC_RG11 = 21,\r\n}\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisToolsOptions = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`,\r\n};\r\n\r\n/**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @param engine\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport const GetInternalFormatFromBasisFormat = (basisFormat: number, engine: AbstractEngine) => {\r\n let format;\r\n switch (basisFormat) {\r\n case BASIS_FORMATS.cTFETC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL;\r\n break;\r\n case BASIS_FORMATS.cTFBC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n break;\r\n case BASIS_FORMATS.cTFBC4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case BASIS_FORMATS.cTFASTC_4x4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n break;\r\n case BASIS_FORMATS.cTFETC2:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n break;\r\n case BASIS_FORMATS.cTFBC7:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n break;\r\n }\r\n\r\n if (format === undefined) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"The chosen Basis transcoder format is not currently supported\";\r\n }\r\n\r\n return format;\r\n};\r\n\r\nlet WorkerPromise: Nullable<Promise<Worker>> = null;\r\nlet LocalWorker: Nullable<Worker> = null;\r\nlet ActionId = 0;\r\nconst IgnoreSupportedFormats = false;\r\nconst CreateWorkerAsync = async () => {\r\n if (!WorkerPromise) {\r\n WorkerPromise = new Promise((res, reject) => {\r\n if (LocalWorker) {\r\n res(LocalWorker);\r\n } else {\r\n Tools.LoadFileAsync(Tools.GetBabylonScriptURL(BasisToolsOptions.WasmModuleURL))\r\n .then((wasmBinary) => {\r\n if (typeof URL !== \"function\") {\r\n return reject(\"Basis transcoder requires an environment with a URL constructor\");\r\n }\r\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\r\n const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunction})()`], { type: \"application/javascript\" }));\r\n LocalWorker = new Worker(workerBlobUrl);\r\n initializeWebWorker(LocalWorker, wasmBinary, BasisToolsOptions.JSModuleURL).then(res, reject);\r\n })\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n return WorkerPromise;\r\n};\r\n\r\n/**\r\n * Set the worker to use for transcoding\r\n * @param worker The worker that will be used for transcoding\r\n */\r\nexport const SetBasisTranscoderWorker = (worker: Worker) => {\r\n LocalWorker = worker;\r\n};\r\n\r\n/**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\nexport const TranscodeAsync = async (data: ArrayBuffer | ArrayBufferView, config: BasisTranscodeConfiguration): Promise<TranscodeResult> => {\r\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\r\n\r\n return new Promise((res, rej) => {\r\n CreateWorkerAsync().then(\r\n () => {\r\n const actionId = ActionId++;\r\n const messageHandler = (msg: any) => {\r\n if (msg.data.action === \"transcode\" && msg.data.id === actionId) {\r\n LocalWorker!.removeEventListener(\"message\", messageHandler);\r\n if (!msg.data.success) {\r\n rej(\"Transcode is not supported on this device\");\r\n } else {\r\n res(msg.data);\r\n }\r\n }\r\n };\r\n LocalWorker!.addEventListener(\"message\", messageHandler);\r\n\r\n const dataViewCopy = new Uint8Array(dataView.byteLength);\r\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\r\n LocalWorker!.postMessage({ action: \"transcode\", id: actionId, imageData: dataViewCopy, config: config, ignoreSupportedFormats: IgnoreSupportedFormats }, [\r\n dataViewCopy.buffer,\r\n ]);\r\n },\r\n (error) => {\r\n rej(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Binds a texture according to its underlying target.\r\n * @param texture texture to bind\r\n * @param engine the engine to bind the texture in\r\n */\r\nconst BindTexture = (texture: InternalTexture, engine: Engine): void => {\r\n let target: GLenum = engine._gl?.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = engine._gl?.TEXTURE_CUBE_MAP;\r\n }\r\n\r\n engine._bindTextureDirectly(target, texture, true);\r\n};\r\n\r\n/**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\nexport const LoadTextureFromTranscodeResult = (texture: InternalTexture, transcodeResult: TranscodeResult) => {\r\n const engine = texture.getEngine() as Engine;\r\n for (let i = 0; i < transcodeResult.fileInfo.images.length; i++) {\r\n const rootImage = transcodeResult.fileInfo.images[i].levels[0];\r\n texture._invertVScale = texture.invertY;\r\n if (transcodeResult.format === -1 || transcodeResult.format === BASIS_FORMATS.cTFRGB565) {\r\n // No compatable compressed format found, fallback to RGB\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n\r\n if (engine._features.basisNeedsPOT && (Math.log2(rootImage.width) % 1 !== 0 || Math.log2(rootImage.height) % 1 !== 0)) {\r\n // Create non power of two texture\r\n const source = new InternalTexture(engine, InternalTextureSource.Temp);\r\n\r\n texture._invertVScale = texture.invertY;\r\n source.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n source.format = Constants.TEXTUREFORMAT_RGB;\r\n // Fallback requires aligned width/height\r\n source.width = (rootImage.width + 3) & ~3;\r\n source.height = (rootImage.height + 3) & ~3;\r\n BindTexture(source, engine);\r\n engine._uploadDataToTextureDirectly(source, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n\r\n // Resize to power of two\r\n engine._rescaleTexture(source, texture, engine.scenes[0], engine._getInternalFormat(Constants.TEXTUREFORMAT_RGB), () => {\r\n engine._releaseTexture(source);\r\n BindTexture(texture, engine);\r\n });\r\n } else {\r\n // Fallback is already inverted\r\n texture._invertVScale = !texture.invertY;\r\n\r\n // Upload directly\r\n texture.width = (rootImage.width + 3) & ~3;\r\n texture.height = (rootImage.height + 3) & ~3;\r\n texture.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n BindTexture(texture, engine);\r\n engine._uploadDataToTextureDirectly(texture, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n }\r\n } else {\r\n texture.width = rootImage.width;\r\n texture.height = rootImage.height;\r\n texture.generateMipMaps = transcodeResult.fileInfo.images[i].levels.length > 1;\r\n\r\n const format = BasisTools.GetInternalFormatFromBasisFormat(transcodeResult.format, engine);\r\n texture.format = format;\r\n\r\n BindTexture(texture, engine);\r\n\r\n // Upload all mip levels in the file\r\n const levels = transcodeResult.fileInfo.images[i].levels;\r\n\r\n for (let index = 0; index < levels.length; index++) {\r\n const level = levels[index];\r\n engine._uploadCompressedDataToTextureDirectly(texture, format, level.width, level.height, level.transcodedPixels, i, index);\r\n }\r\n\r\n if (engine._features.basisNeedsPOT && (Math.log2(texture.width) % 1 !== 0 || Math.log2(texture.height) % 1 !== 0)) {\r\n Tools.Warn(\r\n \"Loaded .basis texture width and height are not a power of two. Texture wrapping will be set to Texture.CLAMP_ADDRESSMODE as other modes are not supported with non power of two dimensions in webGL 1.\"\r\n );\r\n texture._cachedWrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture._cachedWrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisTools = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: BasisToolsOptions.JSModuleURL,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: BasisToolsOptions.WasmModuleURL,\r\n\r\n /**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n GetInternalFormatFromBasisFormat,\r\n\r\n /**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\n TranscodeAsync,\r\n\r\n /**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\n LoadTextureFromTranscodeResult,\r\n};\r\n\r\nObject.defineProperty(BasisTools, \"JSModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.JSModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.JSModuleURL = value;\r\n },\r\n});\r\n\r\nObject.defineProperty(BasisTools, \"WasmModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.WasmModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.WasmModuleURL = value;\r\n },\r\n});\r\n"]}
1
+ {"version":3,"file":"basis.js","sourceRoot":"","sources":["../../../../dev/core/src/Misc/basis.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport type { Nullable } from \"../types\";\r\nimport { Tools } from \"./tools\";\r\nimport { Texture } from \"../Materials/Textures/texture\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { initializeWebWorker, workerFunction } from \"./basisWorker\";\r\nimport type { AbstractEngine } from \"core/Engines/abstractEngine\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\n\r\n/**\r\n * Info about the .basis files\r\n */\r\nexport class BasisFileInfo {\r\n /**\r\n * If the file has alpha\r\n */\r\n public hasAlpha: boolean;\r\n /**\r\n * Info about each image of the basis file\r\n */\r\n public images: Array<{ levels: Array<{ width: number; height: number; transcodedPixels: ArrayBufferView }> }>;\r\n}\r\n\r\n/**\r\n * Result of transcoding a basis file\r\n */\r\nclass TranscodeResult {\r\n /**\r\n * Info about the .basis file\r\n */\r\n public fileInfo: BasisFileInfo;\r\n /**\r\n * Format to use when loading the file\r\n */\r\n public format: number;\r\n}\r\n\r\n/**\r\n * Configuration options for the Basis transcoder\r\n */\r\nexport class BasisTranscodeConfiguration {\r\n /**\r\n * Supported compression formats used to determine the supported output format of the transcoder\r\n */\r\n supportedCompressionFormats?: {\r\n /**\r\n * etc1 compression format\r\n */\r\n etc1?: boolean;\r\n /**\r\n * s3tc compression format\r\n */\r\n s3tc?: boolean;\r\n /**\r\n * pvrtc compression format\r\n */\r\n pvrtc?: boolean;\r\n /**\r\n * etc2 compression format\r\n */\r\n etc2?: boolean;\r\n /**\r\n * astc compression format\r\n */\r\n astc?: boolean;\r\n /**\r\n * bc7 compression format\r\n */\r\n bc7?: boolean;\r\n };\r\n /**\r\n * If mipmap levels should be loaded for transcoded images (Default: true)\r\n */\r\n loadMipmapLevels?: boolean;\r\n /**\r\n * Index of a single image to load (Default: all images)\r\n */\r\n loadSingleImage?: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n * Enum of basis transcoder formats\r\n */\r\nenum BASIS_FORMATS {\r\n cTFETC1 = 0,\r\n cTFETC2 = 1,\r\n cTFBC1 = 2,\r\n cTFBC3 = 3,\r\n cTFBC4 = 4,\r\n cTFBC5 = 5,\r\n cTFBC7 = 6,\r\n cTFPVRTC1_4_RGB = 8,\r\n cTFPVRTC1_4_RGBA = 9,\r\n cTFASTC_4x4 = 10,\r\n cTFATC_RGB = 11,\r\n cTFATC_RGBA_INTERPOLATED_ALPHA = 12,\r\n cTFRGBA32 = 13,\r\n cTFRGB565 = 14,\r\n cTFBGR565 = 15,\r\n cTFRGBA4444 = 16,\r\n cTFFXT1_RGB = 17,\r\n cTFPVRTC2_4_RGB = 18,\r\n cTFPVRTC2_4_RGBA = 19,\r\n cTFETC2_EAC_R11 = 20,\r\n cTFETC2_EAC_RG11 = 21,\r\n}\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisToolsOptions = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.js`,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: `${Tools._DefaultCdnUrl}/basisTranscoder/1/basis_transcoder.wasm`,\r\n};\r\n\r\n/**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @param engine\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\r\nexport const GetInternalFormatFromBasisFormat = (basisFormat: number, engine: AbstractEngine) => {\r\n let format;\r\n switch (basisFormat) {\r\n case BASIS_FORMATS.cTFETC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_ETC1_WEBGL;\r\n break;\r\n case BASIS_FORMATS.cTFBC1:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGB_S3TC_DXT1;\r\n break;\r\n case BASIS_FORMATS.cTFBC4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_S3TC_DXT5;\r\n break;\r\n case BASIS_FORMATS.cTFASTC_4x4:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_ASTC_4x4;\r\n break;\r\n case BASIS_FORMATS.cTFETC2:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA8_ETC2_EAC;\r\n break;\r\n case BASIS_FORMATS.cTFBC7:\r\n format = Constants.TEXTUREFORMAT_COMPRESSED_RGBA_BPTC_UNORM;\r\n break;\r\n }\r\n\r\n if (format === undefined) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"The chosen Basis transcoder format is not currently supported\";\r\n }\r\n\r\n return format;\r\n};\r\n\r\nlet WorkerPromise: Nullable<Promise<Worker>> = null;\r\nlet LocalWorker: Nullable<Worker> = null;\r\nlet ActionId = 0;\r\nconst IgnoreSupportedFormats = false;\r\nconst CreateWorkerAsync = async () => {\r\n if (!WorkerPromise) {\r\n WorkerPromise = new Promise((res, reject) => {\r\n if (LocalWorker) {\r\n res(LocalWorker);\r\n } else {\r\n Tools.LoadFileAsync(Tools.GetBabylonScriptURL(BasisToolsOptions.WasmModuleURL))\r\n // eslint-disable-next-line github/no-then\r\n .then((wasmBinary) => {\r\n if (typeof URL !== \"function\") {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n return reject(\"Basis transcoder requires an environment with a URL constructor\");\r\n }\r\n // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\r\n const workerBlobUrl = URL.createObjectURL(new Blob([`(${workerFunction})()`], { type: \"application/javascript\" }));\r\n LocalWorker = new Worker(workerBlobUrl);\r\n // eslint-disable-next-line github/no-then\r\n initializeWebWorker(LocalWorker, wasmBinary, BasisToolsOptions.JSModuleURL).then(res, reject);\r\n })\r\n // eslint-disable-next-line github/no-then\r\n .catch(reject);\r\n }\r\n });\r\n }\r\n return await WorkerPromise;\r\n};\r\n\r\n/**\r\n * Set the worker to use for transcoding\r\n * @param worker The worker that will be used for transcoding\r\n */\r\nexport const SetBasisTranscoderWorker = (worker: Worker) => {\r\n LocalWorker = worker;\r\n};\r\n\r\n/**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\nexport const TranscodeAsync = async (data: ArrayBuffer | ArrayBufferView, config: BasisTranscodeConfiguration): Promise<TranscodeResult> => {\r\n const dataView = data instanceof ArrayBuffer ? new Uint8Array(data) : data;\r\n\r\n return await new Promise((res, rej) => {\r\n // eslint-disable-next-line github/no-then\r\n CreateWorkerAsync().then(\r\n () => {\r\n const actionId = ActionId++;\r\n const messageHandler = (msg: any) => {\r\n if (msg.data.action === \"transcode\" && msg.data.id === actionId) {\r\n LocalWorker!.removeEventListener(\"message\", messageHandler);\r\n if (!msg.data.success) {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n rej(\"Transcode is not supported on this device\");\r\n } else {\r\n res(msg.data);\r\n }\r\n }\r\n };\r\n LocalWorker!.addEventListener(\"message\", messageHandler);\r\n\r\n const dataViewCopy = new Uint8Array(dataView.byteLength);\r\n dataViewCopy.set(new Uint8Array(dataView.buffer, dataView.byteOffset, dataView.byteLength));\r\n LocalWorker!.postMessage({ action: \"transcode\", id: actionId, imageData: dataViewCopy, config: config, ignoreSupportedFormats: IgnoreSupportedFormats }, [\r\n dataViewCopy.buffer,\r\n ]);\r\n },\r\n (error) => {\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n rej(error);\r\n }\r\n );\r\n });\r\n};\r\n\r\n/**\r\n * Binds a texture according to its underlying target.\r\n * @param texture texture to bind\r\n * @param engine the engine to bind the texture in\r\n */\r\nconst BindTexture = (texture: InternalTexture, engine: Engine): void => {\r\n let target: GLenum = engine._gl?.TEXTURE_2D;\r\n if (texture.isCube) {\r\n target = engine._gl?.TEXTURE_CUBE_MAP;\r\n }\r\n\r\n engine._bindTextureDirectly(target, texture, true);\r\n};\r\n\r\n/**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\nexport const LoadTextureFromTranscodeResult = (texture: InternalTexture, transcodeResult: TranscodeResult) => {\r\n const engine = texture.getEngine() as Engine;\r\n for (let i = 0; i < transcodeResult.fileInfo.images.length; i++) {\r\n const rootImage = transcodeResult.fileInfo.images[i].levels[0];\r\n texture._invertVScale = texture.invertY;\r\n if (transcodeResult.format === -1 || transcodeResult.format === BASIS_FORMATS.cTFRGB565) {\r\n // No compatable compressed format found, fallback to RGB\r\n texture.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n texture.format = Constants.TEXTUREFORMAT_RGB;\r\n\r\n if (engine._features.basisNeedsPOT && (Math.log2(rootImage.width) % 1 !== 0 || Math.log2(rootImage.height) % 1 !== 0)) {\r\n // Create non power of two texture\r\n const source = new InternalTexture(engine, InternalTextureSource.Temp);\r\n\r\n texture._invertVScale = texture.invertY;\r\n source.type = Constants.TEXTURETYPE_UNSIGNED_SHORT_5_6_5;\r\n source.format = Constants.TEXTUREFORMAT_RGB;\r\n // Fallback requires aligned width/height\r\n source.width = (rootImage.width + 3) & ~3;\r\n source.height = (rootImage.height + 3) & ~3;\r\n BindTexture(source, engine);\r\n engine._uploadDataToTextureDirectly(source, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n\r\n // Resize to power of two\r\n engine._rescaleTexture(source, texture, engine.scenes[0], engine._getInternalFormat(Constants.TEXTUREFORMAT_RGB), () => {\r\n engine._releaseTexture(source);\r\n BindTexture(texture, engine);\r\n });\r\n } else {\r\n // Fallback is already inverted\r\n texture._invertVScale = !texture.invertY;\r\n\r\n // Upload directly\r\n texture.width = (rootImage.width + 3) & ~3;\r\n texture.height = (rootImage.height + 3) & ~3;\r\n texture.samplingMode = Constants.TEXTURE_LINEAR_LINEAR;\r\n BindTexture(texture, engine);\r\n engine._uploadDataToTextureDirectly(texture, new Uint16Array(rootImage.transcodedPixels.buffer), i, 0, Constants.TEXTUREFORMAT_RGB, true);\r\n }\r\n } else {\r\n texture.width = rootImage.width;\r\n texture.height = rootImage.height;\r\n texture.generateMipMaps = transcodeResult.fileInfo.images[i].levels.length > 1;\r\n\r\n const format = BasisTools.GetInternalFormatFromBasisFormat(transcodeResult.format, engine);\r\n texture.format = format;\r\n\r\n BindTexture(texture, engine);\r\n\r\n // Upload all mip levels in the file\r\n const levels = transcodeResult.fileInfo.images[i].levels;\r\n\r\n for (let index = 0; index < levels.length; index++) {\r\n const level = levels[index];\r\n engine._uploadCompressedDataToTextureDirectly(texture, format, level.width, level.height, level.transcodedPixels, i, index);\r\n }\r\n\r\n if (engine._features.basisNeedsPOT && (Math.log2(texture.width) % 1 !== 0 || Math.log2(texture.height) % 1 !== 0)) {\r\n Tools.Warn(\r\n \"Loaded .basis texture width and height are not a power of two. Texture wrapping will be set to Texture.CLAMP_ADDRESSMODE as other modes are not supported with non power of two dimensions in webGL 1.\"\r\n );\r\n texture._cachedWrapU = Texture.CLAMP_ADDRESSMODE;\r\n texture._cachedWrapV = Texture.CLAMP_ADDRESSMODE;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Used to load .Basis files\r\n * See https://github.com/BinomialLLC/basis_universal/tree/master/webgl\r\n */\r\nexport const BasisTools = {\r\n /**\r\n * URL to use when loading the basis transcoder\r\n */\r\n JSModuleURL: BasisToolsOptions.JSModuleURL,\r\n /**\r\n * URL to use when loading the wasm module for the transcoder\r\n */\r\n WasmModuleURL: BasisToolsOptions.WasmModuleURL,\r\n\r\n /**\r\n * Get the internal format to be passed to texImage2D corresponding to the .basis format value\r\n * @param basisFormat format chosen from GetSupportedTranscodeFormat\r\n * @returns internal format corresponding to the Basis format\r\n */\r\n GetInternalFormatFromBasisFormat,\r\n\r\n /**\r\n * Transcodes a loaded image file to compressed pixel data\r\n * @param data image data to transcode\r\n * @param config configuration options for the transcoding\r\n * @returns a promise resulting in the transcoded image\r\n */\r\n TranscodeAsync,\r\n\r\n /**\r\n * Loads a texture from the transcode result\r\n * @param texture texture load to\r\n * @param transcodeResult the result of transcoding the basis file to load from\r\n */\r\n LoadTextureFromTranscodeResult,\r\n};\r\n\r\nObject.defineProperty(BasisTools, \"JSModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.JSModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.JSModuleURL = value;\r\n },\r\n});\r\n\r\nObject.defineProperty(BasisTools, \"WasmModuleURL\", {\r\n get: function (this: null) {\r\n return BasisToolsOptions.WasmModuleURL;\r\n },\r\n set: function (this: null, value: string) {\r\n BasisToolsOptions.WasmModuleURL = value;\r\n },\r\n});\r\n"]}
@@ -47,6 +47,7 @@ export function workerFunction() {
47
47
  });
48
48
  }
49
49
  if (transcoderModulePromise !== null) {
50
+ // eslint-disable-next-line github/no-then
50
51
  transcoderModulePromise.then((m) => {
51
52
  BASIS = m;
52
53
  m.initializeBasis();
@@ -232,13 +233,14 @@ export function workerFunction() {
232
233
  */
233
234
  // eslint-disable-next-line no-restricted-syntax
234
235
  export async function initializeWebWorker(worker, wasmBinary, moduleUrl) {
235
- return new Promise((res, reject) => {
236
+ return await new Promise((res, reject) => {
236
237
  const initHandler = (msg) => {
237
238
  if (msg.data.action === "init") {
238
239
  worker.removeEventListener("message", initHandler);
239
240
  res(worker);
240
241
  }
241
242
  else if (msg.data.action === "error") {
243
+ // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
242
244
  reject(msg.data.error || "error initializing worker");
243
245
  }
244
246
  };