@babylonjs/core 5.0.0-beta.4 → 5.0.0-beta.8

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 (705) hide show
  1. package/Actions/actionManager.d.ts +1 -1
  2. package/Actions/actionManager.js +5 -1
  3. package/Actions/actionManager.js.map +1 -1
  4. package/Animations/animation.d.ts +2 -2
  5. package/Animations/animation.js +5 -1
  6. package/Animations/animation.js.map +1 -1
  7. package/Audio/analyser.d.ts +2 -1
  8. package/Audio/analyser.js +5 -0
  9. package/Audio/analyser.js.map +1 -1
  10. package/Audio/audioSceneComponent.d.ts +1 -1
  11. package/Audio/audioSceneComponent.js +5 -0
  12. package/Audio/audioSceneComponent.js.map +1 -1
  13. package/Audio/sound.d.ts +1 -1
  14. package/Audio/sound.js +8 -1
  15. package/Audio/sound.js.map +1 -1
  16. package/Audio/soundTrack.d.ts +2 -1
  17. package/Audio/soundTrack.js +5 -0
  18. package/Audio/soundTrack.js.map +1 -1
  19. package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
  20. package/BakedVertexAnimation/bakedVertexAnimationManager.js +5 -0
  21. package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
  22. package/Behaviors/Meshes/baseSixDofDragBehavior.js +29 -26
  23. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  24. package/Behaviors/Meshes/pointerDragBehavior.js +2 -0
  25. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  26. package/Bones/bone.d.ts +2 -1
  27. package/Bones/bone.js +28 -18
  28. package/Bones/bone.js.map +1 -1
  29. package/Bones/skeleton.d.ts +0 -6
  30. package/Bones/skeleton.js +5 -17
  31. package/Bones/skeleton.js.map +1 -1
  32. package/Buffers/buffer.d.ts +4 -0
  33. package/Buffers/buffer.js +13 -3
  34. package/Buffers/buffer.js.map +1 -1
  35. package/Cameras/Inputs/freeCameraMouseInput.d.ts +1 -0
  36. package/Cameras/Inputs/freeCameraMouseInput.js +6 -3
  37. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  38. package/Cameras/Inputs/freeCameraTouchInput.js +2 -4
  39. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  40. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.d.ts +1 -1
  41. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
  42. package/Cameras/Stereoscopic/anaglyphFreeCamera.d.ts +1 -1
  43. package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
  44. package/Cameras/Stereoscopic/anaglyphGamepadCamera.d.ts +1 -1
  45. package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
  46. package/Cameras/Stereoscopic/anaglyphUniversalCamera.d.ts +1 -1
  47. package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
  48. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.d.ts +1 -1
  49. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
  50. package/Cameras/Stereoscopic/stereoscopicFreeCamera.d.ts +1 -1
  51. package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
  52. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.d.ts +1 -1
  53. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
  54. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +1 -1
  55. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  56. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.d.ts +1 -1
  57. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
  58. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.d.ts +1 -1
  59. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  60. package/Cameras/VR/vrDeviceOrientationFreeCamera.d.ts +1 -1
  61. package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
  62. package/Cameras/VR/vrDeviceOrientationGamepadCamera.d.ts +1 -1
  63. package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
  64. package/Cameras/VR/vrExperienceHelper.d.ts +1 -0
  65. package/Cameras/VR/vrExperienceHelper.js +1 -0
  66. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  67. package/Cameras/VR/webVRCamera.d.ts +2 -1
  68. package/Cameras/VR/webVRCamera.js +3 -2
  69. package/Cameras/VR/webVRCamera.js.map +1 -1
  70. package/Cameras/arcRotateCamera.d.ts +1 -1
  71. package/Cameras/arcRotateCamera.js.map +1 -1
  72. package/Cameras/camera.d.ts +1 -1
  73. package/Cameras/camera.js +1 -1
  74. package/Cameras/camera.js.map +1 -1
  75. package/Cameras/deviceOrientationCamera.d.ts +1 -1
  76. package/Cameras/deviceOrientationCamera.js.map +1 -1
  77. package/Cameras/flyCamera.d.ts +1 -1
  78. package/Cameras/flyCamera.js.map +1 -1
  79. package/Cameras/followCamera.d.ts +1 -1
  80. package/Cameras/followCamera.js.map +1 -1
  81. package/Cameras/freeCamera.d.ts +1 -1
  82. package/Cameras/freeCamera.js.map +1 -1
  83. package/Cameras/gamepadCamera.d.ts +1 -1
  84. package/Cameras/gamepadCamera.js.map +1 -1
  85. package/Cameras/targetCamera.d.ts +1 -1
  86. package/Cameras/targetCamera.js.map +1 -1
  87. package/Cameras/touchCamera.d.ts +1 -1
  88. package/Cameras/touchCamera.js.map +1 -1
  89. package/Cameras/universalCamera.d.ts +1 -1
  90. package/Cameras/universalCamera.js.map +1 -1
  91. package/Cameras/virtualJoysticksCamera.d.ts +1 -1
  92. package/Cameras/virtualJoysticksCamera.js.map +1 -1
  93. package/Collisions/collider.d.ts +1 -1
  94. package/Collisions/collider.js +48 -2
  95. package/Collisions/collider.js.map +1 -1
  96. package/Compat/compatibilityOptions.d.ts +9 -0
  97. package/Compat/compatibilityOptions.js +14 -0
  98. package/Compat/compatibilityOptions.js.map +1 -0
  99. package/Compat/index.d.ts +1 -0
  100. package/Compat/index.js +2 -0
  101. package/Compat/index.js.map +1 -0
  102. package/Compute/computeEffect.js +2 -2
  103. package/Compute/computeEffect.js.map +1 -1
  104. package/Culling/Octrees/octreeSceneComponent.d.ts +1 -1
  105. package/Culling/Octrees/octreeSceneComponent.js +5 -0
  106. package/Culling/Octrees/octreeSceneComponent.js.map +1 -1
  107. package/Culling/ray.js +2 -2
  108. package/Culling/ray.js.map +1 -1
  109. package/Debug/axesViewer.d.ts +1 -1
  110. package/Debug/axesViewer.js +5 -0
  111. package/Debug/axesViewer.js.map +1 -1
  112. package/Debug/debugLayer.d.ts +1 -1
  113. package/Debug/debugLayer.js +6 -2
  114. package/Debug/debugLayer.js.map +1 -1
  115. package/Debug/physicsViewer.d.ts +1 -1
  116. package/Debug/physicsViewer.js +3 -0
  117. package/Debug/physicsViewer.js.map +1 -1
  118. package/Debug/skeletonViewer.js +3 -4
  119. package/Debug/skeletonViewer.js.map +1 -1
  120. package/DeviceInput/Helpers/eventFactory.js +2 -5
  121. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  122. package/DeviceInput/InputDevices/deviceEnums.d.ts +55 -2
  123. package/DeviceInput/InputDevices/deviceEnums.js +54 -0
  124. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  125. package/DeviceInput/InputDevices/deviceTypes.d.ts +2 -2
  126. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  127. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +1 -0
  128. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -1
  129. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js +3 -2
  130. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -1
  131. package/DeviceInput/InputDevices/webDeviceInputSystem.js +38 -82
  132. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
  133. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  134. package/Engines/Extensions/engine.cubeTexture.js +6 -2
  135. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  136. package/Engines/Extensions/engine.multiview.d.ts +5 -0
  137. package/Engines/Extensions/engine.multiview.js +4 -2
  138. package/Engines/Extensions/engine.multiview.js.map +1 -1
  139. package/Engines/Native/nativeInterfaces.d.ts +2 -1
  140. package/Engines/Native/nativeInterfaces.js.map +1 -1
  141. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  142. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  143. package/Engines/Processors/shaderCodeInliner.js +13 -13
  144. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  145. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  146. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  147. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +4 -1
  148. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  149. package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
  150. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  151. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +1 -1
  152. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  153. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  154. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  155. package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
  156. package/Engines/WebGPU/webgpuConstants.js +1 -0
  157. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  158. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
  159. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  160. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
  161. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  162. package/Engines/WebGPU/webgpuTextureHelper.js +18 -11
  163. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  164. package/Engines/engine.d.ts +47 -27
  165. package/Engines/engine.js +1 -1
  166. package/Engines/engine.js.map +1 -1
  167. package/Engines/engineCapabilities.d.ts +2 -0
  168. package/Engines/engineCapabilities.js.map +1 -1
  169. package/Engines/nativeEngine.d.ts +1 -0
  170. package/Engines/nativeEngine.js +39 -13
  171. package/Engines/nativeEngine.js.map +1 -1
  172. package/Engines/nullEngine.js +3 -2
  173. package/Engines/nullEngine.js.map +1 -1
  174. package/Engines/renderTargetWrapper.d.ts +8 -0
  175. package/Engines/renderTargetWrapper.js +20 -0
  176. package/Engines/renderTargetWrapper.js.map +1 -1
  177. package/Engines/thinEngine.d.ts +7 -0
  178. package/Engines/thinEngine.js +27 -9
  179. package/Engines/thinEngine.js.map +1 -1
  180. package/Engines/webgpuEngine.js +37 -25
  181. package/Engines/webgpuEngine.js.map +1 -1
  182. package/Events/keyboardEvents.d.ts +7 -1
  183. package/Events/keyboardEvents.js +11 -1
  184. package/Events/keyboardEvents.js.map +1 -1
  185. package/Gamepads/Controllers/daydreamController.js +1 -1
  186. package/Gamepads/Controllers/daydreamController.js.map +1 -1
  187. package/Gamepads/Controllers/oculusTouchController.js +2 -2
  188. package/Gamepads/Controllers/oculusTouchController.js.map +1 -1
  189. package/Gamepads/Controllers/webVRController.d.ts +1 -0
  190. package/Gamepads/Controllers/webVRController.js +1 -0
  191. package/Gamepads/Controllers/webVRController.js.map +1 -1
  192. package/Gamepads/gamepadManager.js +1 -1
  193. package/Gamepads/gamepadManager.js.map +1 -1
  194. package/Gizmos/boundingBoxGizmo.js +0 -10
  195. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  196. package/Gizmos/gizmo.js +1 -1
  197. package/Gizmos/gizmo.js.map +1 -1
  198. package/Gizmos/gizmoManager.d.ts +2 -0
  199. package/Gizmos/gizmoManager.js +28 -24
  200. package/Gizmos/gizmoManager.js.map +1 -1
  201. package/Helpers/sceneHelpers.d.ts +1 -0
  202. package/Helpers/sceneHelpers.js.map +1 -1
  203. package/Inputs/scene.inputManager.d.ts +1 -1
  204. package/Inputs/scene.inputManager.js +8 -7
  205. package/Inputs/scene.inputManager.js.map +1 -1
  206. package/Instrumentation/sceneInstrumentation.js +2 -2
  207. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  208. package/Layers/effectLayer.d.ts +1 -1
  209. package/Layers/effectLayer.js +1 -1
  210. package/Layers/effectLayer.js.map +1 -1
  211. package/Layers/effectLayerSceneComponent.d.ts +1 -1
  212. package/Layers/effectLayerSceneComponent.js +7 -3
  213. package/Layers/effectLayerSceneComponent.js.map +1 -1
  214. package/Layers/glowLayer.d.ts +1 -1
  215. package/Layers/glowLayer.js.map +1 -1
  216. package/Layers/highlightLayer.d.ts +1 -1
  217. package/Layers/highlightLayer.js +2 -1
  218. package/Layers/highlightLayer.js.map +1 -1
  219. package/Layers/layer.d.ts +2 -2
  220. package/Layers/layer.js.map +1 -1
  221. package/Layers/layerSceneComponent.d.ts +1 -1
  222. package/Layers/layerSceneComponent.js +7 -3
  223. package/Layers/layerSceneComponent.js.map +1 -1
  224. package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
  225. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  226. package/Lights/Shadows/shadowGenerator.js +7 -7
  227. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  228. package/Loading/Plugins/babylonFileLoader.js +79 -36
  229. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  230. package/Loading/loadingScreen.js +8 -8
  231. package/Loading/loadingScreen.js.map +1 -1
  232. package/Loading/sceneLoader.js +3 -3
  233. package/Loading/sceneLoader.js.map +1 -1
  234. package/Materials/Background/backgroundMaterial.d.ts +1 -1
  235. package/Materials/Background/backgroundMaterial.js.map +1 -1
  236. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
  237. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
  238. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
  239. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
  240. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  241. package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
  242. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  243. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +13 -13
  244. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  245. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  246. package/Materials/Node/Blocks/Dual/index.js +1 -0
  247. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  248. package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
  249. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  250. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +28 -28
  251. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  252. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  253. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  254. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
  255. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  256. package/Materials/Node/Blocks/Dual/textureBlock.js +32 -32
  257. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  258. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  259. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  260. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  261. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  262. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  263. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  264. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
  265. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  266. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
  267. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  268. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
  269. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  270. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  271. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  272. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
  273. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  274. package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
  275. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  276. package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
  277. package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
  278. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  279. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
  280. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  281. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
  282. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  283. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
  284. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  285. package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
  286. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  287. package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
  288. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  289. package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
  290. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  291. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  292. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  293. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
  294. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
  296. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  298. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  299. package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
  300. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  301. package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
  302. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  303. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
  304. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  305. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
  306. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  307. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
  308. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  309. package/Materials/Node/Blocks/addBlock.js +1 -1
  310. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  311. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  312. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  313. package/Materials/Node/Blocks/clampBlock.js +3 -3
  314. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  315. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  316. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  317. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  318. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  319. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  320. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  321. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  322. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  323. package/Materials/Node/Blocks/crossBlock.js +1 -1
  324. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  325. package/Materials/Node/Blocks/customBlock.js +1 -1
  326. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  327. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  328. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  329. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  330. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  331. package/Materials/Node/Blocks/divideBlock.js +1 -1
  332. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  333. package/Materials/Node/Blocks/dotBlock.js +1 -1
  334. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  335. package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
  336. package/Materials/Node/Blocks/elbowBlock.js +60 -0
  337. package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
  338. package/Materials/Node/Blocks/fresnelBlock.js +2 -2
  339. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  340. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  341. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  342. package/Materials/Node/Blocks/index.d.ts +1 -0
  343. package/Materials/Node/Blocks/index.js +1 -0
  344. package/Materials/Node/Blocks/index.js.map +1 -1
  345. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  346. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  347. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  348. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  349. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  350. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  351. package/Materials/Node/Blocks/maxBlock.js +1 -1
  352. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  353. package/Materials/Node/Blocks/minBlock.js +1 -1
  354. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  355. package/Materials/Node/Blocks/modBlock.js +1 -1
  356. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  357. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  358. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  359. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  360. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  361. package/Materials/Node/Blocks/negateBlock.js +1 -1
  362. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  363. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  364. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  365. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  366. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  367. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  368. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  369. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  370. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  371. package/Materials/Node/Blocks/powBlock.js +1 -1
  372. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  373. package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
  374. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  375. package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
  376. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  377. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  378. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  379. package/Materials/Node/Blocks/refractBlock.js +1 -1
  380. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  381. package/Materials/Node/Blocks/remapBlock.js +3 -3
  382. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  383. package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
  384. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  385. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  386. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  387. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  388. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  389. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  390. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  391. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  392. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  393. package/Materials/Node/Blocks/stepBlock.js +1 -1
  394. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  395. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  396. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  397. package/Materials/Node/Blocks/transformBlock.js +13 -13
  398. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  399. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  400. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  401. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  402. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  403. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  404. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  405. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  406. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  407. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  408. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  409. package/Materials/Node/Blocks/waveBlock.js +3 -3
  410. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  411. package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
  412. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  413. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  414. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  415. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  416. package/Materials/Node/nodeMaterial.d.ts +4 -0
  417. package/Materials/Node/nodeMaterial.js +22 -11
  418. package/Materials/Node/nodeMaterial.js.map +1 -1
  419. package/Materials/Node/nodeMaterialBlock.js +12 -12
  420. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  421. package/Materials/Node/nodeMaterialBuildState.js +24 -24
  422. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  423. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  424. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  425. package/Materials/PBR/pbrBaseMaterial.d.ts +2 -1
  426. package/Materials/PBR/pbrBaseMaterial.js +4 -3
  427. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  428. package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +1 -1
  429. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  430. package/Materials/PBR/pbrMaterial.d.ts +1 -1
  431. package/Materials/PBR/pbrMaterial.js +2 -3
  432. package/Materials/PBR/pbrMaterial.js.map +1 -1
  433. package/Materials/PBR/pbrMetallicRoughnessMaterial.d.ts +1 -1
  434. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  435. package/Materials/PBR/pbrSpecularGlossinessMaterial.d.ts +1 -1
  436. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  437. package/Materials/Textures/Loaders/ddsTextureLoader.js +8 -1
  438. package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
  439. package/Materials/Textures/Loaders/ktxTextureLoader.js +2 -2
  440. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  441. package/Materials/Textures/MultiviewRenderTarget.d.ts +2 -1
  442. package/Materials/Textures/MultiviewRenderTarget.js +10 -2
  443. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  444. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  445. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  446. package/Materials/Textures/baseTexture.d.ts +1 -1
  447. package/Materials/Textures/baseTexture.js.map +1 -1
  448. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  449. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  450. package/Materials/Textures/internalTexture.d.ts +2 -0
  451. package/Materials/Textures/internalTexture.js +2 -0
  452. package/Materials/Textures/internalTexture.js.map +1 -1
  453. package/Materials/Textures/mirrorTexture.d.ts +2 -2
  454. package/Materials/Textures/mirrorTexture.js +7 -3
  455. package/Materials/Textures/mirrorTexture.js.map +1 -1
  456. package/Materials/Textures/multiRenderTarget.d.ts +1 -1
  457. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  458. package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
  459. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  460. package/Materials/Textures/refractionTexture.d.ts +1 -1
  461. package/Materials/Textures/refractionTexture.js +2 -2
  462. package/Materials/Textures/refractionTexture.js.map +1 -1
  463. package/Materials/Textures/renderTargetTexture.d.ts +1 -1
  464. package/Materials/Textures/renderTargetTexture.js +2 -2
  465. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  466. package/Materials/Textures/texture.d.ts +1 -1
  467. package/Materials/Textures/texture.js +5 -5
  468. package/Materials/Textures/texture.js.map +1 -1
  469. package/Materials/Textures/videoTexture.js +1 -0
  470. package/Materials/Textures/videoTexture.js.map +1 -1
  471. package/Materials/effect.js +3 -3
  472. package/Materials/effect.js.map +1 -1
  473. package/Materials/material.d.ts +3 -1
  474. package/Materials/material.js +11 -3
  475. package/Materials/material.js.map +1 -1
  476. package/Materials/materialHelper.js +9 -1
  477. package/Materials/materialHelper.js.map +1 -1
  478. package/Materials/materialPluginManager.js +3 -3
  479. package/Materials/materialPluginManager.js.map +1 -1
  480. package/Materials/multiMaterial.d.ts +3 -1
  481. package/Materials/multiMaterial.js +13 -11
  482. package/Materials/multiMaterial.js.map +1 -1
  483. package/Materials/pushMaterial.d.ts +1 -1
  484. package/Materials/pushMaterial.js.map +1 -1
  485. package/Materials/shaderMaterial.js +8 -4
  486. package/Materials/shaderMaterial.js.map +1 -1
  487. package/Materials/shadowDepthWrapper.d.ts +1 -1
  488. package/Materials/shadowDepthWrapper.js +3 -3
  489. package/Materials/shadowDepthWrapper.js.map +1 -1
  490. package/Materials/standardMaterial.d.ts +2 -6
  491. package/Materials/standardMaterial.js +5 -10
  492. package/Materials/standardMaterial.js.map +1 -1
  493. package/Maths/math.size.js +1 -1
  494. package/Maths/math.size.js.map +1 -1
  495. package/Maths/math.vector.d.ts +4 -2
  496. package/Maths/math.vector.js +34 -32
  497. package/Maths/math.vector.js.map +1 -1
  498. package/Meshes/Builders/boxBuilder.js +5 -4
  499. package/Meshes/Builders/boxBuilder.js.map +1 -1
  500. package/Meshes/Builders/capsuleBuilder.js +4 -3
  501. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  502. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  503. package/Meshes/Builders/cylinderBuilder.js +11 -8
  504. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  505. package/Meshes/Builders/decalBuilder.js +5 -2
  506. package/Meshes/Builders/decalBuilder.js.map +1 -1
  507. package/Meshes/Builders/discBuilder.js +3 -2
  508. package/Meshes/Builders/discBuilder.js.map +1 -1
  509. package/Meshes/Builders/goldbergBuilder.js +10 -1
  510. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  511. package/Meshes/Builders/groundBuilder.js +2 -1
  512. package/Meshes/Builders/groundBuilder.js.map +1 -1
  513. package/Meshes/Builders/icoSphereBuilder.js +2 -1
  514. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  515. package/Meshes/Builders/linesBuilder.js.map +1 -1
  516. package/Meshes/Builders/planeBuilder.js +5 -4
  517. package/Meshes/Builders/planeBuilder.js.map +1 -1
  518. package/Meshes/Builders/polygonBuilder.js +6 -2
  519. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  520. package/Meshes/Builders/polyhedronBuilder.js +3 -2
  521. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  522. package/Meshes/Builders/ribbonBuilder.js +4 -3
  523. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  524. package/Meshes/Builders/sphereBuilder.js +2 -1
  525. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  526. package/Meshes/Builders/tiledBoxBuilder.js +4 -0
  527. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  528. package/Meshes/Builders/torusBuilder.js +2 -1
  529. package/Meshes/Builders/torusBuilder.js.map +1 -1
  530. package/Meshes/Builders/torusKnotBuilder.js +2 -1
  531. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  532. package/Meshes/Compression/dracoCompression.d.ts +3 -0
  533. package/Meshes/Compression/dracoCompression.js +23 -7
  534. package/Meshes/Compression/dracoCompression.js.map +1 -1
  535. package/Meshes/abstractMesh.d.ts +10 -2
  536. package/Meshes/abstractMesh.js +39 -33
  537. package/Meshes/abstractMesh.js.map +1 -1
  538. package/Meshes/geometry.d.ts +1 -1
  539. package/Meshes/geometry.js +38 -3
  540. package/Meshes/geometry.js.map +1 -1
  541. package/Meshes/groundMesh.d.ts +1 -1
  542. package/Meshes/groundMesh.js.map +1 -1
  543. package/Meshes/instancedMesh.js +5 -6
  544. package/Meshes/instancedMesh.js.map +1 -1
  545. package/Meshes/mesh.d.ts +1 -1
  546. package/Meshes/mesh.js +39 -35
  547. package/Meshes/mesh.js.map +1 -1
  548. package/Meshes/mesh.lts.d.ts +1 -1
  549. package/Meshes/mesh.lts.js.map +1 -1
  550. package/Meshes/mesh.vertexData.d.ts +1 -1
  551. package/Meshes/mesh.vertexData.js +2 -2
  552. package/Meshes/mesh.vertexData.js.map +1 -1
  553. package/Meshes/polygonMesh.js +2 -2
  554. package/Meshes/polygonMesh.js.map +1 -1
  555. package/Meshes/subMesh.js +1 -2
  556. package/Meshes/subMesh.js.map +1 -1
  557. package/Meshes/subMesh.project.js +1 -2
  558. package/Meshes/subMesh.project.js.map +1 -1
  559. package/Meshes/thinInstanceMesh.js +5 -0
  560. package/Meshes/thinInstanceMesh.js.map +1 -1
  561. package/Meshes/trailMesh.d.ts +1 -1
  562. package/Meshes/trailMesh.js.map +1 -1
  563. package/Meshes/transformNode.js +40 -13
  564. package/Meshes/transformNode.js.map +1 -1
  565. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.d.ts +5 -0
  566. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +13 -2
  567. package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
  568. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js +6 -12
  569. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  570. package/Misc/PerformanceViewer/performanceViewerCollector.js +6 -6
  571. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  572. package/Misc/assetsManager.d.ts +2 -1
  573. package/Misc/assetsManager.js +15 -1
  574. package/Misc/assetsManager.js.map +1 -1
  575. package/Misc/basis.js +1 -1
  576. package/Misc/basis.js.map +1 -1
  577. package/Misc/brdfTextureTools.js +4 -1
  578. package/Misc/brdfTextureTools.js.map +1 -1
  579. package/Misc/dds.js +7 -0
  580. package/Misc/dds.js.map +1 -1
  581. package/Misc/decorators.js +7 -0
  582. package/Misc/decorators.js.map +1 -1
  583. package/Misc/deepCopier.js +3 -3
  584. package/Misc/deepCopier.js.map +1 -1
  585. package/Misc/devTools.js +1 -1
  586. package/Misc/devTools.js.map +1 -1
  587. package/Misc/environmentTextureTools.js +2 -2
  588. package/Misc/environmentTextureTools.js.map +1 -1
  589. package/Misc/fileTools.js +3 -3
  590. package/Misc/fileTools.js.map +1 -1
  591. package/Misc/khronosTextureContainer2.js +4 -3
  592. package/Misc/khronosTextureContainer2.js.map +1 -1
  593. package/Misc/reflector.js +6 -6
  594. package/Misc/reflector.js.map +1 -1
  595. package/Misc/tools.js +15 -13
  596. package/Misc/tools.js.map +1 -1
  597. package/Misc/uniqueIdGenerator.js +1 -1
  598. package/Misc/uniqueIdGenerator.js.map +1 -1
  599. package/Offline/database.js +1 -1
  600. package/Offline/database.js.map +1 -1
  601. package/Particles/baseParticleSystem.d.ts +4 -1
  602. package/Particles/baseParticleSystem.js +20 -5
  603. package/Particles/baseParticleSystem.js.map +1 -1
  604. package/Particles/particleHelper.js +2 -2
  605. package/Particles/particleHelper.js.map +1 -1
  606. package/Physics/Plugins/ammoJSPlugin.js +4 -4
  607. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  608. package/Physics/physicsImpostor.d.ts +2 -2
  609. package/Physics/physicsImpostor.js.map +1 -1
  610. package/PostProcesses/blurPostProcess.js +5 -5
  611. package/PostProcesses/blurPostProcess.js.map +1 -1
  612. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  613. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  614. package/PostProcesses/postProcess.js +1 -1
  615. package/PostProcesses/postProcess.js.map +1 -1
  616. package/PostProcesses/postProcessManager.js +2 -2
  617. package/PostProcesses/postProcessManager.js.map +1 -1
  618. package/Probes/reflectionProbe.js +2 -2
  619. package/Probes/reflectionProbe.js.map +1 -1
  620. package/Rendering/depthPeelingRenderer.js +3 -3
  621. package/Rendering/depthPeelingRenderer.js.map +1 -1
  622. package/Rendering/geometryBufferRenderer.js +8 -8
  623. package/Rendering/geometryBufferRenderer.js.map +1 -1
  624. package/Rendering/outlineRenderer.js +1 -1
  625. package/Rendering/outlineRenderer.js.map +1 -1
  626. package/Rendering/utilityLayerRenderer.js +4 -0
  627. package/Rendering/utilityLayerRenderer.js.map +1 -1
  628. package/Shaders/ShadersInclude/instancesDeclaration.js +1 -1
  629. package/Shaders/ShadersInclude/instancesDeclaration.js.map +1 -1
  630. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js +1 -1
  631. package/Shaders/ShadersInclude/pbrBlockAlbedoOpacity.js.map +1 -1
  632. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js +1 -1
  633. package/Shaders/ShadersInclude/pbrFragmentExtraDeclaration.js.map +1 -1
  634. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  635. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  636. package/Shaders/color.fragment.js +1 -1
  637. package/Shaders/color.fragment.js.map +1 -1
  638. package/Shaders/color.vertex.js +1 -1
  639. package/Shaders/color.vertex.js.map +1 -1
  640. package/Shaders/default.fragment.js +1 -1
  641. package/Shaders/default.fragment.js.map +1 -1
  642. package/Shaders/default.vertex.js +1 -1
  643. package/Shaders/default.vertex.js.map +1 -1
  644. package/Shaders/geometry.vertex.js +1 -1
  645. package/Shaders/geometry.vertex.js.map +1 -1
  646. package/Shaders/pbr.vertex.js +1 -1
  647. package/Shaders/pbr.vertex.js.map +1 -1
  648. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js +1 -1
  649. package/ShadersWGSL/ShadersInclude/instancesDeclaration.js.map +1 -1
  650. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  651. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  652. package/Sprites/spriteManager.js +9 -10
  653. package/Sprites/spriteManager.js.map +1 -1
  654. package/Sprites/spriteMap.js +2 -2
  655. package/Sprites/spriteMap.js.map +1 -1
  656. package/Sprites/spriteRenderer.js +1 -1
  657. package/Sprites/spriteRenderer.js.map +1 -1
  658. package/XR/features/WebXRDOMOverlay.js +1 -1
  659. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  660. package/XR/features/WebXRHandTracking.js +30 -30
  661. package/XR/features/WebXRHandTracking.js.map +1 -1
  662. package/XR/features/WebXRImageTracking.js +2 -2
  663. package/XR/features/WebXRImageTracking.js.map +1 -1
  664. package/XR/features/WebXRLayers.d.ts +28 -5
  665. package/XR/features/WebXRLayers.js +54 -20
  666. package/XR/features/WebXRLayers.js.map +1 -1
  667. package/XR/features/WebXRNearInteraction.d.ts +35 -3
  668. package/XR/features/WebXRNearInteraction.js +201 -40
  669. package/XR/features/WebXRNearInteraction.js.map +1 -1
  670. package/XR/motionController/webXRAbstractMotionController.js +1 -1
  671. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  672. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  673. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  674. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  675. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  676. package/XR/webXRCamera.js +17 -4
  677. package/XR/webXRCamera.js.map +1 -1
  678. package/XR/webXRDefaultExperience.js +3 -0
  679. package/XR/webXRDefaultExperience.js.map +1 -1
  680. package/XR/webXREnterExitUI.js +2 -2
  681. package/XR/webXREnterExitUI.js.map +1 -1
  682. package/XR/webXRExperienceHelper.js +3 -2
  683. package/XR/webXRExperienceHelper.js.map +1 -1
  684. package/XR/webXRFeaturesManager.js +6 -6
  685. package/XR/webXRFeaturesManager.js.map +1 -1
  686. package/XR/webXRInputSource.js +3 -3
  687. package/XR/webXRInputSource.js.map +1 -1
  688. package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
  689. package/XR/webXRRenderTargetTextureProvider.js +37 -18
  690. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  691. package/XR/webXRSessionManager.d.ts +1 -0
  692. package/XR/webXRSessionManager.js +6 -1
  693. package/XR/webXRSessionManager.js.map +1 -1
  694. package/assetContainer.d.ts +1 -1
  695. package/assetContainer.js +5 -4
  696. package/assetContainer.js.map +1 -1
  697. package/index.d.ts +1 -0
  698. package/index.js +1 -0
  699. package/index.js.map +1 -1
  700. package/node.d.ts +1 -1
  701. package/node.js.map +1 -1
  702. package/package.json +13 -1
  703. package/scene.d.ts +3 -1
  704. package/scene.js +38 -13
  705. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"fileTools.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/fileTools.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAItD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,IAAM,kBAAkB,GAAG,IAAI,MAAM,CAAC,gCAAgC,CAAC,CAAC;AAExE,cAAc;AACd;IAAmC,iCAAS;IAIxC;;;;;OAKG;IACH,uBAAY,OAAe,EAAE,MAA0B;QAAvD,YACI,kBAAM,OAAO,CAAC,SAWjB;QATG,KAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,SAAS,CAAC,eAAe,CAAC,KAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QAEzD,IAAI,MAAM,YAAY,UAAU,EAAE;YAC9B,KAAI,CAAC,OAAO,GAAG,MAAM,CAAC;SACzB;aACI;YACD,KAAI,CAAC,IAAI,GAAG,MAAM,CAAC;SACtB;;IACL,CAAC;IACL,oBAAC;AAAD,CAAC,AAvBD,CAAmC,SAAS,GAuB3C;;AAED,cAAc;AACd;IAAsC,oCAAS;IAC3C;;;;OAIG;IACH,0BAAY,OAAe,EAAS,OAAmB;QAAvD,YACI,kBAAM,OAAO,CAAC,SAGjB;QAJmC,aAAO,GAAP,OAAO,CAAY;QAEnD,KAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,SAAS,CAAC,eAAe,CAAC,KAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;;IAChE,CAAC;IACL,uBAAC;AAAD,CAAC,AAXD,CAAsC,SAAS,GAW9C;;AAED,cAAc;AACd;IAAmC,iCAAS;IACxC;;;;OAIG;IACH,uBAAY,OAAe,EAAS,IAAU;QAA9C,YACI,kBAAM,OAAO,CAAC,SAGjB;QAJmC,UAAI,GAAJ,IAAI,CAAM;QAE1C,KAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,SAAS,CAAC,eAAe,CAAC,KAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;;IAC7D,CAAC;IACL,oBAAC;AAAD,CAAC,AAXD,CAAmC,SAAS,GAW3C;;AACD;;GAEG;AACH,MAAM,CAAC,IAAM,gBAAgB,GAKzB;IACA;;;;OAIG;IACH,oBAAoB,EAAE,aAAa,CAAC,kBAAkB,EAAE;IAExD;;OAEG;IACH,OAAO,EAAE,EAAE;IAEX;;;;OAIG;IACH,YAAY,EAAE,WAAW;IAEzB;;OAEG;IACH,aAAa,EAAE,UAAC,GAAW;QACvB,OAAO,GAAG,CAAC;IACf,CAAC;CACJ,CAAC;AAEF;;;;GAIG;AACH,IAAM,SAAS,GAAG,UAAC,GAAW;IAC1B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChC,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,IAAM,eAAe,GAAG,UAAC,GAAsB,EAAE,OAAuC;IAC3F,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACnC,OAAO;KACV;IAED,IAAI,gBAAgB,CAAC,YAAY,EAAE;QAC/B,IAAI,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,QAAQ,IAAI,gBAAgB,CAAC,YAAY,YAAY,MAAM,EAAE;YACxG,OAAO,CAAC,WAAW,GAAW,gBAAgB,CAAC,YAAY,CAAC;SAC/D;aACI;YACD,IAAI,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,MAAM,EAAE;gBACR,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;aAChC;SACJ;KACJ;AACL,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,IAAM,SAAS,GAAG,UAAC,KAAoD,EAAE,MAAqD,EACjI,OAAoD,EAAE,eAA2C,EAAE,QAAqB,EAAE,kBAAuC;;IAA9D,yBAAA,EAAA,aAAqB;IACxH,IAAI,GAAW,CAAC;IAChB,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,IAAI,KAAK,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;QAC3D,IAAI,OAAO,IAAI,KAAK,WAAW,EAAE;YAC7B,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjE,cAAc,GAAG,IAAI,CAAC;SACzB;aAAM;YACH,GAAG,GAAG,UAAQ,QAAQ,aAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;SACvE;KACJ;SACI,IAAI,KAAK,YAAY,IAAI,EAAE;QAC5B,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACjC,cAAc,GAAG,IAAI,CAAC;KACzB;SACI;QACD,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QACvB,GAAG,GAAG,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC/C;IAED,IAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,CAAC;IAE7C,IAAM,cAAc,GAAG,UAAC,SAAc;QAClC,IAAI,OAAO,EAAE;YACT,IAAM,SAAS,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC1C,OAAO,CAAC,uCAAqC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAG,EAAE,SAAS,CAAC,CAAC;SAC3K;IACL,CAAC,CAAC;IAEF,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,CAAC,+BAA+B,mCAAI,KAAK,CAAC,EAAE;QAC9F,QAAQ,CAAC,GAAG,EAAE,UAAC,IAAI;YACf,MAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,aAAI,gBAAgB,EAAE,MAAM,IAAK,kBAAkB,EAAG,CAAC,IAAI,CAAC,UAAC,MAAM;gBAC7H,MAAM,CAAC,MAAM,CAAC,CAAC;gBACf,IAAI,cAAc,EAAE;oBAChB,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;iBAC5B;YACL,CAAC,CAAC,CAAC,KAAK,CAAC,UAAC,MAAM;gBACZ,IAAI,OAAO,EAAE;oBACT,OAAO,CAAC,oCAAoC,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC;iBACjE;YACL,CAAC,CAAC,CAAC;QACP,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI,SAAS,EAAE,IAAI,EAAE,UAAC,OAAO,EAAE,SAAS;YACjE,cAAc,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;KACf;IAED,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;IACtB,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAE1B,IAAM,WAAW,GAAG;QAChB,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7C,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAE/C,MAAM,CAAC,GAAG,CAAC,CAAC;QAEZ,2EAA2E;QAC3E,kDAAkD;QAClD,IAAI,cAAc,IAAI,GAAG,CAAC,GAAG,EAAE;YAC3B,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAChC;IACL,CAAC,CAAC;IAEF,IAAM,YAAY,GAAG,UAAC,GAAQ;QAC1B,GAAG,CAAC,mBAAmB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC7C,GAAG,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAE/C,cAAc,CAAC,GAAG,CAAC,CAAC;QAEpB,IAAI,cAAc,IAAI,GAAG,CAAC,GAAG,EAAE;YAC3B,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAChC;IACL,CAAC,CAAC;IAEF,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAE5C,IAAI,gBAAgB,GAAG;QACnB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,sBAAsB,GAAG;QACzB,IAAI,eAAe,EAAE;YACjB,eAAe,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;SACvC;IACL,CAAC,CAAC;IAEF,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,IAAI,eAAe,IAAI,eAAe,CAAC,qBAAqB,EAAE;QAC1H,eAAe,CAAC,IAAI,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;KAClE;SACI;QACD,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;YAC7B,IAAI,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACrE,IAAI,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;gBAC1C,IAAI;oBACA,IAAI,OAAO,CAAC;oBACZ,IAAI;wBACA,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;qBAC3E;oBACD,OAAO,EAAE,EAAE;wBACP,+CAA+C;wBAC/C,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;qBAC3E;oBACD,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC;oBAClB,cAAc,GAAG,IAAI,CAAC;iBACzB;gBACD,OAAO,CAAC,EAAE;oBACN,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;iBAChB;gBACD,OAAO,GAAG,CAAC;aACd;SACJ;QAED,gBAAgB,EAAE,CAAC;KACtB;IAED,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,IAAM,QAAQ,GAAG,UAAC,IAAU,EAAE,SAA8B,EAAE,UAAuC,EAAE,cAAwB,EAAE,OAAwC;IAC5K,IAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,IAAM,WAAW,GAAiB;QAC9B,oBAAoB,EAAE,IAAI,UAAU,EAAgB;QACpD,KAAK,EAAE,cAAM,OAAA,MAAM,CAAC,KAAK,EAAE,EAAd,CAAc;KAC9B,CAAC;IAEF,MAAM,CAAC,SAAS,GAAG,UAAC,CAAC,IAAK,OAAA,WAAW,CAAC,oBAAoB,CAAC,eAAe,CAAC,WAAW,CAAC,EAA7D,CAA6D,CAAC;IACxF,IAAI,OAAO,EAAE;QACT,MAAM,CAAC,OAAO,GAAG,UAAC,CAAC;YACf,OAAO,CAAC,IAAI,aAAa,CAAC,oBAAkB,IAAI,CAAC,IAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QACpE,CAAC,CAAC;KACL;IACD,MAAM,CAAC,MAAM,GAAG,UAAC,CAAC;QACd,wCAAwC;QACxC,SAAS,CAAO,CAAC,CAAC,MAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC;IACF,IAAI,UAAU,EAAE;QACZ,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;KAClC;IACD,IAAI,CAAC,cAAc,EAAE;QACjB,oBAAoB;QACpB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAC3B;SACI;QACD,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;KAClC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,IAAM,QAAQ,GAAG,UAAC,SAAwB,EAAE,SAAqE,EACpH,UAAwC,EAAE,eAAkC,EAAE,cAAwB,EACtG,OAAmE,EAAE,QAAwC;IAC7G,IAAK,SAAkB,CAAC,IAAI,EAAE;QAC1B,OAAO,QAAQ,CAAE,SAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,UAAC,KAAoB;YACvG,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;KAClB;IAED,IAAM,GAAG,GAAI,SAAoB,CAAC;IAElC,iCAAiC;IACjC,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;QAC7B,IAAI,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAClE,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAC9B,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACpC;QACD,IAAM,IAAI,GAAG,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,IAAI,EAAE;YACN,OAAO,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,UAAC,KAAK,IAAK,OAAA,OAAO,CAAC,SAAS,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAhE,CAAgE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SACnK;KACJ;IAED,wBAAwB;IACxB,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE;QACtB,IAAM,aAAW,GAAiB;YAC9B,oBAAoB,EAAE,IAAI,UAAU,EAAgB;YACpD,KAAK,EAAE,cAAM,OAAA,cAAQ,CAAC,EAAT,CAAS;SACzB,CAAC;QAEF,IAAI;YACA,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC;SAC3F;QAAC,OAAO,KAAK,EAAE;YACZ,IAAI,OAAO,EAAE;gBACT,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;aAC7B;iBAAM;gBACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,8BAA8B,CAAC,CAAC;aACjE;SACJ;QAED,WAAW,CAAC,YAAY,CAAC;YACrB,aAAW,CAAC,oBAAoB,CAAC,eAAe,CAAC,aAAW,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,OAAO,aAAW,CAAC;KACtB;IAED,OAAO,WAAW,CAAC,GAAG,EAAE,UAAC,IAAI,EAAE,OAAO;QAClC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,UAAC,KAAK;QAC5D,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,IAAM,WAAW,GAAG,UAAC,GAAW,EAAE,SAAqE,EAC1G,UAA2C,EAAE,eAAkC,EAAE,cAAwB,EACzG,OAA2C,EAAE,QAAwC;IACrF,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IACrB,GAAG,GAAG,gBAAgB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAE1C,IAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,GAAG,GAAG,CAAC;IAE/C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAM,WAAW,GAAiB;QAC9B,oBAAoB,EAAE,IAAI,UAAU,EAAgB;QACpD,KAAK,EAAE,cAAM,OAAA,OAAO,GAAG,IAAI,EAAd,CAAc;KAC9B,CAAC;IAEF,IAAM,WAAW,GAAG;QAChB,IAAI,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,WAAW,GAAqB,IAAI,CAAC;QAEzC,WAAW,CAAC,KAAK,GAAG;YAChB,OAAO,GAAG,IAAI,CAAC;YAEf,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE;gBACnD,OAAO,CAAC,KAAK,EAAE,CAAC;aACnB;YAED,IAAI,WAAW,KAAK,IAAI,EAAE;gBACtB,YAAY,CAAC,WAAW,CAAC,CAAC;gBAC1B,WAAW,GAAG,IAAI,CAAC;aACtB;QACL,CAAC,CAAC;QAEF,IAAM,WAAW,GAAG,UAAC,KAAU;YAC3B,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,eAAe,CAAC;YACjD,IAAI,OAAO,EAAE;gBACT,OAAO,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;aACnD;iBAAM;gBACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aACzB;QACL,CAAC,CAAC;QAEF,IAAM,SAAS,GAAG,UAAC,UAAkB;YACjC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAE7B,IAAI,QAAQ,EAAE;gBACV,IAAI;oBACA,QAAQ,CAAC,OAAO,CAAC,CAAC;iBACrB;gBAAC,OAAO,CAAC,EAAE;oBACR,WAAW,CAAC,CAAC,CAAC,CAAC;oBACf,OAAO;iBACV;aACJ;YAED,IAAI,cAAc,EAAE;gBAChB,OAAO,CAAC,YAAY,GAAG,aAAa,CAAC;aACxC;YAED,IAAI,UAAU,EAAE;gBACZ,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;aACpD;YAED,IAAM,SAAS,GAAG;gBACd,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;gBAClD,WAAW,CAAC,oBAAoB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBAC9D,WAAW,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;YAC7C,CAAC,CAAC;YAEF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAE/C,IAAM,kBAAkB,GAAG;gBACvB,IAAI,OAAO,EAAE;oBACT,OAAO;iBACV;gBAED,+CAA+C;gBAC/C,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE;oBACnD,uGAAuG;oBACvG,OAAO,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;oBAEpE,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,mBAAmB,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,EAAE;wBACtH,IAAI;4BACA,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;yBAChF;wBAAC,OAAO,CAAC,EAAE;4BACR,WAAW,CAAC,CAAC,CAAC,CAAC;yBAClB;wBACD,OAAO;qBACV;oBAED,IAAI,aAAa,GAAG,gBAAgB,CAAC,oBAAoB,CAAC;oBAC1D,IAAI,aAAa,EAAE;wBACf,IAAI,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;wBAC3D,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE;4BACjB,iDAAiD;4BACjD,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;4BAClD,OAAO,GAAG,IAAI,UAAU,EAAE,CAAC;4BAC3B,WAAW,GAAG,UAAU,CAAC,cAAM,OAAA,SAAS,CAAC,UAAU,GAAG,CAAC,CAAC,EAAzB,CAAyB,EAAE,QAAQ,CAAC,CAAC;4BACpE,OAAO;yBACV;qBACJ;oBAED,IAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,oBAAoB,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC3I,IAAI,OAAO,EAAE;wBACT,OAAO,CAAC,KAAK,CAAC,CAAC;qBAClB;iBACJ;YACL,CAAC,CAAC;YAEF,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;YAEjE,OAAO,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,SAAS,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC;IAEF,oBAAoB;IACpB,IAAI,eAAe,IAAI,eAAe,CAAC,kBAAkB,EAAE;QACvD,IAAM,kBAAgB,GAAG,UAAC,OAAa;YACnC,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE;gBACjC,IAAI,OAAO,EAAE;oBACT,OAAO,CAAC,OAAO,CAAC,CAAC;iBACpB;aACJ;iBAAM;gBACH,WAAW,EAAE,CAAC;aACjB;QACL,CAAC,CAAC;QAEF,IAAM,sBAAsB,GAAG;YAC3B,4EAA4E;YAE5E,IAAI,eAAe,EAAE;gBACjB,eAAe,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,GAAG,GAAG,EAAE,UAAC,IAAI;oBAC1D,IAAI,CAAC,OAAO,EAAE;wBACV,SAAS,CAAC,IAAI,CAAC,CAAC;qBACnB;oBAED,WAAW,CAAC,oBAAoB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;gBAClE,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,UAAC,KAAK;oBAClB,IAAI,CAAC,OAAO,EAAE;wBACV,UAAU,CAAC,KAAK,CAAC,CAAC;qBACrB;gBACL,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,kBAAgB,EAAE,cAAc,CAAC,CAAC;aACpD;QACL,CAAC,CAAC;QAEF,eAAe,CAAC,IAAI,CAAC,sBAAsB,EAAE,kBAAgB,CAAC,CAAC;KAClE;SACI;QACD,WAAW,EAAE,CAAC;KACjB;IAED,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,IAAM,SAAS,GAAG;IACrB,OAAO,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,CAAC;AAC5E,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,IAAM,eAAe,GAAG,UAAC,GAAW;IACvC,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAAW;IAC/C,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,IAAM,uBAAuB,GAAG,UAAC,GAAW;IAC/C,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,IAAM,eAAe,GAAG;IACpB,UAAU,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAC3C,UAAU,CAAC,kBAAkB,GAAG,QAAQ,CAAC;IACzC,eAAe,CAAC,kBAAkB,GAAG,QAAQ,CAAC;AAClD,CAAC,CAAC;AAEF,eAAe,EAAE,CAAC;AAElB,mEAAmE;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,mBAAmB,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC","sourcesContent":["import { WebRequest } from './webRequest';\r\nimport { IsWindowObjectExist } from './domManagement';\r\nimport { Nullable } from '../types';\r\nimport { IOfflineProvider } from '../Offline/IOfflineProvider';\r\nimport { IFileRequest } from './fileRequest';\r\nimport { Observable } from './observable';\r\nimport { FilesInputStore } from './filesInputStore';\r\nimport { RetryStrategy } from './retryStrategy';\r\nimport { BaseError } from './baseError';\r\nimport { DecodeBase64ToBinary, DecodeBase64ToString, EncodeArrayBufferToBase64 } from './stringTools';\r\nimport { ShaderProcessor } from '../Engines/Processors/shaderProcessor';\r\nimport { ThinEngine } from '../Engines/thinEngine';\r\nimport { EngineStore } from '../Engines/engineStore';\r\nimport { Logger } from './logger';\r\nimport { TimingTools } from './timingTools';\r\n\r\nconst base64DataUrlRegEx = new RegExp(/^data:([^,]+\\/[^,]+)?;base64,/i);\r\n\r\n/** @ignore */\r\nexport class LoadFileError extends BaseError {\r\n public request?: WebRequest;\r\n public file?: File;\r\n\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n * @param file defines the optional file\r\n */\r\n constructor(message: string, object?: WebRequest | File) {\r\n super(message);\r\n\r\n this.name = \"LoadFileError\";\r\n BaseError._setPrototypeOf(this, LoadFileError.prototype);\r\n\r\n if (object instanceof WebRequest) {\r\n this.request = object;\r\n }\r\n else {\r\n this.file = object;\r\n }\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class RequestFileError extends BaseError {\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n */\r\n constructor(message: string, public request: WebRequest) {\r\n super(message);\r\n this.name = \"RequestFileError\";\r\n BaseError._setPrototypeOf(this, RequestFileError.prototype);\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class ReadFileError extends BaseError {\r\n /**\r\n * Creates a new ReadFileError\r\n * @param message defines the message of the error\r\n * @param file defines the optional file\r\n */\r\n constructor(message: string, public file: File) {\r\n super(message);\r\n this.name = \"ReadFileError\";\r\n BaseError._setPrototypeOf(this, ReadFileError.prototype);\r\n }\r\n}\r\n/**\r\n * @hidden\r\n */\r\nexport const FileToolsOptions: {\r\n DefaultRetryStrategy: (url: string, request: WebRequest, retryIndex: number) => number;\r\n BaseUrl: string;\r\n CorsBehavior: string | ((url: string | string[]) => string);\r\n PreprocessUrl: (url: string) => string;\r\n} = {\r\n /**\r\n * Gets or sets the retry strategy to apply when an error happens while loading an asset.\r\n * When defining this function, return the wait time before trying again or return -1 to\r\n * stop retrying and error out.\r\n */\r\n DefaultRetryStrategy: RetryStrategy.ExponentialBackoff(),\r\n\r\n /**\r\n * Gets or sets the base URL to use to load assets\r\n */\r\n BaseUrl: \"\",\r\n\r\n /**\r\n * Default behaviour for cors in the application.\r\n * It can be a string if the expected behavior is identical in the entire app.\r\n * Or a callback to be able to set it per url or on a group of them (in case of Video source for instance)\r\n */\r\n CorsBehavior: \"anonymous\",\r\n\r\n /**\r\n * Gets or sets a function used to pre-process url before using them to load assets\r\n */\r\n PreprocessUrl: (url: string) => {\r\n return url;\r\n }\r\n};\r\n\r\n/**\r\n * Removes unwanted characters from an url\r\n * @param url defines the url to clean\r\n * @returns the cleaned url\r\n */\r\nconst _CleanUrl = (url: string): string => {\r\n url = url.replace(/#/mg, \"%23\");\r\n return url;\r\n};\r\n\r\n/**\r\n * Sets the cors behavior on a dom element. This will add the required Tools.CorsBehavior to the element.\r\n * @param url define the url we are trying\r\n * @param element define the dom element where to configure the cors policy\r\n * @hidden\r\n */\r\nexport const SetCorsBehavior = (url: string | string[], element: { crossOrigin: string | null }): void => {\r\n if (url && url.indexOf(\"data:\") === 0) {\r\n return;\r\n }\r\n\r\n if (FileToolsOptions.CorsBehavior) {\r\n if (typeof (FileToolsOptions.CorsBehavior) === 'string' || FileToolsOptions.CorsBehavior instanceof String) {\r\n element.crossOrigin = <string>FileToolsOptions.CorsBehavior;\r\n }\r\n else {\r\n var result = FileToolsOptions.CorsBehavior(url);\r\n if (result) {\r\n element.crossOrigin = result;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Loads an image as an HTMLImageElement.\r\n * @param input url string, ArrayBuffer, or Blob to load\r\n * @param onLoad callback called when the image successfully loads\r\n * @param onError callback called when the image fails to load\r\n * @param offlineProvider offline provider for caching\r\n * @param mimeType optional mime type\r\n * @returns the HTMLImageElement of the loaded image\r\n * @hidden\r\n */\r\nexport const LoadImage = (input: string | ArrayBuffer | ArrayBufferView | Blob, onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string, exception?: any) => void, offlineProvider: Nullable<IOfflineProvider>, mimeType: string = \"\", imageBitmapOptions?: ImageBitmapOptions): Nullable<HTMLImageElement> => {\r\n let url: string;\r\n let usingObjectURL = false;\r\n\r\n if (input instanceof ArrayBuffer || ArrayBuffer.isView(input)) {\r\n if (typeof Blob !== 'undefined') {\r\n url = URL.createObjectURL(new Blob([input], { type: mimeType }));\r\n usingObjectURL = true;\r\n } else {\r\n url = `data:${mimeType};base64,` + EncodeArrayBufferToBase64(input);\r\n }\r\n }\r\n else if (input instanceof Blob) {\r\n url = URL.createObjectURL(input);\r\n usingObjectURL = true;\r\n }\r\n else {\r\n url = _CleanUrl(input);\r\n url = FileToolsOptions.PreprocessUrl(input);\r\n }\r\n\r\n const engine = EngineStore.LastCreatedEngine;\r\n\r\n const onErrorHandler = (exception: any) => {\r\n if (onError) {\r\n const inputText = url || input.toString();\r\n onError(`Error while trying to load image: ${((inputText.indexOf('http') === 0 || inputText.length <= 128) ? inputText : inputText.slice(0, 128) + \"...\")}`, exception);\r\n }\r\n };\r\n\r\n if (typeof Image === \"undefined\" || (engine?._features.forceBitmapOverHTMLImageElement ?? false)) {\r\n LoadFile(url, (data) => {\r\n engine!.createImageBitmap(new Blob([data], { type: mimeType }), { premultiplyAlpha: \"none\", ...imageBitmapOptions }).then((imgBmp) => {\r\n onLoad(imgBmp);\r\n if (usingObjectURL) {\r\n URL.revokeObjectURL(url);\r\n }\r\n }).catch((reason) => {\r\n if (onError) {\r\n onError(\"Error while trying to load image: \" + input, reason);\r\n }\r\n });\r\n }, undefined, offlineProvider || undefined, true, (request, exception) => {\r\n onErrorHandler(exception);\r\n });\r\n\r\n return null;\r\n }\r\n\r\n var img = new Image();\r\n SetCorsBehavior(url, img);\r\n\r\n const loadHandler = () => {\r\n img.removeEventListener(\"load\", loadHandler);\r\n img.removeEventListener(\"error\", errorHandler);\r\n\r\n onLoad(img);\r\n\r\n // Must revoke the URL after calling onLoad to avoid security exceptions in\r\n // certain scenarios (e.g. when hosted in vscode).\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n const errorHandler = (err: any) => {\r\n img.removeEventListener(\"load\", loadHandler);\r\n img.removeEventListener(\"error\", errorHandler);\r\n\r\n onErrorHandler(err);\r\n\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n img.addEventListener(\"load\", loadHandler);\r\n img.addEventListener(\"error\", errorHandler);\r\n\r\n var noOfflineSupport = () => {\r\n img.src = url;\r\n };\r\n\r\n var loadFromOfflineSupport = () => {\r\n if (offlineProvider) {\r\n offlineProvider.loadImage(url, img);\r\n }\r\n };\r\n\r\n if (url.substr(0, 5) !== \"blob:\" && url.substr(0, 5) !== \"data:\" && offlineProvider && offlineProvider.enableTexturesOffline) {\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n }\r\n else {\r\n if (url.indexOf(\"file:\") !== -1) {\r\n var textureName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (FilesInputStore.FilesToLoad[textureName]) {\r\n try {\r\n var blobURL;\r\n try {\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n catch (ex) {\r\n // Chrome doesn't support oneTimeOnly parameter\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n img.src = blobURL;\r\n usingObjectURL = true;\r\n }\r\n catch (e) {\r\n img.src = \"\";\r\n }\r\n return img;\r\n }\r\n }\r\n\r\n noOfflineSupport();\r\n }\r\n\r\n return img;\r\n};\r\n\r\n/**\r\n * Reads a file from a File object\r\n * @param file defines the file to load\r\n * @param onSuccess defines the callback to call when data is loaded\r\n * @param onProgress defines the callback to call during loading process\r\n * @param useArrayBuffer defines a boolean indicating that data must be returned as an ArrayBuffer\r\n * @param onError defines the callback to call when an error occurs\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const ReadFile = (file: File, onSuccess: (data: any) => void, onProgress?: (ev: ProgressEvent) => any, useArrayBuffer?: boolean, onError?: (error: ReadFileError) => void): IFileRequest => {\r\n const reader = new FileReader();\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => reader.abort(),\r\n };\r\n\r\n reader.onloadend = (e) => fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n if (onError) {\r\n reader.onerror = (e) => {\r\n onError(new ReadFileError(`Unable to read ${file.name}`, file));\r\n };\r\n }\r\n reader.onload = (e) => {\r\n //target doesn't have result from ts 1.3\r\n onSuccess((<any>e.target)['result']);\r\n };\r\n if (onProgress) {\r\n reader.onprogress = onProgress;\r\n }\r\n if (!useArrayBuffer) {\r\n // Asynchronous read\r\n reader.readAsText(file);\r\n }\r\n else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Loads a file from a url, a data url, or a file url\r\n * @param fileOrUrl file, url, data url, or file url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const LoadFile = (fileOrUrl: File | string, onSuccess: (data: string | ArrayBuffer, responseURL?: string) => void,\r\n onProgress?: (ev: ProgressEvent) => void, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest => {\r\n if ((fileOrUrl as File).name) {\r\n return ReadFile((fileOrUrl as File), onSuccess, onProgress, useArrayBuffer, onError ? (error: ReadFileError) => {\r\n onError(undefined, error);\r\n } : undefined);\r\n }\r\n\r\n const url = (fileOrUrl as string);\r\n\r\n // If file and file input are set\r\n if (url.indexOf(\"file:\") !== -1) {\r\n let fileName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (fileName.indexOf('./') === 0) {\r\n fileName = fileName.substring(2);\r\n }\r\n const file = FilesInputStore.FilesToLoad[fileName];\r\n if (file) {\r\n return ReadFile(file, onSuccess, onProgress, useArrayBuffer, onError ? (error) => onError(undefined, new LoadFileError(error.message, error.file)) : undefined);\r\n }\r\n }\r\n\r\n // For a Base64 Data URL\r\n if (IsBase64DataUrl(url)) {\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => () => { },\r\n };\r\n\r\n try {\r\n onSuccess(useArrayBuffer ? DecodeBase64UrlToBinary(url) : DecodeBase64UrlToString(url));\r\n } catch (error) {\r\n if (onError) {\r\n onError(undefined, error);\r\n } else {\r\n Logger.Error(error.message || \"Failed to parse the Data URL\");\r\n }\r\n }\r\n\r\n TimingTools.SetImmediate(() => {\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n });\r\n\r\n return fileRequest;\r\n }\r\n\r\n return RequestFile(url, (data, request) => {\r\n onSuccess(data, request ? request.responseURL : undefined);\r\n }, onProgress, offlineProvider, useArrayBuffer, onError ? (error) => {\r\n onError(error.request, new LoadFileError(error.message, error.request));\r\n } : undefined, onOpened);\r\n};\r\n\r\n/**\r\n * Loads a file from a url\r\n * @param url url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @param onOpened callback called when the web request is opened\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const RequestFile = (url: string, onSuccess: (data: string | ArrayBuffer, request?: WebRequest) => void,\r\n onProgress?: (event: ProgressEvent) => void, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean,\r\n onError?: (error: RequestFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest => {\r\n url = _CleanUrl(url);\r\n url = FileToolsOptions.PreprocessUrl(url);\r\n\r\n const loadUrl = FileToolsOptions.BaseUrl + url;\r\n\r\n let aborted = false;\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => aborted = true,\r\n };\r\n\r\n const requestFile = () => {\r\n let request = new WebRequest();\r\n let retryHandle: Nullable<number> = null;\r\n\r\n fileRequest.abort = () => {\r\n aborted = true;\r\n\r\n if (request.readyState !== (XMLHttpRequest.DONE || 4)) {\r\n request.abort();\r\n }\r\n\r\n if (retryHandle !== null) {\r\n clearTimeout(retryHandle);\r\n retryHandle = null;\r\n }\r\n };\r\n\r\n const handleError = (error: any) => {\r\n const message = error.message || \"Unknown error\";\r\n if (onError) {\r\n onError(new RequestFileError(message, request));\r\n } else {\r\n Logger.Error(message);\r\n }\r\n };\r\n\r\n const retryLoop = (retryIndex: number) => {\r\n request.open('GET', loadUrl);\r\n\r\n if (onOpened) {\r\n try {\r\n onOpened(request);\r\n } catch (e) {\r\n handleError(e);\r\n return;\r\n }\r\n }\r\n\r\n if (useArrayBuffer) {\r\n request.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (onProgress) {\r\n request.addEventListener(\"progress\", onProgress);\r\n }\r\n\r\n const onLoadEnd = () => {\r\n request.removeEventListener(\"loadend\", onLoadEnd);\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n fileRequest.onCompleteObservable.clear();\r\n };\r\n\r\n request.addEventListener(\"loadend\", onLoadEnd);\r\n\r\n const onReadyStateChange = () => {\r\n if (aborted) {\r\n return;\r\n }\r\n\r\n // In case of undefined state in some browsers.\r\n if (request.readyState === (XMLHttpRequest.DONE || 4)) {\r\n // Some browsers have issues where onreadystatechange can be called multiple times with the same value.\r\n request.removeEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n if ((request.status >= 200 && request.status < 300) || (request.status === 0 && (!IsWindowObjectExist() || IsFileURL()))) {\r\n try {\r\n onSuccess(useArrayBuffer ? request.response : request.responseText, request);\r\n } catch (e) {\r\n handleError(e);\r\n }\r\n return;\r\n }\r\n\r\n let retryStrategy = FileToolsOptions.DefaultRetryStrategy;\r\n if (retryStrategy) {\r\n let waitTime = retryStrategy(loadUrl, request, retryIndex);\r\n if (waitTime !== -1) {\r\n // Prevent the request from completing for retry.\r\n request.removeEventListener(\"loadend\", onLoadEnd);\r\n request = new WebRequest();\r\n retryHandle = setTimeout(() => retryLoop(retryIndex + 1), waitTime);\r\n return;\r\n }\r\n }\r\n\r\n const error = new RequestFileError(\"Error status: \" + request.status + \" \" + request.statusText + \" - Unable to load \" + loadUrl, request);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n request.addEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n request.send();\r\n };\r\n\r\n retryLoop(0);\r\n };\r\n\r\n // Caching all files\r\n if (offlineProvider && offlineProvider.enableSceneOffline) {\r\n const noOfflineSupport = (request?: any) => {\r\n if (request && request.status > 400) {\r\n if (onError) {\r\n onError(request);\r\n }\r\n } else {\r\n requestFile();\r\n }\r\n };\r\n\r\n const loadFromOfflineSupport = () => {\r\n // TODO: database needs to support aborting and should return a IFileRequest\r\n\r\n if (offlineProvider) {\r\n offlineProvider.loadFile(FileToolsOptions.BaseUrl + url, (data) => {\r\n if (!aborted) {\r\n onSuccess(data);\r\n }\r\n\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n }, onProgress ? (event) => {\r\n if (!aborted) {\r\n onProgress(event);\r\n }\r\n } : undefined, noOfflineSupport, useArrayBuffer);\r\n }\r\n };\r\n\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n }\r\n else {\r\n requestFile();\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Checks if the loaded document was accessed via `file:`-Protocol.\r\n * @returns boolean\r\n * @hidden\r\n */\r\nexport const IsFileURL = (): boolean => {\r\n return typeof location !== \"undefined\" && location.protocol === \"file:\";\r\n};\r\n\r\n/**\r\n * Test if the given uri is a valid base64 data url\r\n * @param uri The uri to test\r\n * @return True if the uri is a base64 data url or false otherwise\r\n * @hidden\r\n */\r\nexport const IsBase64DataUrl = (uri: string): boolean => {\r\n return base64DataUrlRegEx.test(uri);\r\n};\r\n\r\n/**\r\n * Decode the given base64 uri.\r\n * @param uri The uri to decode\r\n * @return The decoded base64 data.\r\n * @hidden\r\n */\r\nexport function DecodeBase64UrlToBinary(uri: string): ArrayBuffer {\r\n return DecodeBase64ToBinary(uri.split(\",\")[1]);\r\n}\r\n\r\n/**\r\n * Decode the given base64 uri into a UTF-8 encoded string.\r\n * @param uri The uri to decode\r\n * @return The decoded base64 data.\r\n * @hidden\r\n */\r\nexport const DecodeBase64UrlToString = (uri: string): string => {\r\n return DecodeBase64ToString(uri.split(\",\")[1]);\r\n};\r\n\r\n/**\r\n * This will be executed automatically for UMD and es5.\r\n * If esm dev wants the side effects to execute they will have to run it manually\r\n * Once we build native modules those need to be exported.\r\n * @hidden\r\n */\r\nconst initSideEffects = () => {\r\n ThinEngine._FileToolsLoadImage = LoadImage;\r\n ThinEngine._FileToolsLoadFile = LoadFile;\r\n ShaderProcessor._FileToolsLoadFile = LoadFile;\r\n};\r\n\r\ninitSideEffects();\r\n\r\n// LTS. Export FileTools in this module for backward compatibility.\r\nimport { _injectLTSFileTools } from './fileTools.lts';\r\n_injectLTSFileTools(DecodeBase64UrlToBinary, DecodeBase64UrlToString, FileToolsOptions, IsBase64DataUrl, IsFileURL, LoadFile, LoadImage, ReadFile, RequestFile, SetCorsBehavior);"]}
1
+ {"version":3,"file":"fileTools.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/fileTools.ts"],"names":[],"mappings":"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","sourcesContent":["import { WebRequest } from './webRequest';\r\nimport { IsWindowObjectExist } from './domManagement';\r\nimport { Nullable } from '../types';\r\nimport { IOfflineProvider } from '../Offline/IOfflineProvider';\r\nimport { IFileRequest } from './fileRequest';\r\nimport { Observable } from './observable';\r\nimport { FilesInputStore } from './filesInputStore';\r\nimport { RetryStrategy } from './retryStrategy';\r\nimport { BaseError } from './baseError';\r\nimport { DecodeBase64ToBinary, DecodeBase64ToString, EncodeArrayBufferToBase64 } from './stringTools';\r\nimport { ShaderProcessor } from '../Engines/Processors/shaderProcessor';\r\nimport { ThinEngine } from '../Engines/thinEngine';\r\nimport { EngineStore } from '../Engines/engineStore';\r\nimport { Logger } from './logger';\r\nimport { TimingTools } from './timingTools';\r\n\r\nconst base64DataUrlRegEx = new RegExp(/^data:([^,]+\\/[^,]+)?;base64,/i);\r\n\r\n/** @ignore */\r\nexport class LoadFileError extends BaseError {\r\n public request?: WebRequest;\r\n public file?: File;\r\n\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n * @param file defines the optional file\r\n */\r\n constructor(message: string, object?: WebRequest | File) {\r\n super(message);\r\n\r\n this.name = \"LoadFileError\";\r\n BaseError._setPrototypeOf(this, LoadFileError.prototype);\r\n\r\n if (object instanceof WebRequest) {\r\n this.request = object;\r\n }\r\n else {\r\n this.file = object;\r\n }\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class RequestFileError extends BaseError {\r\n /**\r\n * Creates a new LoadFileError\r\n * @param message defines the message of the error\r\n * @param request defines the optional web request\r\n */\r\n constructor(message: string, public request: WebRequest) {\r\n super(message);\r\n this.name = \"RequestFileError\";\r\n BaseError._setPrototypeOf(this, RequestFileError.prototype);\r\n }\r\n}\r\n\r\n/** @ignore */\r\nexport class ReadFileError extends BaseError {\r\n /**\r\n * Creates a new ReadFileError\r\n * @param message defines the message of the error\r\n * @param file defines the optional file\r\n */\r\n constructor(message: string, public file: File) {\r\n super(message);\r\n this.name = \"ReadFileError\";\r\n BaseError._setPrototypeOf(this, ReadFileError.prototype);\r\n }\r\n}\r\n/**\r\n * @hidden\r\n */\r\nexport const FileToolsOptions: {\r\n DefaultRetryStrategy: (url: string, request: WebRequest, retryIndex: number) => number;\r\n BaseUrl: string;\r\n CorsBehavior: string | ((url: string | string[]) => string);\r\n PreprocessUrl: (url: string) => string;\r\n} = {\r\n /**\r\n * Gets or sets the retry strategy to apply when an error happens while loading an asset.\r\n * When defining this function, return the wait time before trying again or return -1 to\r\n * stop retrying and error out.\r\n */\r\n DefaultRetryStrategy: RetryStrategy.ExponentialBackoff(),\r\n\r\n /**\r\n * Gets or sets the base URL to use to load assets\r\n */\r\n BaseUrl: \"\",\r\n\r\n /**\r\n * Default behaviour for cors in the application.\r\n * It can be a string if the expected behavior is identical in the entire app.\r\n * Or a callback to be able to set it per url or on a group of them (in case of Video source for instance)\r\n */\r\n CorsBehavior: \"anonymous\",\r\n\r\n /**\r\n * Gets or sets a function used to pre-process url before using them to load assets\r\n */\r\n PreprocessUrl: (url: string) => {\r\n return url;\r\n }\r\n};\r\n\r\n/**\r\n * Removes unwanted characters from an url\r\n * @param url defines the url to clean\r\n * @returns the cleaned url\r\n */\r\nconst _CleanUrl = (url: string): string => {\r\n url = url.replace(/#/mg, \"%23\");\r\n return url;\r\n};\r\n\r\n/**\r\n * Sets the cors behavior on a dom element. This will add the required Tools.CorsBehavior to the element.\r\n * @param url define the url we are trying\r\n * @param element define the dom element where to configure the cors policy\r\n * @hidden\r\n */\r\nexport const SetCorsBehavior = (url: string | string[], element: { crossOrigin: string | null }): void => {\r\n if (url && url.indexOf(\"data:\") === 0) {\r\n return;\r\n }\r\n\r\n if (FileToolsOptions.CorsBehavior) {\r\n if (typeof (FileToolsOptions.CorsBehavior) === 'string' || FileToolsOptions.CorsBehavior instanceof String) {\r\n element.crossOrigin = <string>FileToolsOptions.CorsBehavior;\r\n }\r\n else {\r\n var result = FileToolsOptions.CorsBehavior(url);\r\n if (result) {\r\n element.crossOrigin = result;\r\n }\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Loads an image as an HTMLImageElement.\r\n * @param input url string, ArrayBuffer, or Blob to load\r\n * @param onLoad callback called when the image successfully loads\r\n * @param onError callback called when the image fails to load\r\n * @param offlineProvider offline provider for caching\r\n * @param mimeType optional mime type\r\n * @returns the HTMLImageElement of the loaded image\r\n * @hidden\r\n */\r\nexport const LoadImage = (input: string | ArrayBuffer | ArrayBufferView | Blob, onLoad: (img: HTMLImageElement | ImageBitmap) => void,\r\n onError: (message?: string, exception?: any) => void, offlineProvider: Nullable<IOfflineProvider>, mimeType: string = \"\", imageBitmapOptions?: ImageBitmapOptions): Nullable<HTMLImageElement> => {\r\n let url: string;\r\n let usingObjectURL = false;\r\n\r\n if (input instanceof ArrayBuffer || ArrayBuffer.isView(input)) {\r\n if (typeof Blob !== 'undefined') {\r\n url = URL.createObjectURL(new Blob([input], { type: mimeType }));\r\n usingObjectURL = true;\r\n } else {\r\n url = `data:${mimeType};base64,` + EncodeArrayBufferToBase64(input);\r\n }\r\n }\r\n else if (input instanceof Blob) {\r\n url = URL.createObjectURL(input);\r\n usingObjectURL = true;\r\n }\r\n else {\r\n url = _CleanUrl(input);\r\n url = FileToolsOptions.PreprocessUrl(input);\r\n }\r\n\r\n const engine = EngineStore.LastCreatedEngine;\r\n\r\n const onErrorHandler = (exception: any) => {\r\n if (onError) {\r\n const inputText = url || input.toString();\r\n onError(`Error while trying to load image: ${((inputText.indexOf('http') === 0 || inputText.length <= 128) ? inputText : inputText.slice(0, 128) + \"...\")}`, exception);\r\n }\r\n };\r\n\r\n if (typeof Image === \"undefined\" || (engine?._features.forceBitmapOverHTMLImageElement ?? false)) {\r\n LoadFile(url, (data) => {\r\n engine!.createImageBitmap(new Blob([data], { type: mimeType }), { premultiplyAlpha: \"none\", ...imageBitmapOptions }).then((imgBmp) => {\r\n onLoad(imgBmp);\r\n if (usingObjectURL) {\r\n URL.revokeObjectURL(url);\r\n }\r\n }).catch((reason) => {\r\n if (onError) {\r\n onError(\"Error while trying to load image: \" + input, reason);\r\n }\r\n });\r\n }, undefined, offlineProvider || undefined, true, (request, exception) => {\r\n onErrorHandler(exception);\r\n });\r\n\r\n return null;\r\n }\r\n\r\n var img = new Image();\r\n SetCorsBehavior(url, img);\r\n\r\n const loadHandler = () => {\r\n img.removeEventListener(\"load\", loadHandler);\r\n img.removeEventListener(\"error\", errorHandler);\r\n\r\n onLoad(img);\r\n\r\n // Must revoke the URL after calling onLoad to avoid security exceptions in\r\n // certain scenarios (e.g. when hosted in vscode).\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n const errorHandler = (err: any) => {\r\n img.removeEventListener(\"load\", loadHandler);\r\n img.removeEventListener(\"error\", errorHandler);\r\n\r\n onErrorHandler(err);\r\n\r\n if (usingObjectURL && img.src) {\r\n URL.revokeObjectURL(img.src);\r\n }\r\n };\r\n\r\n img.addEventListener(\"load\", loadHandler);\r\n img.addEventListener(\"error\", errorHandler);\r\n\r\n var noOfflineSupport = () => {\r\n img.src = url;\r\n };\r\n\r\n var loadFromOfflineSupport = () => {\r\n if (offlineProvider) {\r\n offlineProvider.loadImage(url, img);\r\n }\r\n };\r\n\r\n if (url.substr(0, 5) !== \"blob:\" && url.substr(0, 5) !== \"data:\" && offlineProvider && offlineProvider.enableTexturesOffline) {\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n }\r\n else {\r\n if (url.indexOf(\"file:\") !== -1) {\r\n var textureName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (FilesInputStore.FilesToLoad[textureName]) {\r\n try {\r\n var blobURL;\r\n try {\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n catch (ex) {\r\n // Chrome doesn't support oneTimeOnly parameter\r\n blobURL = URL.createObjectURL(FilesInputStore.FilesToLoad[textureName]);\r\n }\r\n img.src = blobURL;\r\n usingObjectURL = true;\r\n }\r\n catch (e) {\r\n img.src = \"\";\r\n }\r\n return img;\r\n }\r\n }\r\n\r\n noOfflineSupport();\r\n }\r\n\r\n return img;\r\n};\r\n\r\n/**\r\n * Reads a file from a File object\r\n * @param file defines the file to load\r\n * @param onSuccess defines the callback to call when data is loaded\r\n * @param onProgress defines the callback to call during loading process\r\n * @param useArrayBuffer defines a boolean indicating that data must be returned as an ArrayBuffer\r\n * @param onError defines the callback to call when an error occurs\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const ReadFile = (file: File, onSuccess: (data: any) => void, onProgress?: (ev: ProgressEvent) => any, useArrayBuffer?: boolean, onError?: (error: ReadFileError) => void): IFileRequest => {\r\n const reader = new FileReader();\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => reader.abort(),\r\n };\r\n\r\n reader.onloadend = (e) => fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n if (onError) {\r\n reader.onerror = (e) => {\r\n onError(new ReadFileError(`Unable to read ${file.name}`, file));\r\n };\r\n }\r\n reader.onload = (e) => {\r\n //target doesn't have result from ts 1.3\r\n onSuccess((<any>e.target)['result']);\r\n };\r\n if (onProgress) {\r\n reader.onprogress = onProgress;\r\n }\r\n if (!useArrayBuffer) {\r\n // Asynchronous read\r\n reader.readAsText(file);\r\n }\r\n else {\r\n reader.readAsArrayBuffer(file);\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Loads a file from a url, a data url, or a file url\r\n * @param fileOrUrl file, url, data url, or file url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const LoadFile = (fileOrUrl: File | string, onSuccess: (data: string | ArrayBuffer, responseURL?: string) => void,\r\n onProgress?: (ev: ProgressEvent) => void, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean,\r\n onError?: (request?: WebRequest, exception?: LoadFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest => {\r\n if ((fileOrUrl as File).name) {\r\n return ReadFile((fileOrUrl as File), onSuccess, onProgress, useArrayBuffer, onError ? (error: ReadFileError) => {\r\n onError(undefined, error);\r\n } : undefined);\r\n }\r\n\r\n const url = (fileOrUrl as string);\r\n\r\n // If file and file input are set\r\n if (url.indexOf(\"file:\") !== -1) {\r\n let fileName = decodeURIComponent(url.substring(5).toLowerCase());\r\n if (fileName.indexOf('./') === 0) {\r\n fileName = fileName.substring(2);\r\n }\r\n const file = FilesInputStore.FilesToLoad[fileName];\r\n if (file) {\r\n return ReadFile(file, onSuccess, onProgress, useArrayBuffer, onError ? (error) => onError(undefined, new LoadFileError(error.message, error.file)) : undefined);\r\n }\r\n }\r\n\r\n // For a Base64 Data URL\r\n if (IsBase64DataUrl(url)) {\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => () => { },\r\n };\r\n\r\n try {\r\n onSuccess(useArrayBuffer ? DecodeBase64UrlToBinary(url) : DecodeBase64UrlToString(url));\r\n } catch (error) {\r\n if (onError) {\r\n onError(undefined, error);\r\n } else {\r\n Logger.Error(error.message || \"Failed to parse the Data URL\");\r\n }\r\n }\r\n\r\n TimingTools.SetImmediate(() => {\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n });\r\n\r\n return fileRequest;\r\n }\r\n\r\n return RequestFile(url, (data, request) => {\r\n onSuccess(data, request ? request.responseURL : undefined);\r\n }, onProgress, offlineProvider, useArrayBuffer, onError ? (error) => {\r\n onError(error.request, new LoadFileError(error.message, error.request));\r\n } : undefined, onOpened);\r\n};\r\n\r\n/**\r\n * Loads a file from a url\r\n * @param url url to load\r\n * @param onSuccess callback called when the file successfully loads\r\n * @param onProgress callback called while file is loading (if the server supports this mode)\r\n * @param offlineProvider defines the offline provider for caching\r\n * @param useArrayBuffer defines a boolean indicating that date must be returned as ArrayBuffer\r\n * @param onError callback called when the file fails to load\r\n * @param onOpened callback called when the web request is opened\r\n * @returns a file request object\r\n * @hidden\r\n */\r\nexport const RequestFile = (url: string, onSuccess: (data: string | ArrayBuffer, request?: WebRequest) => void,\r\n onProgress?: (event: ProgressEvent) => void, offlineProvider?: IOfflineProvider, useArrayBuffer?: boolean,\r\n onError?: (error: RequestFileError) => void, onOpened?: (request: WebRequest) => void): IFileRequest => {\r\n url = _CleanUrl(url);\r\n url = FileToolsOptions.PreprocessUrl(url);\r\n\r\n const loadUrl = FileToolsOptions.BaseUrl + url;\r\n\r\n let aborted = false;\r\n const fileRequest: IFileRequest = {\r\n onCompleteObservable: new Observable<IFileRequest>(),\r\n abort: () => aborted = true,\r\n };\r\n\r\n const requestFile = () => {\r\n let request = new WebRequest();\r\n let retryHandle: Nullable<number> = null;\r\n\r\n fileRequest.abort = () => {\r\n aborted = true;\r\n\r\n if (request.readyState !== (XMLHttpRequest.DONE || 4)) {\r\n request.abort();\r\n }\r\n\r\n if (retryHandle !== null) {\r\n clearTimeout(retryHandle);\r\n retryHandle = null;\r\n }\r\n };\r\n\r\n const handleError = (error: any) => {\r\n const message = error.message || \"Unknown error\";\r\n if (onError) {\r\n onError(new RequestFileError(message, request));\r\n } else {\r\n Logger.Error(message);\r\n }\r\n };\r\n\r\n const retryLoop = (retryIndex: number) => {\r\n request.open('GET', loadUrl);\r\n\r\n if (onOpened) {\r\n try {\r\n onOpened(request);\r\n } catch (e) {\r\n handleError(e);\r\n return;\r\n }\r\n }\r\n\r\n if (useArrayBuffer) {\r\n request.responseType = \"arraybuffer\";\r\n }\r\n\r\n if (onProgress) {\r\n request.addEventListener(\"progress\", onProgress);\r\n }\r\n\r\n const onLoadEnd = () => {\r\n request.removeEventListener(\"loadend\", onLoadEnd);\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n fileRequest.onCompleteObservable.clear();\r\n };\r\n\r\n request.addEventListener(\"loadend\", onLoadEnd);\r\n\r\n const onReadyStateChange = () => {\r\n if (aborted) {\r\n return;\r\n }\r\n\r\n // In case of undefined state in some browsers.\r\n if (request.readyState === (XMLHttpRequest.DONE || 4)) {\r\n // Some browsers have issues where onreadystatechange can be called multiple times with the same value.\r\n request.removeEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n if ((request.status >= 200 && request.status < 300) || (request.status === 0 && (!IsWindowObjectExist() || IsFileURL()))) {\r\n try {\r\n onSuccess(useArrayBuffer ? request.response : request.responseText, request);\r\n } catch (e) {\r\n handleError(e);\r\n }\r\n return;\r\n }\r\n\r\n let retryStrategy = FileToolsOptions.DefaultRetryStrategy;\r\n if (retryStrategy) {\r\n let waitTime = retryStrategy(loadUrl, request, retryIndex);\r\n if (waitTime !== -1) {\r\n // Prevent the request from completing for retry.\r\n request.removeEventListener(\"loadend\", onLoadEnd);\r\n request = new WebRequest();\r\n retryHandle = setTimeout(() => retryLoop(retryIndex + 1), waitTime);\r\n return;\r\n }\r\n }\r\n\r\n const error = new RequestFileError(\"Error status: \" + request.status + \" \" + request.statusText + \" - Unable to load \" + loadUrl, request);\r\n if (onError) {\r\n onError(error);\r\n }\r\n }\r\n };\r\n\r\n request.addEventListener(\"readystatechange\", onReadyStateChange);\r\n\r\n request.send();\r\n };\r\n\r\n retryLoop(0);\r\n };\r\n\r\n // Caching all files\r\n if (offlineProvider && offlineProvider.enableSceneOffline) {\r\n const noOfflineSupport = (request?: any) => {\r\n if (request && request.status > 400) {\r\n if (onError) {\r\n onError(request);\r\n }\r\n } else {\r\n requestFile();\r\n }\r\n };\r\n\r\n const loadFromOfflineSupport = () => {\r\n // TODO: database needs to support aborting and should return a IFileRequest\r\n\r\n if (offlineProvider) {\r\n offlineProvider.loadFile(FileToolsOptions.BaseUrl + url, (data) => {\r\n if (!aborted) {\r\n onSuccess(data);\r\n }\r\n\r\n fileRequest.onCompleteObservable.notifyObservers(fileRequest);\r\n }, onProgress ? (event) => {\r\n if (!aborted) {\r\n onProgress(event);\r\n }\r\n } : undefined, noOfflineSupport, useArrayBuffer);\r\n }\r\n };\r\n\r\n offlineProvider.open(loadFromOfflineSupport, noOfflineSupport);\r\n }\r\n else {\r\n requestFile();\r\n }\r\n\r\n return fileRequest;\r\n};\r\n\r\n/**\r\n * Checks if the loaded document was accessed via `file:`-Protocol.\r\n * @returns boolean\r\n * @hidden\r\n */\r\nexport const IsFileURL = (): boolean => {\r\n return typeof location !== \"undefined\" && location.protocol === \"file:\";\r\n};\r\n\r\n/**\r\n * Test if the given uri is a valid base64 data url\r\n * @param uri The uri to test\r\n * @return True if the uri is a base64 data url or false otherwise\r\n * @hidden\r\n */\r\nexport const IsBase64DataUrl = (uri: string): boolean => {\r\n return base64DataUrlRegEx.test(uri);\r\n};\r\n\r\n/**\r\n * Decode the given base64 uri.\r\n * @param uri The uri to decode\r\n * @return The decoded base64 data.\r\n * @hidden\r\n */\r\nexport function DecodeBase64UrlToBinary(uri: string): ArrayBuffer {\r\n return DecodeBase64ToBinary(uri.split(\",\")[1]);\r\n}\r\n\r\n/**\r\n * Decode the given base64 uri into a UTF-8 encoded string.\r\n * @param uri The uri to decode\r\n * @return The decoded base64 data.\r\n * @hidden\r\n */\r\nexport const DecodeBase64UrlToString = (uri: string): string => {\r\n return DecodeBase64ToString(uri.split(\",\")[1]);\r\n};\r\n\r\n/**\r\n * This will be executed automatically for UMD and es5.\r\n * If esm dev wants the side effects to execute they will have to run it manually\r\n * Once we build native modules those need to be exported.\r\n * @hidden\r\n */\r\nconst initSideEffects = () => {\r\n ThinEngine._FileToolsLoadImage = LoadImage;\r\n ThinEngine._FileToolsLoadFile = LoadFile;\r\n ShaderProcessor._FileToolsLoadFile = LoadFile;\r\n};\r\n\r\ninitSideEffects();\r\n\r\n// LTS. Export FileTools in this module for backward compatibility.\r\nimport { _injectLTSFileTools } from './fileTools.lts';\r\n_injectLTSFileTools(DecodeBase64UrlToBinary, DecodeBase64UrlToString, FileToolsOptions, IsBase64DataUrl, IsFileURL, LoadFile, LoadImage, ReadFile, RequestFile, SetCorsBehavior);"]}
@@ -27,7 +27,7 @@ var KhronosTextureContainer2 = /** @class */ (function () {
27
27
  this._Initialized = true;
28
28
  if (numWorkers && typeof Worker === "function") {
29
29
  KhronosTextureContainer2._WorkerPoolPromise = new Promise(function (resolve) {
30
- var workerContent = "(" + workerFunc + ")()";
30
+ var workerContent = "(".concat(workerFunc, ")()");
31
31
  var workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: "application/javascript" }));
32
32
  var workerPromises = new Array(numWorkers);
33
33
  for (var i = 0; i < workerPromises.length; i++) {
@@ -134,8 +134,9 @@ var KhronosTextureContainer2 = /** @class */ (function () {
134
134
  };
135
135
  worker.addEventListener("error", onError);
136
136
  worker.addEventListener("message", onMessage);
137
- // note: we can't transfer the ownership of data.buffer because if using a fallback texture the data.buffer buffer will be used by the current thread
138
- worker.postMessage({ action: "decode", data: data, caps: compressedTexturesCaps, options: options } /*, [data.buffer]*/);
137
+ var dataCopy = new Uint8Array(data.byteLength);
138
+ dataCopy.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));
139
+ worker.postMessage({ action: "decode", data: dataCopy, caps: compressedTexturesCaps, options: options }, [dataCopy.buffer]);
139
140
  });
140
141
  });
141
142
  });
@@ -1 +1 @@
1
- {"version":3,"file":"khronosTextureContainer2.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/khronosTextureContainer2.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\n\r\nimport { WorkerPool } from './workerPool';\r\nimport { Tools } from \"./tools\";\r\n\r\ndeclare var KTX2DECODER: any;\r\n\r\n/**\r\n * Class for loading KTX2 files\r\n */\r\nexport class KhronosTextureContainer2 {\r\n private static _WorkerPoolPromise?: Promise<WorkerPool>;\r\n private static _NoWorkerPromise?: Promise<void>;\r\n private static _Initialized: boolean;\r\n private static _Ktx2Decoder: any; // used when no worker pool is used\r\n\r\n /**\r\n * URLs to use when loading the KTX2 decoder module as well as its dependencies\r\n * If a url is null, the default url is used (pointing to https://preview.babylonjs.com)\r\n * Note that jsDecoderModule can't be null and that the other dependencies will only be loaded if necessary\r\n * Urls you can change:\r\n * URLConfig.jsDecoderModule\r\n * URLConfig.wasmUASTCToASTC\r\n * URLConfig.wasmUASTCToBC7\r\n * URLConfig.wasmUASTCToRGBA_UNORM\r\n * URLConfig.wasmUASTCToRGBA_SRGB\r\n * URLConfig.jsMSCTranscoder\r\n * URLConfig.wasmMSCTranscoder\r\n * URLConfig.wasmZSTDDecoder\r\n * You can see their default values in this PG: https://playground.babylonjs.com/#EIJH8L#29\r\n */\r\n public static URLConfig = {\r\n jsDecoderModule: \"https://preview.babylonjs.com/babylon.ktx2Decoder.js\",\r\n wasmUASTCToASTC: null,\r\n wasmUASTCToBC7: null,\r\n wasmUASTCToRGBA_UNORM: null,\r\n wasmUASTCToRGBA_SRGB: null,\r\n jsMSCTranscoder: null,\r\n wasmMSCTranscoder: null,\r\n wasmZSTDDecoder: null,\r\n };\r\n\r\n /**\r\n * Default number of workers used to handle data decoding\r\n */\r\n public static DefaultNumWorkers = KhronosTextureContainer2.GetDefaultNumWorkers();\r\n\r\n private static GetDefaultNumWorkers(): number {\r\n if (typeof navigator !== \"object\" || !navigator.hardwareConcurrency) {\r\n return 1;\r\n }\r\n\r\n // Use 50% of the available logical processors but capped at 4.\r\n return Math.min(Math.floor(navigator.hardwareConcurrency * 0.5), 4);\r\n }\r\n\r\n private _engine: ThinEngine;\r\n\r\n private static _CreateWorkerPool(numWorkers: number) {\r\n this._Initialized = true;\r\n\r\n if (numWorkers && typeof Worker === \"function\") {\r\n KhronosTextureContainer2._WorkerPoolPromise = new Promise((resolve) => {\r\n const workerContent = `(${workerFunc})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n const workerPromises = new Array<Promise<Worker>>(numWorkers);\r\n for (let i = 0; i < workerPromises.length; i++) {\r\n workerPromises[i] = new Promise((resolve, reject) => {\r\n const worker = new Worker(workerBlobUrl);\r\n\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data.action === \"init\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n resolve(worker);\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n worker.postMessage({\r\n action: \"init\",\r\n urls: KhronosTextureContainer2.URLConfig\r\n });\r\n });\r\n }\r\n\r\n Promise.all(workerPromises).then((workers) => {\r\n resolve(new WorkerPool(workers));\r\n });\r\n });\r\n } else if (typeof(KTX2DECODER) === \"undefined\") {\r\n KhronosTextureContainer2._NoWorkerPromise = Tools.LoadScriptAsync(KhronosTextureContainer2.URLConfig.jsDecoderModule).then(() => {\r\n KTX2DECODER.MSCTranscoder.UseFromWorkerThread = false;\r\n KTX2DECODER.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\r\n\r\n const urls = KhronosTextureContainer2.URLConfig;\r\n if (urls.wasmUASTCToASTC !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_ASTC.WasmModuleURL = urls.wasmUASTCToASTC;\r\n }\r\n if (urls.wasmUASTCToBC7 !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_BC7.WasmModuleURL = urls.wasmUASTCToBC7;\r\n }\r\n if (urls.wasmUASTCToRGBA_UNORM !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL = urls.wasmUASTCToRGBA_UNORM;\r\n }\r\n if (urls.wasmUASTCToRGBA_SRGB !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL = urls.wasmUASTCToRGBA_SRGB;\r\n }\r\n if (urls.jsMSCTranscoder !== null) {\r\n KTX2DECODER.MSCTranscoder.JSModuleURL = urls.jsMSCTranscoder;\r\n }\r\n if (urls.wasmMSCTranscoder !== null) {\r\n KTX2DECODER.MSCTranscoder.WasmModuleURL = urls.wasmMSCTranscoder;\r\n }\r\n if (urls.wasmZSTDDecoder !== null) {\r\n KTX2DECODER.ZSTDDecoder.WasmModuleURL = urls.wasmZSTDDecoder;\r\n }\r\n });\r\n } else {\r\n KTX2DECODER.MSCTranscoder.UseFromWorkerThread = false;\r\n KTX2DECODER.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\r\n }\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param engine The engine to use\r\n * @param numWorkers The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.\r\n */\r\n public constructor(engine: ThinEngine, numWorkers = KhronosTextureContainer2.DefaultNumWorkers) {\r\n this._engine = engine;\r\n\r\n if (!KhronosTextureContainer2._Initialized) {\r\n KhronosTextureContainer2._CreateWorkerPool(numWorkers);\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: any): Promise<void> {\r\n const caps = this._engine.getCaps();\r\n\r\n const compressedTexturesCaps = {\r\n astc: !!caps.astc,\r\n bptc: !!caps.bptc,\r\n s3tc: !!caps.s3tc,\r\n pvrtc: !!caps.pvrtc,\r\n etc2: !!caps.etc2,\r\n etc1: !!caps.etc1,\r\n };\r\n\r\n if (KhronosTextureContainer2._WorkerPoolPromise) {\r\n return KhronosTextureContainer2._WorkerPoolPromise.then((workerPool) => {\r\n return new Promise((resolve, reject) => {\r\n workerPool.push((worker, onComplete) => {\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n onComplete();\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data.action === \"decoded\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n if (!message.data.success) {\r\n reject({ message: message.data.msg });\r\n } else {\r\n try {\r\n this._createTexture(message.data.decodedData, internalTexture, options);\r\n resolve();\r\n } catch (err) {\r\n reject({ message: err });\r\n }\r\n }\r\n onComplete();\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n // note: we can't transfer the ownership of data.buffer because if using a fallback texture the data.buffer buffer will be used by the current thread\r\n worker.postMessage({ action: \"decode\", data, caps: compressedTexturesCaps, options }/*, [data.buffer]*/);\r\n });\r\n });\r\n });\r\n }\r\n else if (KhronosTextureContainer2._NoWorkerPromise) {\r\n return KhronosTextureContainer2._NoWorkerPromise.then(() => {\r\n return new Promise((resolve, reject) => {\r\n if (!KhronosTextureContainer2._Ktx2Decoder) {\r\n KhronosTextureContainer2._Ktx2Decoder = new KTX2DECODER.KTX2Decoder();\r\n }\r\n\r\n KhronosTextureContainer2._Ktx2Decoder.decode(data, caps).then((data: any) => {\r\n this._createTexture(data, internalTexture);\r\n resolve();\r\n }).catch((reason: any) => {\r\n reject({ message: reason });\r\n });\r\n });\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n if (!KhronosTextureContainer2._Ktx2Decoder) {\r\n KhronosTextureContainer2._Ktx2Decoder = new KTX2DECODER.KTX2Decoder();\r\n }\r\n\r\n KhronosTextureContainer2._Ktx2Decoder.decode(data, caps).then((data: any) => {\r\n this._createTexture(data, internalTexture);\r\n resolve();\r\n }).catch((reason: any) => {\r\n reject({ message: reason });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Stop all async operations and release resources.\r\n */\r\n public dispose(): void {\r\n if (KhronosTextureContainer2._WorkerPoolPromise) {\r\n KhronosTextureContainer2._WorkerPoolPromise.then((workerPool) => {\r\n workerPool.dispose();\r\n });\r\n }\r\n\r\n delete KhronosTextureContainer2._WorkerPoolPromise;\r\n delete KhronosTextureContainer2._NoWorkerPromise;\r\n }\r\n\r\n protected _createTexture(data: any /* IEncodedData */, internalTexture: InternalTexture, options?: any) {\r\n const oglTexture2D = 3553; // gl.TEXTURE_2D\r\n\r\n this._engine._bindTextureDirectly(oglTexture2D, internalTexture);\r\n\r\n if (options) {\r\n // return back some information about the decoded data\r\n options.transcodedFormat = data.transcodedFormat;\r\n options.isInGammaSpace = data.isInGammaSpace;\r\n options.hasAlpha = data.hasAlpha;\r\n options.transcoderName = data.transcoderName;\r\n }\r\n\r\n if (data.transcodedFormat === 0x8058 /* RGBA8 */) {\r\n internalTexture.type = 0;\r\n internalTexture.format = 5;\r\n } else {\r\n internalTexture.format = data.transcodedFormat;\r\n }\r\n\r\n internalTexture._gammaSpace = data.isInGammaSpace;\r\n internalTexture.generateMipMaps = data.mipmaps.length > 1;\r\n\r\n if (data.errors) {\r\n throw new Error(\"KTX2 container - could not transcode the data. \" + data.errors);\r\n }\r\n\r\n for (let t = 0; t < data.mipmaps.length; ++t) {\r\n let mipmap = data.mipmaps[t];\r\n\r\n if (!mipmap || !mipmap.data) {\r\n throw new Error(\"KTX2 container - could not transcode one of the image\");\r\n }\r\n\r\n if (data.transcodedFormat === 0x8058 /* RGBA8 */) {\r\n // uncompressed RGBA\r\n internalTexture.width = mipmap.width; // need to set width/height so that the call to _uploadDataToTextureDirectly uses the right dimensions\r\n internalTexture.height = mipmap.height;\r\n\r\n this._engine._uploadDataToTextureDirectly(internalTexture, mipmap.data, 0, t, undefined, true);\r\n } else {\r\n this._engine._uploadCompressedDataToTextureDirectly(internalTexture, data.transcodedFormat, mipmap.width, mipmap.height, mipmap.data, 0, t);\r\n }\r\n }\r\n\r\n internalTexture._extension = \".ktx2\";\r\n internalTexture.width = data.mipmaps[0].width;\r\n internalTexture.height = data.mipmaps[0].height;\r\n internalTexture.isReady = true;\r\n\r\n this._engine._bindTextureDirectly(oglTexture2D, null);\r\n }\r\n\r\n /**\r\n * Checks if the given data starts with a KTX2 file identifier.\r\n * @param data the data to check\r\n * @returns true if the data is a KTX2 file or false otherwise\r\n */\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (identifier[0] === 0xAB && identifier[1] === 0x4B && identifier[2] === 0x54 && identifier[3] === 0x58 && identifier[4] === 0x20 && identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 && identifier[7] === 0xBB && identifier[8] === 0x0D && identifier[9] === 0x0A && identifier[10] === 0x1A && identifier[11] === 0x0A) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\n\r\ndeclare var KTX2DECODER: any;\r\n\r\nfunction workerFunc(): void {\r\n let ktx2Decoder: any;\r\n\r\n onmessage = (event) => {\r\n if (!event.data) {\r\n return;\r\n }\r\n switch (event.data.action) {\r\n case \"init\":\r\n const urls = event.data.urls;\r\n importScripts(urls.jsDecoderModule);\r\n if (urls.wasmUASTCToASTC !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_ASTC.WasmModuleURL = urls.wasmUASTCToASTC;\r\n }\r\n if (urls.wasmUASTCToBC7 !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_BC7.WasmModuleURL = urls.wasmUASTCToBC7;\r\n }\r\n if (urls.wasmUASTCToRGBA_UNORM !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL = urls.wasmUASTCToRGBA_UNORM;\r\n }\r\n if (urls.wasmUASTCToRGBA_SRGB !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL = urls.wasmUASTCToRGBA_SRGB;\r\n }\r\n if (urls.jsMSCTranscoder !== null) {\r\n KTX2DECODER.MSCTranscoder.JSModuleURL = urls.jsMSCTranscoder;\r\n }\r\n if (urls.wasmMSCTranscoder !== null) {\r\n KTX2DECODER.MSCTranscoder.WasmModuleURL = urls.wasmMSCTranscoder;\r\n }\r\n if (urls.wasmZSTDDecoder !== null) {\r\n KTX2DECODER.ZSTDDecoder.WasmModuleURL = urls.wasmZSTDDecoder;\r\n }\r\n ktx2Decoder = new KTX2DECODER.KTX2Decoder();\r\n postMessage({ action: \"init\" });\r\n break;\r\n case \"decode\":\r\n ktx2Decoder.decode(event.data.data, event.data.caps, event.data.options).then((data: any) => {\r\n const buffers = [];\r\n for (let mip = 0; mip < data.mipmaps.length; ++mip) {\r\n const mipmap = data.mipmaps[mip];\r\n if (mipmap && mipmap.data) {\r\n buffers.push(mipmap.data.buffer);\r\n }\r\n }\r\n postMessage({ action: \"decoded\", success: true, decodedData: data }, buffers);\r\n }).catch((reason: any) => {\r\n postMessage({ action: \"decoded\", success: false, msg: reason });\r\n });\r\n break;\r\n }\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"khronosTextureContainer2.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/khronosTextureContainer2.ts"],"names":[],"mappings":"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","sourcesContent":["import { InternalTexture } from \"../Materials/Textures/internalTexture\";\r\nimport { ThinEngine } from \"../Engines/thinEngine\";\r\n\r\nimport { WorkerPool } from './workerPool';\r\nimport { Tools } from \"./tools\";\r\n\r\ndeclare var KTX2DECODER: any;\r\n\r\n/**\r\n * Class for loading KTX2 files\r\n */\r\nexport class KhronosTextureContainer2 {\r\n private static _WorkerPoolPromise?: Promise<WorkerPool>;\r\n private static _NoWorkerPromise?: Promise<void>;\r\n private static _Initialized: boolean;\r\n private static _Ktx2Decoder: any; // used when no worker pool is used\r\n\r\n /**\r\n * URLs to use when loading the KTX2 decoder module as well as its dependencies\r\n * If a url is null, the default url is used (pointing to https://preview.babylonjs.com)\r\n * Note that jsDecoderModule can't be null and that the other dependencies will only be loaded if necessary\r\n * Urls you can change:\r\n * URLConfig.jsDecoderModule\r\n * URLConfig.wasmUASTCToASTC\r\n * URLConfig.wasmUASTCToBC7\r\n * URLConfig.wasmUASTCToRGBA_UNORM\r\n * URLConfig.wasmUASTCToRGBA_SRGB\r\n * URLConfig.jsMSCTranscoder\r\n * URLConfig.wasmMSCTranscoder\r\n * URLConfig.wasmZSTDDecoder\r\n * You can see their default values in this PG: https://playground.babylonjs.com/#EIJH8L#29\r\n */\r\n public static URLConfig = {\r\n jsDecoderModule: \"https://preview.babylonjs.com/babylon.ktx2Decoder.js\",\r\n wasmUASTCToASTC: null,\r\n wasmUASTCToBC7: null,\r\n wasmUASTCToRGBA_UNORM: null,\r\n wasmUASTCToRGBA_SRGB: null,\r\n jsMSCTranscoder: null,\r\n wasmMSCTranscoder: null,\r\n wasmZSTDDecoder: null,\r\n };\r\n\r\n /**\r\n * Default number of workers used to handle data decoding\r\n */\r\n public static DefaultNumWorkers = KhronosTextureContainer2.GetDefaultNumWorkers();\r\n\r\n private static GetDefaultNumWorkers(): number {\r\n if (typeof navigator !== \"object\" || !navigator.hardwareConcurrency) {\r\n return 1;\r\n }\r\n\r\n // Use 50% of the available logical processors but capped at 4.\r\n return Math.min(Math.floor(navigator.hardwareConcurrency * 0.5), 4);\r\n }\r\n\r\n private _engine: ThinEngine;\r\n\r\n private static _CreateWorkerPool(numWorkers: number) {\r\n this._Initialized = true;\r\n\r\n if (numWorkers && typeof Worker === \"function\") {\r\n KhronosTextureContainer2._WorkerPoolPromise = new Promise((resolve) => {\r\n const workerContent = `(${workerFunc})()`;\r\n const workerBlobUrl = URL.createObjectURL(new Blob([workerContent], { type: \"application/javascript\" }));\r\n const workerPromises = new Array<Promise<Worker>>(numWorkers);\r\n for (let i = 0; i < workerPromises.length; i++) {\r\n workerPromises[i] = new Promise((resolve, reject) => {\r\n const worker = new Worker(workerBlobUrl);\r\n\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data.action === \"init\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n resolve(worker);\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n worker.postMessage({\r\n action: \"init\",\r\n urls: KhronosTextureContainer2.URLConfig\r\n });\r\n });\r\n }\r\n\r\n Promise.all(workerPromises).then((workers) => {\r\n resolve(new WorkerPool(workers));\r\n });\r\n });\r\n } else if (typeof(KTX2DECODER) === \"undefined\") {\r\n KhronosTextureContainer2._NoWorkerPromise = Tools.LoadScriptAsync(KhronosTextureContainer2.URLConfig.jsDecoderModule).then(() => {\r\n KTX2DECODER.MSCTranscoder.UseFromWorkerThread = false;\r\n KTX2DECODER.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\r\n\r\n const urls = KhronosTextureContainer2.URLConfig;\r\n if (urls.wasmUASTCToASTC !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_ASTC.WasmModuleURL = urls.wasmUASTCToASTC;\r\n }\r\n if (urls.wasmUASTCToBC7 !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_BC7.WasmModuleURL = urls.wasmUASTCToBC7;\r\n }\r\n if (urls.wasmUASTCToRGBA_UNORM !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL = urls.wasmUASTCToRGBA_UNORM;\r\n }\r\n if (urls.wasmUASTCToRGBA_SRGB !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL = urls.wasmUASTCToRGBA_SRGB;\r\n }\r\n if (urls.jsMSCTranscoder !== null) {\r\n KTX2DECODER.MSCTranscoder.JSModuleURL = urls.jsMSCTranscoder;\r\n }\r\n if (urls.wasmMSCTranscoder !== null) {\r\n KTX2DECODER.MSCTranscoder.WasmModuleURL = urls.wasmMSCTranscoder;\r\n }\r\n if (urls.wasmZSTDDecoder !== null) {\r\n KTX2DECODER.ZSTDDecoder.WasmModuleURL = urls.wasmZSTDDecoder;\r\n }\r\n });\r\n } else {\r\n KTX2DECODER.MSCTranscoder.UseFromWorkerThread = false;\r\n KTX2DECODER.WASMMemoryManager.LoadBinariesFromCurrentThread = true;\r\n }\r\n }\r\n\r\n /**\r\n * Constructor\r\n * @param engine The engine to use\r\n * @param numWorkers The number of workers for async operations. Specify `0` to disable web workers and run synchronously in the current context.\r\n */\r\n public constructor(engine: ThinEngine, numWorkers = KhronosTextureContainer2.DefaultNumWorkers) {\r\n this._engine = engine;\r\n\r\n if (!KhronosTextureContainer2._Initialized) {\r\n KhronosTextureContainer2._CreateWorkerPool(numWorkers);\r\n }\r\n }\r\n\r\n /** @hidden */\r\n public uploadAsync(data: ArrayBufferView, internalTexture: InternalTexture, options?: any): Promise<void> {\r\n const caps = this._engine.getCaps();\r\n\r\n const compressedTexturesCaps = {\r\n astc: !!caps.astc,\r\n bptc: !!caps.bptc,\r\n s3tc: !!caps.s3tc,\r\n pvrtc: !!caps.pvrtc,\r\n etc2: !!caps.etc2,\r\n etc1: !!caps.etc1,\r\n };\r\n\r\n if (KhronosTextureContainer2._WorkerPoolPromise) {\r\n return KhronosTextureContainer2._WorkerPoolPromise.then((workerPool) => {\r\n return new Promise((resolve, reject) => {\r\n workerPool.push((worker, onComplete) => {\r\n const onError = (error: ErrorEvent) => {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n reject(error);\r\n onComplete();\r\n };\r\n\r\n const onMessage = (message: MessageEvent) => {\r\n if (message.data.action === \"decoded\") {\r\n worker.removeEventListener(\"error\", onError);\r\n worker.removeEventListener(\"message\", onMessage);\r\n if (!message.data.success) {\r\n reject({ message: message.data.msg });\r\n } else {\r\n try {\r\n this._createTexture(message.data.decodedData, internalTexture, options);\r\n resolve();\r\n } catch (err) {\r\n reject({ message: err });\r\n }\r\n }\r\n onComplete();\r\n }\r\n };\r\n\r\n worker.addEventListener(\"error\", onError);\r\n worker.addEventListener(\"message\", onMessage);\r\n\r\n const dataCopy = new Uint8Array(data.byteLength);\r\n dataCopy.set(new Uint8Array(data.buffer, data.byteOffset, data.byteLength));\r\n\r\n worker.postMessage({ action: \"decode\", data: dataCopy, caps: compressedTexturesCaps, options }, [dataCopy.buffer]);\r\n });\r\n });\r\n });\r\n }\r\n else if (KhronosTextureContainer2._NoWorkerPromise) {\r\n return KhronosTextureContainer2._NoWorkerPromise.then(() => {\r\n return new Promise((resolve, reject) => {\r\n if (!KhronosTextureContainer2._Ktx2Decoder) {\r\n KhronosTextureContainer2._Ktx2Decoder = new KTX2DECODER.KTX2Decoder();\r\n }\r\n\r\n KhronosTextureContainer2._Ktx2Decoder.decode(data, caps).then((data: any) => {\r\n this._createTexture(data, internalTexture);\r\n resolve();\r\n }).catch((reason: any) => {\r\n reject({ message: reason });\r\n });\r\n });\r\n });\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n if (!KhronosTextureContainer2._Ktx2Decoder) {\r\n KhronosTextureContainer2._Ktx2Decoder = new KTX2DECODER.KTX2Decoder();\r\n }\r\n\r\n KhronosTextureContainer2._Ktx2Decoder.decode(data, caps).then((data: any) => {\r\n this._createTexture(data, internalTexture);\r\n resolve();\r\n }).catch((reason: any) => {\r\n reject({ message: reason });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Stop all async operations and release resources.\r\n */\r\n public dispose(): void {\r\n if (KhronosTextureContainer2._WorkerPoolPromise) {\r\n KhronosTextureContainer2._WorkerPoolPromise.then((workerPool) => {\r\n workerPool.dispose();\r\n });\r\n }\r\n\r\n delete KhronosTextureContainer2._WorkerPoolPromise;\r\n delete KhronosTextureContainer2._NoWorkerPromise;\r\n }\r\n\r\n protected _createTexture(data: any /* IEncodedData */, internalTexture: InternalTexture, options?: any) {\r\n const oglTexture2D = 3553; // gl.TEXTURE_2D\r\n\r\n this._engine._bindTextureDirectly(oglTexture2D, internalTexture);\r\n\r\n if (options) {\r\n // return back some information about the decoded data\r\n options.transcodedFormat = data.transcodedFormat;\r\n options.isInGammaSpace = data.isInGammaSpace;\r\n options.hasAlpha = data.hasAlpha;\r\n options.transcoderName = data.transcoderName;\r\n }\r\n\r\n if (data.transcodedFormat === 0x8058 /* RGBA8 */) {\r\n internalTexture.type = 0;\r\n internalTexture.format = 5;\r\n } else {\r\n internalTexture.format = data.transcodedFormat;\r\n }\r\n\r\n internalTexture._gammaSpace = data.isInGammaSpace;\r\n internalTexture.generateMipMaps = data.mipmaps.length > 1;\r\n\r\n if (data.errors) {\r\n throw new Error(\"KTX2 container - could not transcode the data. \" + data.errors);\r\n }\r\n\r\n for (let t = 0; t < data.mipmaps.length; ++t) {\r\n let mipmap = data.mipmaps[t];\r\n\r\n if (!mipmap || !mipmap.data) {\r\n throw new Error(\"KTX2 container - could not transcode one of the image\");\r\n }\r\n\r\n if (data.transcodedFormat === 0x8058 /* RGBA8 */) {\r\n // uncompressed RGBA\r\n internalTexture.width = mipmap.width; // need to set width/height so that the call to _uploadDataToTextureDirectly uses the right dimensions\r\n internalTexture.height = mipmap.height;\r\n\r\n this._engine._uploadDataToTextureDirectly(internalTexture, mipmap.data, 0, t, undefined, true);\r\n } else {\r\n this._engine._uploadCompressedDataToTextureDirectly(internalTexture, data.transcodedFormat, mipmap.width, mipmap.height, mipmap.data, 0, t);\r\n }\r\n }\r\n\r\n internalTexture._extension = \".ktx2\";\r\n internalTexture.width = data.mipmaps[0].width;\r\n internalTexture.height = data.mipmaps[0].height;\r\n internalTexture.isReady = true;\r\n\r\n this._engine._bindTextureDirectly(oglTexture2D, null);\r\n }\r\n\r\n /**\r\n * Checks if the given data starts with a KTX2 file identifier.\r\n * @param data the data to check\r\n * @returns true if the data is a KTX2 file or false otherwise\r\n */\r\n public static IsValid(data: ArrayBufferView): boolean {\r\n if (data.byteLength >= 12) {\r\n // '«', 'K', 'T', 'X', ' ', '2', '0', '»', '\\r', '\\n', '\\x1A', '\\n'\r\n const identifier = new Uint8Array(data.buffer, data.byteOffset, 12);\r\n if (identifier[0] === 0xAB && identifier[1] === 0x4B && identifier[2] === 0x54 && identifier[3] === 0x58 && identifier[4] === 0x20 && identifier[5] === 0x32 &&\r\n identifier[6] === 0x30 && identifier[7] === 0xBB && identifier[8] === 0x0D && identifier[9] === 0x0A && identifier[10] === 0x1A && identifier[11] === 0x0A) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\ndeclare function importScripts(...urls: string[]): void;\r\ndeclare function postMessage(message: any, transfer?: any[]): void;\r\n\r\ndeclare var KTX2DECODER: any;\r\n\r\nfunction workerFunc(): void {\r\n let ktx2Decoder: any;\r\n\r\n onmessage = (event) => {\r\n if (!event.data) {\r\n return;\r\n }\r\n switch (event.data.action) {\r\n case \"init\":\r\n const urls = event.data.urls;\r\n importScripts(urls.jsDecoderModule);\r\n if (urls.wasmUASTCToASTC !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_ASTC.WasmModuleURL = urls.wasmUASTCToASTC;\r\n }\r\n if (urls.wasmUASTCToBC7 !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_BC7.WasmModuleURL = urls.wasmUASTCToBC7;\r\n }\r\n if (urls.wasmUASTCToRGBA_UNORM !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_RGBA_UNORM.WasmModuleURL = urls.wasmUASTCToRGBA_UNORM;\r\n }\r\n if (urls.wasmUASTCToRGBA_SRGB !== null) {\r\n KTX2DECODER.LiteTranscoder_UASTC_RGBA_SRGB.WasmModuleURL = urls.wasmUASTCToRGBA_SRGB;\r\n }\r\n if (urls.jsMSCTranscoder !== null) {\r\n KTX2DECODER.MSCTranscoder.JSModuleURL = urls.jsMSCTranscoder;\r\n }\r\n if (urls.wasmMSCTranscoder !== null) {\r\n KTX2DECODER.MSCTranscoder.WasmModuleURL = urls.wasmMSCTranscoder;\r\n }\r\n if (urls.wasmZSTDDecoder !== null) {\r\n KTX2DECODER.ZSTDDecoder.WasmModuleURL = urls.wasmZSTDDecoder;\r\n }\r\n ktx2Decoder = new KTX2DECODER.KTX2Decoder();\r\n postMessage({ action: \"init\" });\r\n break;\r\n case \"decode\":\r\n ktx2Decoder.decode(event.data.data, event.data.caps, event.data.options).then((data: any) => {\r\n const buffers = [];\r\n for (let mip = 0; mip < data.mipmaps.length; ++mip) {\r\n const mipmap = data.mipmaps[mip];\r\n if (mipmap && mipmap.data) {\r\n buffers.push(mipmap.data.buffer);\r\n }\r\n }\r\n postMessage({ action: \"decoded\", success: true, decodedData: data }, buffers);\r\n }).catch((reason: any) => {\r\n postMessage({ action: \"decoded\", success: false, msg: reason });\r\n });\r\n break;\r\n }\r\n };\r\n}\r\n"]}
package/Misc/reflector.js CHANGED
@@ -15,23 +15,23 @@ var Reflector = /** @class */ (function () {
15
15
  function Reflector(scene, hostname, port) {
16
16
  var _this = this;
17
17
  this._scene = scene;
18
- Logger.Log("[Reflector] Connecting to ws://" + hostname + ":" + port);
19
- this._webSocket = new WebSocket("ws://" + hostname + ":" + port);
18
+ Logger.Log("[Reflector] Connecting to ws://".concat(hostname, ":").concat(port));
19
+ this._webSocket = new WebSocket("ws://".concat(hostname, ":").concat(port));
20
20
  this._webSocket.onmessage = function (event) {
21
21
  var message = event.data;
22
22
  if (StartsWith(message, Reflector.SERVER_PREFIX)) {
23
23
  var serverMessage = message.substr(Reflector.SERVER_PREFIX.length);
24
- Logger.Log("[Reflector] Received server message: " + serverMessage.substr(0, 64));
24
+ Logger.Log("[Reflector] Received server message: ".concat(serverMessage.substr(0, 64)));
25
25
  _this._handleServerMessage(serverMessage);
26
26
  return;
27
27
  }
28
28
  else {
29
- Logger.Log("[Reflector] Received client message: " + message.substr(0, 64));
29
+ Logger.Log("[Reflector] Received client message: ".concat(message.substr(0, 64)));
30
30
  _this._handleClientMessage(message);
31
31
  }
32
32
  };
33
33
  this._webSocket.onclose = function (event) {
34
- Logger.Log("[Reflector] Disconnected " + event.code + " " + event.reason);
34
+ Logger.Log("[Reflector] Disconnected ".concat(event.code, " ").concat(event.reason));
35
35
  };
36
36
  }
37
37
  /**
@@ -45,7 +45,7 @@ var Reflector = /** @class */ (function () {
45
45
  switch (message) {
46
46
  case "connected": {
47
47
  SceneSerializer.SerializeAsync(this._scene).then(function (serialized) {
48
- _this._webSocket.send("load|" + JSON.stringify(serialized));
48
+ _this._webSocket.send("load|".concat(JSON.stringify(serialized)));
49
49
  });
50
50
  break;
51
51
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reflector.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/reflector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;GAGG;AACH;IAMI;;;;;OAKG;IACH,mBAAmB,KAAY,EAAE,QAAgB,EAAE,IAAY;QAA/D,iBAsBC;QArBG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,MAAM,CAAC,GAAG,CAAC,oCAAkC,QAAQ,SAAI,IAAM,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,UAAQ,QAAQ,SAAI,IAAM,CAAC,CAAC;QAE5D,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,UAAC,KAAK;YAC9B,IAAM,OAAO,GAAW,KAAK,CAAC,IAAI,CAAC;YACnC,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE;gBAC9C,IAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACrE,MAAM,CAAC,GAAG,CAAC,0CAAwC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAG,CAAC,CAAC;gBAClF,KAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;gBACzC,OAAO;aACV;iBAAM;gBACH,MAAM,CAAC,GAAG,CAAC,0CAAwC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAG,CAAC,CAAC;gBAC5E,KAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;aACtC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,UAAC,KAAK;YAC5B,MAAM,CAAC,GAAG,CAAC,8BAA4B,KAAK,CAAC,IAAI,SAAI,KAAK,CAAC,MAAQ,CAAC,CAAC;QACzE,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACI,yBAAK,GAAZ;QACI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAEO,wCAAoB,GAA5B,UAA6B,OAAe;QAA5C,iBASC;QARG,QAAQ,OAAO,EAAE;YACb,KAAK,WAAW,CAAC,CAAC;gBACd,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAC,UAAU;oBACxD,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAG,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;gBACH,MAAM;aACT;SACJ;IACL,CAAC;IAEO,wCAAoB,GAA5B,UAA6B,OAAe;QACxC,aAAa;IACjB,CAAC;IAvDuB,uBAAa,GAAG,IAAI,CAAC;IAwDjD,gBAAC;CAAA,AAzDD,IAyDC;SAzDY,SAAS","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { Logger } from \"./logger\";\r\nimport { SceneSerializer } from \"./sceneSerializer\";\r\nimport { StartsWith } from \"./stringTools\";\r\n\r\n/**\r\n * Class used to connect with the reflector zone of the sandbox via the reflector bridge\r\n * @since 5.0.0\r\n */\r\nexport class Reflector {\r\n private static readonly SERVER_PREFIX = \"$$\";\r\n\r\n private _scene: Scene;\r\n private _webSocket: WebSocket;\r\n\r\n /**\r\n * Constructs a reflector object.\r\n * @param scene The scene to use\r\n * @param hostname The hostname of the reflector bridge\r\n * @param port The port of the reflector bridge\r\n */\r\n public constructor(scene: Scene, hostname: string, port: number) {\r\n this._scene = scene;\r\n\r\n Logger.Log(`[Reflector] Connecting to ws://${hostname}:${port}`);\r\n this._webSocket = new WebSocket(`ws://${hostname}:${port}`);\r\n\r\n this._webSocket.onmessage = (event) => {\r\n const message: string = event.data;\r\n if (StartsWith(message, Reflector.SERVER_PREFIX)) {\r\n const serverMessage = message.substr(Reflector.SERVER_PREFIX.length);\r\n Logger.Log(`[Reflector] Received server message: ${serverMessage.substr(0, 64)}`);\r\n this._handleServerMessage(serverMessage);\r\n return;\r\n } else {\r\n Logger.Log(`[Reflector] Received client message: ${message.substr(0, 64)}`);\r\n this._handleClientMessage(message);\r\n }\r\n };\r\n\r\n this._webSocket.onclose = (event) => {\r\n Logger.Log(`[Reflector] Disconnected ${event.code} ${event.reason}`);\r\n };\r\n }\r\n\r\n /**\r\n * Closes the reflector connection\r\n */\r\n public close(): void {\r\n this._webSocket.close();\r\n }\r\n\r\n private _handleServerMessage(message: string): void {\r\n switch (message) {\r\n case \"connected\": {\r\n SceneSerializer.SerializeAsync(this._scene).then((serialized) => {\r\n this._webSocket.send(`load|${JSON.stringify(serialized)}`);\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private _handleClientMessage(message: string): void {\r\n // do nothing\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"reflector.js","sourceRoot":"","sources":["../../../sourceES6/core/Misc/reflector.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;GAGG;AACH;IAMI;;;;;OAKG;IACH,mBAAmB,KAAY,EAAE,QAAgB,EAAE,IAAY;QAA/D,iBAsBC;QArBG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,MAAM,CAAC,GAAG,CAAC,yCAAkC,QAAQ,cAAI,IAAI,CAAE,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,CAAC,eAAQ,QAAQ,cAAI,IAAI,CAAE,CAAC,CAAC;QAE5D,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,UAAC,KAAK;YAC9B,IAAM,OAAO,GAAW,KAAK,CAAC,IAAI,CAAC;YACnC,IAAI,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,aAAa,CAAC,EAAE;gBAC9C,IAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACrE,MAAM,CAAC,GAAG,CAAC,+CAAwC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,CAAC;gBAClF,KAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;gBACzC,OAAO;aACV;iBAAM;gBACH,MAAM,CAAC,GAAG,CAAC,+CAAwC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAC,CAAC;gBAC5E,KAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;aACtC;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,OAAO,GAAG,UAAC,KAAK;YAC5B,MAAM,CAAC,GAAG,CAAC,mCAA4B,KAAK,CAAC,IAAI,cAAI,KAAK,CAAC,MAAM,CAAE,CAAC,CAAC;QACzE,CAAC,CAAC;IACN,CAAC;IAED;;OAEG;IACI,yBAAK,GAAZ;QACI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAEO,wCAAoB,GAA5B,UAA6B,OAAe;QAA5C,iBASC;QARG,QAAQ,OAAO,EAAE;YACb,KAAK,WAAW,CAAC,CAAC;gBACd,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAC,UAAU;oBACxD,KAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAQ,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAE,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;gBACH,MAAM;aACT;SACJ;IACL,CAAC;IAEO,wCAAoB,GAA5B,UAA6B,OAAe;QACxC,aAAa;IACjB,CAAC;IAvDuB,uBAAa,GAAG,IAAI,CAAC;IAwDjD,gBAAC;CAAA,AAzDD,IAyDC;SAzDY,SAAS","sourcesContent":["import { Scene } from \"../scene\";\r\nimport { Logger } from \"./logger\";\r\nimport { SceneSerializer } from \"./sceneSerializer\";\r\nimport { StartsWith } from \"./stringTools\";\r\n\r\n/**\r\n * Class used to connect with the reflector zone of the sandbox via the reflector bridge\r\n * @since 5.0.0\r\n */\r\nexport class Reflector {\r\n private static readonly SERVER_PREFIX = \"$$\";\r\n\r\n private _scene: Scene;\r\n private _webSocket: WebSocket;\r\n\r\n /**\r\n * Constructs a reflector object.\r\n * @param scene The scene to use\r\n * @param hostname The hostname of the reflector bridge\r\n * @param port The port of the reflector bridge\r\n */\r\n public constructor(scene: Scene, hostname: string, port: number) {\r\n this._scene = scene;\r\n\r\n Logger.Log(`[Reflector] Connecting to ws://${hostname}:${port}`);\r\n this._webSocket = new WebSocket(`ws://${hostname}:${port}`);\r\n\r\n this._webSocket.onmessage = (event) => {\r\n const message: string = event.data;\r\n if (StartsWith(message, Reflector.SERVER_PREFIX)) {\r\n const serverMessage = message.substr(Reflector.SERVER_PREFIX.length);\r\n Logger.Log(`[Reflector] Received server message: ${serverMessage.substr(0, 64)}`);\r\n this._handleServerMessage(serverMessage);\r\n return;\r\n } else {\r\n Logger.Log(`[Reflector] Received client message: ${message.substr(0, 64)}`);\r\n this._handleClientMessage(message);\r\n }\r\n };\r\n\r\n this._webSocket.onclose = (event) => {\r\n Logger.Log(`[Reflector] Disconnected ${event.code} ${event.reason}`);\r\n };\r\n }\r\n\r\n /**\r\n * Closes the reflector connection\r\n */\r\n public close(): void {\r\n this._webSocket.close();\r\n }\r\n\r\n private _handleServerMessage(message: string): void {\r\n switch (message) {\r\n case \"connected\": {\r\n SceneSerializer.SerializeAsync(this._scene).then((serialized) => {\r\n this._webSocket.send(`load|${JSON.stringify(serialized)}`);\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private _handleClientMessage(message: string): void {\r\n // do nothing\r\n }\r\n}\r\n"]}
package/Misc/tools.js CHANGED
@@ -255,7 +255,7 @@ var Tools = /** @class */ (function () {
255
255
  Tools.GetPointerPrefix = function (engine) {
256
256
  var eventPrefix = "pointer";
257
257
  // Check if pointer events are supported
258
- if (IsWindowObjectExist() && !window.PointerEvent && IsNavigatorAvailable() && !navigator.pointerEnabled) {
258
+ if (IsWindowObjectExist() && !window.PointerEvent) {
259
259
  eventPrefix = "mouse";
260
260
  }
261
261
  // Special Fallback MacOS Safari...
@@ -366,7 +366,7 @@ var Tools = /** @class */ (function () {
366
366
  };
367
367
  script.onerror = function (e) {
368
368
  if (onError) {
369
- onError("Unable to load script '" + scriptUrl + "'", e);
369
+ onError("Unable to load script '".concat(scriptUrl, "'"), e);
370
370
  }
371
371
  };
372
372
  head.appendChild(script);
@@ -676,18 +676,20 @@ var Tools = /** @class */ (function () {
676
676
  Tools.Download(blob, fileName);
677
677
  }
678
678
  else {
679
- var url = URL.createObjectURL(blob);
680
- var newWindow = window.open("");
681
- if (!newWindow) {
682
- return;
679
+ if (blob) {
680
+ var url = URL.createObjectURL(blob);
681
+ var newWindow = window.open("");
682
+ if (!newWindow) {
683
+ return;
684
+ }
685
+ var img = newWindow.document.createElement("img");
686
+ img.onload = function () {
687
+ // no longer need to read the blob so it's revoked
688
+ URL.revokeObjectURL(url);
689
+ };
690
+ img.src = url;
691
+ newWindow.document.body.appendChild(img);
683
692
  }
684
- var img = newWindow.document.createElement("img");
685
- img.onload = function () {
686
- // no longer need to read the blob so it's revoked
687
- URL.revokeObjectURL(url);
688
- };
689
- img.src = url;
690
- newWindow.document.body.appendChild(img);
691
693
  }
692
694
  }, mimeType, quality);
693
695
  }