@babylonjs/core 5.0.0-beta.1 → 5.0.0-beta.5

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 (513) hide show
  1. package/Audio/sound.js +3 -1
  2. package/Audio/sound.js.map +1 -1
  3. package/Behaviors/Meshes/baseSixDofDragBehavior.js +29 -26
  4. package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
  5. package/Behaviors/Meshes/pointerDragBehavior.js +2 -0
  6. package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
  7. package/Bones/bone.d.ts +2 -1
  8. package/Bones/bone.js +28 -18
  9. package/Bones/bone.js.map +1 -1
  10. package/Bones/skeleton.js +3 -3
  11. package/Bones/skeleton.js.map +1 -1
  12. package/Buffers/buffer.js +2 -2
  13. package/Buffers/buffer.js.map +1 -1
  14. package/Cameras/Inputs/freeCameraTouchInput.js +2 -4
  15. package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
  16. package/Cameras/camera.js +1 -1
  17. package/Cameras/camera.js.map +1 -1
  18. package/Compute/computeEffect.js +2 -2
  19. package/Compute/computeEffect.js.map +1 -1
  20. package/Culling/ray.d.ts +6 -4
  21. package/Culling/ray.js +33 -11
  22. package/Culling/ray.js.map +1 -1
  23. package/Debug/axesViewer.d.ts +1 -0
  24. package/Debug/axesViewer.js +1 -0
  25. package/Debug/axesViewer.js.map +1 -1
  26. package/Debug/debugLayer.js +1 -1
  27. package/Debug/debugLayer.js.map +1 -1
  28. package/DeviceInput/Helpers/eventFactory.d.ts +1 -1
  29. package/DeviceInput/Helpers/eventFactory.js +1 -1
  30. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  31. package/DeviceInput/InputDevices/deviceEnums.d.ts +52 -1
  32. package/DeviceInput/InputDevices/deviceEnums.js +52 -0
  33. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  34. package/DeviceInput/InputDevices/deviceSource.d.ts +35 -0
  35. package/DeviceInput/InputDevices/deviceSource.js +38 -0
  36. package/DeviceInput/InputDevices/deviceSource.js.map +1 -0
  37. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +14 -72
  38. package/DeviceInput/InputDevices/deviceSourceManager.js +10 -180
  39. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  40. package/DeviceInput/InputDevices/deviceTypes.d.ts +2 -2
  41. package/DeviceInput/InputDevices/deviceTypes.js.map +1 -1
  42. package/DeviceInput/{Interfaces → InputDevices}/inputInterfaces.d.ts +1 -5
  43. package/DeviceInput/{Interfaces → InputDevices}/inputInterfaces.js +0 -0
  44. package/DeviceInput/InputDevices/inputInterfaces.js.map +1 -0
  45. package/DeviceInput/InputDevices/internalDeviceSourceManager.d.ts +46 -0
  46. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +144 -0
  47. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -0
  48. package/DeviceInput/{Implementations → InputDevices}/nativeDeviceInputSystem.d.ts +3 -7
  49. package/DeviceInput/{Implementations → InputDevices}/nativeDeviceInputSystem.js +9 -15
  50. package/DeviceInput/InputDevices/nativeDeviceInputSystem.js.map +1 -0
  51. package/DeviceInput/{Implementations → InputDevices}/webDeviceInputSystem.d.ts +11 -15
  52. package/DeviceInput/{Implementations → InputDevices}/webDeviceInputSystem.js +105 -82
  53. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -0
  54. package/DeviceInput/index.d.ts +1 -5
  55. package/DeviceInput/index.js +1 -5
  56. package/DeviceInput/index.js.map +1 -1
  57. package/Engines/Extensions/engine.cubeTexture.js +1 -1
  58. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  59. package/Engines/Extensions/engine.multiview.d.ts +5 -0
  60. package/Engines/Extensions/engine.multiview.js +4 -1
  61. package/Engines/Extensions/engine.multiview.js.map +1 -1
  62. package/Engines/Native/nativeInterfaces.d.ts +2 -1
  63. package/Engines/Native/nativeInterfaces.js.map +1 -1
  64. package/Engines/Processors/Expressions/shaderDefineExpression.js +1 -1
  65. package/Engines/Processors/Expressions/shaderDefineExpression.js.map +1 -1
  66. package/Engines/Processors/shaderCodeInliner.js +13 -13
  67. package/Engines/Processors/shaderCodeInliner.js.map +1 -1
  68. package/Engines/WebGPU/webgpuCacheBindGroups.js +9 -9
  69. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  70. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +5 -7
  71. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  72. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +1 -1
  73. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  74. package/Engines/WebGPU/webgpuCacheSampler.d.ts +2 -0
  75. package/Engines/WebGPU/webgpuCacheSampler.js +23 -2
  76. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  77. package/Engines/WebGPU/webgpuComputeContext.js +1 -1
  78. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  79. package/Engines/WebGPU/webgpuDrawContext.d.ts +1 -1
  80. package/Engines/WebGPU/webgpuDrawContext.js +3 -3
  81. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  82. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +0 -1
  83. package/Engines/WebGPU/webgpuHardwareTexture.js +0 -3
  84. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  85. package/Engines/WebGPU/webgpuPipelineContext.d.ts +0 -8
  86. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  87. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +13 -13
  88. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  89. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +30 -30
  90. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  91. package/Engines/WebGPU/webgpuTextureHelper.d.ts +0 -1
  92. package/Engines/WebGPU/webgpuTextureHelper.js +8 -30
  93. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  94. package/Engines/engine.d.ts +2 -7
  95. package/Engines/engine.js +2 -6
  96. package/Engines/engine.js.map +1 -1
  97. package/Engines/engineCapabilities.d.ts +2 -0
  98. package/Engines/engineCapabilities.js.map +1 -1
  99. package/Engines/nativeEngine.d.ts +1 -0
  100. package/Engines/nativeEngine.js +37 -11
  101. package/Engines/nativeEngine.js.map +1 -1
  102. package/Engines/nullEngine.js +2 -1
  103. package/Engines/nullEngine.js.map +1 -1
  104. package/Engines/thinEngine.d.ts +11 -2
  105. package/Engines/thinEngine.js +33 -21
  106. package/Engines/thinEngine.js.map +1 -1
  107. package/Engines/webgpuEngine.d.ts +3 -7
  108. package/Engines/webgpuEngine.js +11 -22
  109. package/Engines/webgpuEngine.js.map +1 -1
  110. package/Gamepads/Controllers/daydreamController.js +1 -1
  111. package/Gamepads/Controllers/daydreamController.js.map +1 -1
  112. package/Gamepads/gamepadManager.js +1 -1
  113. package/Gamepads/gamepadManager.js.map +1 -1
  114. package/Gizmos/gizmoManager.d.ts +2 -0
  115. package/Gizmos/gizmoManager.js +28 -24
  116. package/Gizmos/gizmoManager.js.map +1 -1
  117. package/Inputs/scene.inputManager.d.ts +1 -1
  118. package/Inputs/scene.inputManager.js +5 -8
  119. package/Inputs/scene.inputManager.js.map +1 -1
  120. package/Instrumentation/sceneInstrumentation.js +2 -2
  121. package/Instrumentation/sceneInstrumentation.js.map +1 -1
  122. package/Layers/layer.d.ts +2 -2
  123. package/Layers/layer.js.map +1 -1
  124. package/Lights/Shadows/cascadedShadowGenerator.js +2 -2
  125. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  126. package/Lights/Shadows/shadowGenerator.js +2 -2
  127. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  128. package/Loading/Plugins/babylonFileLoader.js +114 -28
  129. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  130. package/Loading/loadingScreen.js +8 -8
  131. package/Loading/loadingScreen.js.map +1 -1
  132. package/Loading/sceneLoader.js +3 -3
  133. package/Loading/sceneLoader.js.map +1 -1
  134. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +37 -0
  135. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +117 -0
  136. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -0
  137. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +12 -12
  138. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  139. package/Materials/Node/Blocks/Dual/fogBlock.js +5 -5
  140. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  141. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +11 -11
  142. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  143. package/Materials/Node/Blocks/Dual/index.d.ts +1 -0
  144. package/Materials/Node/Blocks/Dual/index.js +1 -0
  145. package/Materials/Node/Blocks/Dual/index.js.map +1 -1
  146. package/Materials/Node/Blocks/Dual/lightBlock.js +10 -10
  147. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  148. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +26 -26
  149. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  150. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js +1 -1
  151. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  152. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -7
  153. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  154. package/Materials/Node/Blocks/Dual/textureBlock.js +30 -30
  155. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  156. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +2 -2
  157. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  158. package/Materials/Node/Blocks/Fragment/discardBlock.js +1 -1
  159. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  160. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  161. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  162. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +10 -10
  163. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  164. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +7 -7
  165. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  166. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +12 -12
  167. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  168. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -1
  169. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  170. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +7 -7
  171. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  172. package/Materials/Node/Blocks/Fragment/twirlBlock.js +4 -4
  173. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/Input/inputBlock.d.ts +2 -1
  175. package/Materials/Node/Blocks/Input/inputBlock.js +29 -24
  176. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +5 -5
  178. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  179. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +5 -5
  180. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  181. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +33 -33
  182. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  183. package/Materials/Node/Blocks/PBR/reflectionBlock.js +11 -11
  184. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  185. package/Materials/Node/Blocks/PBR/refractionBlock.js +11 -11
  186. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  187. package/Materials/Node/Blocks/PBR/sheenBlock.js +3 -3
  188. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  189. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +1 -1
  190. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  191. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +1 -1
  192. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  193. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +1 -1
  194. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  195. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +7 -7
  196. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  197. package/Materials/Node/Blocks/Vertex/bonesBlock.js +3 -3
  198. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  199. package/Materials/Node/Blocks/Vertex/instancesBlock.js +3 -3
  200. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  201. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +5 -5
  202. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  203. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +16 -16
  204. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  205. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -1
  206. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  207. package/Materials/Node/Blocks/addBlock.js +1 -1
  208. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  209. package/Materials/Node/Blocks/arcTan2Block.js +1 -1
  210. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  211. package/Materials/Node/Blocks/clampBlock.js +3 -3
  212. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  213. package/Materials/Node/Blocks/cloudBlock.js +7 -7
  214. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  215. package/Materials/Node/Blocks/colorMergerBlock.js +8 -8
  216. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  217. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  218. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  219. package/Materials/Node/Blocks/conditionalBlock.js +10 -10
  220. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  221. package/Materials/Node/Blocks/crossBlock.js +1 -1
  222. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  223. package/Materials/Node/Blocks/customBlock.js +1 -1
  224. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  225. package/Materials/Node/Blocks/desaturateBlock.js +4 -4
  226. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  227. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  228. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  229. package/Materials/Node/Blocks/divideBlock.js +1 -1
  230. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  231. package/Materials/Node/Blocks/dotBlock.js +1 -1
  232. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  233. package/Materials/Node/Blocks/elbowBlock.d.ts +27 -0
  234. package/Materials/Node/Blocks/elbowBlock.js +60 -0
  235. package/Materials/Node/Blocks/elbowBlock.js.map +1 -0
  236. package/Materials/Node/Blocks/fresnelBlock.js +2 -2
  237. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  238. package/Materials/Node/Blocks/gradientBlock.js +8 -8
  239. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/index.d.ts +1 -0
  241. package/Materials/Node/Blocks/index.js +1 -0
  242. package/Materials/Node/Blocks/index.js.map +1 -1
  243. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  244. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  245. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  246. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  247. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  248. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  249. package/Materials/Node/Blocks/maxBlock.js +1 -1
  250. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  251. package/Materials/Node/Blocks/minBlock.js +1 -1
  252. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  253. package/Materials/Node/Blocks/modBlock.js +1 -1
  254. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  255. package/Materials/Node/Blocks/multiplyBlock.js +1 -1
  256. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  257. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  258. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  259. package/Materials/Node/Blocks/negateBlock.js +1 -1
  260. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  261. package/Materials/Node/Blocks/normalBlendBlock.js +5 -5
  262. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  263. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  264. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  265. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  266. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  267. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  268. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  269. package/Materials/Node/Blocks/powBlock.js +1 -1
  270. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  271. package/Materials/Node/Blocks/randomNumberBlock.js +2 -2
  272. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  273. package/Materials/Node/Blocks/reciprocalBlock.js +1 -1
  274. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  275. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  276. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  277. package/Materials/Node/Blocks/refractBlock.js +1 -1
  278. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  279. package/Materials/Node/Blocks/remapBlock.js +3 -3
  280. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  281. package/Materials/Node/Blocks/replaceColorBlock.js +3 -3
  282. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  283. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  284. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  285. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  286. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  287. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  288. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  289. package/Materials/Node/Blocks/smoothStepBlock.js +1 -1
  290. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  291. package/Materials/Node/Blocks/stepBlock.js +1 -1
  292. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  293. package/Materials/Node/Blocks/subtractBlock.js +1 -1
  294. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  295. package/Materials/Node/Blocks/transformBlock.js +13 -13
  296. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  297. package/Materials/Node/Blocks/trigonometryBlock.js +2 -2
  298. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  299. package/Materials/Node/Blocks/vectorMergerBlock.js +22 -22
  300. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  301. package/Materials/Node/Blocks/vectorSplitterBlock.js +8 -8
  302. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  303. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  304. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  305. package/Materials/Node/Blocks/voronoiNoiseBlock.js +5 -5
  306. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  307. package/Materials/Node/Blocks/waveBlock.js +3 -3
  308. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  309. package/Materials/Node/Blocks/worleyNoise3DBlock.js +5 -5
  310. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  311. package/Materials/Node/Enums/nodeMaterialSystemValues.d.ts +3 -1
  312. package/Materials/Node/Enums/nodeMaterialSystemValues.js +2 -0
  313. package/Materials/Node/Enums/nodeMaterialSystemValues.js.map +1 -1
  314. package/Materials/Node/nodeMaterial.d.ts +4 -0
  315. package/Materials/Node/nodeMaterial.js +20 -10
  316. package/Materials/Node/nodeMaterial.js.map +1 -1
  317. package/Materials/Node/nodeMaterialBlock.js +12 -12
  318. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  319. package/Materials/Node/nodeMaterialBuildState.js +24 -24
  320. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  321. package/Materials/Node/nodeMaterialBuildStateSharedData.js +1 -1
  322. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  323. package/Materials/PBR/pbrBaseMaterial.js +2 -2
  324. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  325. package/Materials/PBR/pbrMaterial.js +1 -2
  326. package/Materials/PBR/pbrMaterial.js.map +1 -1
  327. package/Materials/Textures/Loaders/ktxTextureLoader.js +1 -1
  328. package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
  329. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -0
  330. package/Materials/Textures/MultiviewRenderTarget.js +10 -2
  331. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  332. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  333. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  334. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  335. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  336. package/Materials/Textures/mirrorTexture.js +2 -2
  337. package/Materials/Textures/mirrorTexture.js.map +1 -1
  338. package/Materials/Textures/renderTargetTexture.js +2 -2
  339. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  340. package/Materials/Textures/videoTexture.js +1 -0
  341. package/Materials/Textures/videoTexture.js.map +1 -1
  342. package/Materials/effect.js +3 -3
  343. package/Materials/effect.js.map +1 -1
  344. package/Materials/material.d.ts +2 -0
  345. package/Materials/material.js +4 -1
  346. package/Materials/material.js.map +1 -1
  347. package/Materials/materialHelper.js +1 -1
  348. package/Materials/materialHelper.js.map +1 -1
  349. package/Materials/materialPluginManager.js +3 -3
  350. package/Materials/materialPluginManager.js.map +1 -1
  351. package/Materials/multiMaterial.d.ts +2 -0
  352. package/Materials/multiMaterial.js +12 -10
  353. package/Materials/multiMaterial.js.map +1 -1
  354. package/Materials/shaderMaterial.js +1 -1
  355. package/Materials/shaderMaterial.js.map +1 -1
  356. package/Materials/shadowDepthWrapper.js +1 -1
  357. package/Materials/shadowDepthWrapper.js.map +1 -1
  358. package/Materials/standardMaterial.d.ts +0 -5
  359. package/Materials/standardMaterial.js +1 -10
  360. package/Materials/standardMaterial.js.map +1 -1
  361. package/Maths/math.path.d.ts +1 -0
  362. package/Maths/math.path.js +1 -0
  363. package/Maths/math.path.js.map +1 -1
  364. package/Maths/math.size.js +1 -1
  365. package/Maths/math.size.js.map +1 -1
  366. package/Maths/math.vector.d.ts +1 -0
  367. package/Maths/math.vector.js +36 -19
  368. package/Maths/math.vector.js.map +1 -1
  369. package/Meshes/Builders/cylinderBuilder.d.ts +1 -1
  370. package/Meshes/Builders/cylinderBuilder.js +1 -1
  371. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  372. package/Meshes/Builders/geodesicBuilder.d.ts +1 -0
  373. package/Meshes/Builders/geodesicBuilder.js +1 -0
  374. package/Meshes/Builders/geodesicBuilder.js.map +1 -1
  375. package/Meshes/Builders/goldbergBuilder.d.ts +1 -0
  376. package/Meshes/Builders/goldbergBuilder.js +1 -0
  377. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  378. package/Meshes/Builders/linesBuilder.js.map +1 -1
  379. package/Meshes/Builders/tiledBoxBuilder.d.ts +30 -11
  380. package/Meshes/Builders/tiledBoxBuilder.js +30 -11
  381. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  382. package/Meshes/Builders/tiledPlaneBuilder.d.ts +21 -16
  383. package/Meshes/Builders/tiledPlaneBuilder.js +21 -16
  384. package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
  385. package/Meshes/Compression/dracoCompression.d.ts +3 -0
  386. package/Meshes/Compression/dracoCompression.js +23 -7
  387. package/Meshes/Compression/dracoCompression.js.map +1 -1
  388. package/Meshes/abstractMesh.d.ts +6 -0
  389. package/Meshes/abstractMesh.js +14 -0
  390. package/Meshes/abstractMesh.js.map +1 -1
  391. package/Meshes/mesh.js +21 -6
  392. package/Meshes/mesh.js.map +1 -1
  393. package/Meshes/mesh.lts.d.ts +1 -1
  394. package/Meshes/mesh.lts.js.map +1 -1
  395. package/Meshes/mesh.vertexData.d.ts +1 -1
  396. package/Meshes/mesh.vertexData.js +2 -2
  397. package/Meshes/mesh.vertexData.js.map +1 -1
  398. package/Misc/PerformanceViewer/performanceViewerCollector.js +36 -19
  399. package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
  400. package/Misc/assetsManager.d.ts +1 -0
  401. package/Misc/assetsManager.js +13 -0
  402. package/Misc/assetsManager.js.map +1 -1
  403. package/Misc/basis.js +1 -1
  404. package/Misc/basis.js.map +1 -1
  405. package/Misc/devTools.js +1 -1
  406. package/Misc/devTools.js.map +1 -1
  407. package/Misc/environmentTextureTools.js +2 -2
  408. package/Misc/environmentTextureTools.js.map +1 -1
  409. package/Misc/fileTools.js +7 -5
  410. package/Misc/fileTools.js.map +1 -1
  411. package/Misc/index.d.ts +1 -0
  412. package/Misc/index.js +1 -0
  413. package/Misc/index.js.map +1 -1
  414. package/Misc/khronosTextureContainer2.js +4 -3
  415. package/Misc/khronosTextureContainer2.js.map +1 -1
  416. package/Misc/reflector.js +6 -6
  417. package/Misc/reflector.js.map +1 -1
  418. package/Misc/tools.js +15 -13
  419. package/Misc/tools.js.map +1 -1
  420. package/Misc/uniqueIdGenerator.js +1 -1
  421. package/Misc/uniqueIdGenerator.js.map +1 -1
  422. package/Offline/database.js +1 -1
  423. package/Offline/database.js.map +1 -1
  424. package/Particles/baseParticleSystem.d.ts +4 -1
  425. package/Particles/baseParticleSystem.js +20 -5
  426. package/Particles/baseParticleSystem.js.map +1 -1
  427. package/Particles/gpuParticleSystem.js +2 -1
  428. package/Particles/gpuParticleSystem.js.map +1 -1
  429. package/Particles/particleHelper.js +2 -2
  430. package/Particles/particleHelper.js.map +1 -1
  431. package/Physics/Plugins/ammoJSPlugin.d.ts +5 -1
  432. package/Physics/Plugins/ammoJSPlugin.js +16 -11
  433. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  434. package/Physics/physicsEngine.d.ts +1 -0
  435. package/Physics/physicsEngine.js +3 -1
  436. package/Physics/physicsEngine.js.map +1 -1
  437. package/Physics/physicsImpostor.d.ts +2 -2
  438. package/Physics/physicsImpostor.js.map +1 -1
  439. package/PostProcesses/blurPostProcess.js +5 -5
  440. package/PostProcesses/blurPostProcess.js.map +1 -1
  441. package/PostProcesses/imageProcessingPostProcess.js +1 -1
  442. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  443. package/PostProcesses/postProcess.js +1 -1
  444. package/PostProcesses/postProcess.js.map +1 -1
  445. package/PostProcesses/postProcessManager.js +2 -2
  446. package/PostProcesses/postProcessManager.js.map +1 -1
  447. package/Probes/reflectionProbe.js +2 -2
  448. package/Probes/reflectionProbe.js.map +1 -1
  449. package/Rendering/depthPeelingRenderer.js +3 -3
  450. package/Rendering/depthPeelingRenderer.js.map +1 -1
  451. package/Rendering/geometryBufferRenderer.js +8 -8
  452. package/Rendering/geometryBufferRenderer.js.map +1 -1
  453. package/Rendering/outlineRenderer.js +1 -1
  454. package/Rendering/outlineRenderer.js.map +1 -1
  455. package/Rendering/utilityLayerRenderer.js +4 -0
  456. package/Rendering/utilityLayerRenderer.js.map +1 -1
  457. package/Shaders/ShadersInclude/prePassVertex.js +1 -1
  458. package/Shaders/ShadersInclude/prePassVertex.js.map +1 -1
  459. package/Shaders/pbr.fragment.js +1 -1
  460. package/Shaders/pbr.fragment.js.map +1 -1
  461. package/ShadersWGSL/gpuUpdateParticles.compute.js +1 -1
  462. package/ShadersWGSL/gpuUpdateParticles.compute.js.map +1 -1
  463. package/Sprites/spriteManager.js +5 -6
  464. package/Sprites/spriteManager.js.map +1 -1
  465. package/Sprites/spriteMap.js +2 -2
  466. package/Sprites/spriteMap.js.map +1 -1
  467. package/Sprites/spriteRenderer.js +1 -1
  468. package/Sprites/spriteRenderer.js.map +1 -1
  469. package/XR/features/WebXRControllerPointerSelection.js +15 -9
  470. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  471. package/XR/features/WebXRDOMOverlay.js +1 -1
  472. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  473. package/XR/features/WebXRHandTracking.js +27 -27
  474. package/XR/features/WebXRHandTracking.js.map +1 -1
  475. package/XR/features/WebXRImageTracking.js +2 -2
  476. package/XR/features/WebXRImageTracking.js.map +1 -1
  477. package/XR/features/WebXRLayers.d.ts +28 -5
  478. package/XR/features/WebXRLayers.js +54 -20
  479. package/XR/features/WebXRLayers.js.map +1 -1
  480. package/XR/features/WebXRNearInteraction.d.ts +35 -3
  481. package/XR/features/WebXRNearInteraction.js +201 -40
  482. package/XR/features/WebXRNearInteraction.js.map +1 -1
  483. package/XR/motionController/webXRAbstractMotionController.js +1 -1
  484. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  485. package/XR/motionController/webXRMotionControllerManager.js +2 -2
  486. package/XR/motionController/webXRMotionControllerManager.js.map +1 -1
  487. package/XR/motionController/webXRProfiledMotionController.js +1 -1
  488. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  489. package/XR/webXRCamera.js +17 -4
  490. package/XR/webXRCamera.js.map +1 -1
  491. package/XR/webXREnterExitUI.js +2 -2
  492. package/XR/webXREnterExitUI.js.map +1 -1
  493. package/XR/webXRFeaturesManager.js +6 -6
  494. package/XR/webXRFeaturesManager.js.map +1 -1
  495. package/XR/webXRInputSource.js +3 -3
  496. package/XR/webXRInputSource.js.map +1 -1
  497. package/XR/webXRRenderTargetTextureProvider.d.ts +3 -2
  498. package/XR/webXRRenderTargetTextureProvider.js +37 -18
  499. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  500. package/XR/webXRSessionManager.js +1 -1
  501. package/XR/webXRSessionManager.js.map +1 -1
  502. package/node.d.ts +1 -1
  503. package/node.js.map +1 -1
  504. package/package.json +22 -13
  505. package/scene.d.ts +5 -2
  506. package/scene.js +31 -5
  507. package/scene.js.map +1 -1
  508. package/DeviceInput/Implementations/nativeDeviceInputSystem.js.map +0 -1
  509. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +0 -1
  510. package/DeviceInput/Interfaces/inputInterfaces.js.map +0 -1
  511. package/DeviceInput/deviceInputSystem.d.ts +0 -60
  512. package/DeviceInput/deviceInputSystem.js +0 -84
  513. package/DeviceInput/deviceInputSystem.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"sceneLoader.js","sourceRoot":"","sources":["../../../sourceES6/core/Loading/sceneLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { AnimationGroup } from \"../Animations/animationGroup\";\r\nimport { AssetContainer } from \"../assetContainer\";\r\nimport { IParticleSystem } from \"../Particles/IParticleSystem\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\nimport { SceneLoaderFlags } from \"./sceneLoaderFlags\";\r\nimport { IFileRequest } from \"../Misc/fileRequest\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\nimport { IsBase64DataUrl, LoadFileError } from '../Misc/fileTools';\r\nimport { TransformNode } from '../Meshes/transformNode';\r\nimport { Geometry } from '../Meshes/geometry';\r\nimport { Light } from '../Lights/light';\r\nimport { StartsWith } from '../Misc/stringTools';\r\n\r\n/**\r\n * Type used for the success callback of ImportMesh\r\n */\r\nexport type SceneLoaderSuccessCallback = (\r\n meshes: AbstractMesh[],\r\n particleSystems: IParticleSystem[],\r\n skeletons: Skeleton[],\r\n animationGroups: AnimationGroup[],\r\n transformNodes: TransformNode[],\r\n geometries: Geometry[],\r\n lights: Light[]\r\n) => void;\r\n\r\n/**\r\n * Interface used for the result of ImportMeshAsync\r\n */\r\nexport interface ISceneLoaderAsyncResult {\r\n /**\r\n * The array of loaded meshes\r\n */\r\n readonly meshes: AbstractMesh[];\r\n\r\n /**\r\n * The array of loaded particle systems\r\n */\r\n readonly particleSystems: IParticleSystem[];\r\n\r\n /**\r\n * The array of loaded skeletons\r\n */\r\n readonly skeletons: Skeleton[];\r\n\r\n /**\r\n * The array of loaded animation groups\r\n */\r\n readonly animationGroups: AnimationGroup[];\r\n\r\n /**\r\n * The array of loaded transform nodes\r\n */\r\n readonly transformNodes: TransformNode[];\r\n\r\n /**\r\n * The array of loaded geometries\r\n */\r\n readonly geometries: Geometry[];\r\n\r\n /**\r\n * The array of loaded lights\r\n */\r\n readonly lights: Light[];\r\n}\r\n\r\n/**\r\n * Interface used to represent data loading progression\r\n */\r\nexport interface ISceneLoaderProgressEvent {\r\n /**\r\n * Defines if data length to load can be evaluated\r\n */\r\n readonly lengthComputable: boolean;\r\n\r\n /**\r\n * Defines the loaded data length\r\n */\r\n readonly loaded: number;\r\n\r\n /**\r\n * Defines the data length to load\r\n */\r\n readonly total: number;\r\n}\r\n\r\n/**\r\n * Interface used by SceneLoader plugins to define supported file extensions\r\n */\r\nexport interface ISceneLoaderPluginExtensions {\r\n /**\r\n * Defines the list of supported extensions\r\n */\r\n [extension: string]: {\r\n isBinary: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Interface used by SceneLoader plugin factory\r\n */\r\nexport interface ISceneLoaderPluginFactory {\r\n /**\r\n * Defines the name of the factory\r\n */\r\n name: string;\r\n\r\n /**\r\n * Function called to create a new plugin\r\n * @return the new plugin\r\n */\r\n createPlugin(): ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n\r\n /**\r\n * The callback that returns true if the data can be directly loaded.\r\n * @param data string containing the file data\r\n * @returns if the data can be loaded directly\r\n */\r\n canDirectLoad?(data: string): boolean;\r\n}\r\n\r\n/**\r\n * Interface used to define the base of ISceneLoaderPlugin and ISceneLoaderPluginAsync\r\n */\r\nexport interface ISceneLoaderPluginBase {\r\n /**\r\n * The friendly name of this plugin.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The file extensions supported by this plugin.\r\n */\r\n extensions: string | ISceneLoaderPluginExtensions;\r\n\r\n /**\r\n * The callback called when loading from a url.\r\n * @param scene scene loading this url\r\n * @param fileOrUrl file or 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 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 */\r\n loadFile?(scene: Scene, fileOrUrl: File | string, onSuccess: (data: any, responseURL?: string) => void, onProgress?: (ev: ISceneLoaderProgressEvent) => void, useArrayBuffer?: boolean, onError?: (request?: WebRequest, exception?: LoadFileError) => void): IFileRequest;\r\n\r\n /**\r\n * The callback that returns true if the data can be directly loaded.\r\n * @param data string containing the file data\r\n * @returns if the data can be loaded directly\r\n */\r\n canDirectLoad?(data: string): boolean;\r\n\r\n /**\r\n * The callback that returns the data to pass to the plugin if the data can be directly loaded.\r\n * @param scene scene loading this data\r\n * @param data string containing the data\r\n * @returns data to pass to the plugin\r\n */\r\n directLoad?(scene: Scene, data: string): any;\r\n\r\n /**\r\n * The callback that allows custom handling of the root url based on the response url.\r\n * @param rootUrl the original root url\r\n * @param responseURL the response url if available\r\n * @returns the new root url\r\n */\r\n rewriteRootURL?(rootUrl: string, responseURL?: string): string;\r\n}\r\n\r\n/**\r\n * Interface used to define a SceneLoader plugin\r\n */\r\nexport interface ISceneLoaderPlugin extends ISceneLoaderPluginBase {\r\n /**\r\n * Import meshes into a scene.\r\n * @param meshesNames An array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\r\n * @param scene The scene to import into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param meshes The meshes array to import into\r\n * @param particleSystems The particle systems array to import into\r\n * @param skeletons The skeletons array to import into\r\n * @param onError The callback when import fails\r\n * @returns True if successful or false otherwise\r\n */\r\n importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], onError?: (message: string, exception?: any) => void): boolean;\r\n\r\n /**\r\n * Load into a scene.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onError The callback when import fails\r\n * @returns True if successful or false otherwise\r\n */\r\n load(scene: Scene, data: any, rootUrl: string, onError?: (message: string, exception?: any) => void): boolean;\r\n\r\n /**\r\n * Load into an asset container.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onError The callback when import fails\r\n * @returns The loaded asset container\r\n */\r\n loadAssetContainer(scene: Scene, data: any, rootUrl: string, onError?: (message: string, exception?: any) => void): AssetContainer;\r\n}\r\n\r\n/**\r\n * Interface used to define an async SceneLoader plugin\r\n */\r\nexport interface ISceneLoaderPluginAsync extends ISceneLoaderPluginBase {\r\n /**\r\n * Import meshes into a scene.\r\n * @param meshesNames An array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\r\n * @param scene The scene to import into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onProgress The callback when the load progresses\r\n * @param fileName Defines the name of the file to load\r\n * @returns The loaded objects (e.g. meshes, particle systems, skeletons, animation groups, etc.)\r\n */\r\n importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<ISceneLoaderAsyncResult>;\r\n\r\n /**\r\n * Load into a scene.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onProgress The callback when the load progresses\r\n * @param fileName Defines the name of the file to load\r\n * @returns Nothing\r\n */\r\n loadAsync(scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<void>;\r\n\r\n /**\r\n * Load into an asset container.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onProgress The callback when the load progresses\r\n * @param fileName Defines the name of the file to load\r\n * @returns The loaded asset container\r\n */\r\n loadAssetContainerAsync(scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<AssetContainer>;\r\n}\r\n\r\n/**\r\n * Mode that determines how to handle old animation groups before loading new ones.\r\n */\r\nexport enum SceneLoaderAnimationGroupLoadingMode {\r\n /**\r\n * Reset all old animations to initial state then dispose them.\r\n */\r\n Clean = 0,\r\n\r\n /**\r\n * Stop all old animations.\r\n */\r\n Stop = 1,\r\n\r\n /**\r\n * Restart old animations from first frame.\r\n */\r\n Sync = 2,\r\n\r\n /**\r\n * Old animations remains untouched.\r\n */\r\n NoSync = 3\r\n}\r\n\r\n/**\r\n * Defines a plugin registered by the SceneLoader\r\n */\r\ninterface IRegisteredPlugin {\r\n /**\r\n * Defines the plugin to use\r\n */\r\n plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync | ISceneLoaderPluginFactory;\r\n /**\r\n * Defines if the plugin supports binary data\r\n */\r\n isBinary: boolean;\r\n}\r\n\r\n/**\r\n * Defines file information\r\n */\r\ninterface IFileInfo {\r\n /**\r\n * Gets the file url\r\n */\r\n url: string;\r\n /**\r\n * Gets the root url\r\n */\r\n rootUrl: string;\r\n /**\r\n * Gets filename\r\n */\r\n name: string;\r\n /**\r\n * Gets the file\r\n */\r\n file: Nullable<File>;\r\n}\r\n\r\n/**\r\n * Class used to load scene from various file formats using registered plugins\r\n * @see https://doc.babylonjs.com/how_to/load_from_any_file_type\r\n */\r\nexport class SceneLoader {\r\n /**\r\n * No logging while loading\r\n */\r\n public static readonly NO_LOGGING = 0;\r\n\r\n /**\r\n * Minimal logging while loading\r\n */\r\n public static readonly MINIMAL_LOGGING = 1;\r\n\r\n /**\r\n * Summary logging while loading\r\n */\r\n public static readonly SUMMARY_LOGGING = 2;\r\n\r\n /**\r\n * Detailed logging while loading\r\n */\r\n public static readonly DETAILED_LOGGING = 3;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if entire scene must be loaded even if scene contains incremental data\r\n */\r\n public static get ForceFullSceneLoadingForIncremental() {\r\n return SceneLoaderFlags.ForceFullSceneLoadingForIncremental;\r\n }\r\n\r\n public static set ForceFullSceneLoadingForIncremental(value: boolean) {\r\n SceneLoaderFlags.ForceFullSceneLoadingForIncremental = value;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if loading screen must be displayed while loading a scene\r\n */\r\n public static get ShowLoadingScreen(): boolean {\r\n return SceneLoaderFlags.ShowLoadingScreen;\r\n }\r\n\r\n public static set ShowLoadingScreen(value: boolean) {\r\n SceneLoaderFlags.ShowLoadingScreen = value;\r\n }\r\n\r\n /**\r\n * Defines the current logging level (while loading the scene)\r\n * @ignorenaming\r\n */\r\n public static get loggingLevel(): number {\r\n return SceneLoaderFlags.loggingLevel;\r\n }\r\n\r\n public static set loggingLevel(value: number) {\r\n SceneLoaderFlags.loggingLevel = value;\r\n }\r\n\r\n /**\r\n * Gets or set a boolean indicating if matrix weights must be cleaned upon loading\r\n */\r\n public static get CleanBoneMatrixWeights(): boolean {\r\n return SceneLoaderFlags.CleanBoneMatrixWeights;\r\n }\r\n\r\n public static set CleanBoneMatrixWeights(value: boolean) {\r\n SceneLoaderFlags.CleanBoneMatrixWeights = value;\r\n }\r\n\r\n // Members\r\n\r\n /**\r\n * Event raised when a plugin is used to load a scene\r\n */\r\n public static OnPluginActivatedObservable = new Observable<ISceneLoaderPlugin | ISceneLoaderPluginAsync>();\r\n\r\n private static _registeredPlugins: { [extension: string]: IRegisteredPlugin } = {};\r\n\r\n private static _showingLoadingScreen = false;\r\n\r\n /**\r\n * Gets the default plugin (used to load Babylon files)\r\n * @returns the .babylon plugin\r\n */\r\n public static GetDefaultPlugin(): IRegisteredPlugin {\r\n return SceneLoader._registeredPlugins[\".babylon\"];\r\n }\r\n\r\n private static _GetPluginForExtension(extension: string): IRegisteredPlugin {\r\n var registeredPlugin = SceneLoader._registeredPlugins[extension];\r\n if (registeredPlugin) {\r\n return registeredPlugin;\r\n }\r\n Logger.Warn(\"Unable to find a plugin to load \" + extension + \" files. Trying to use .babylon default plugin. To load from a specific filetype (eg. gltf) see: https://doc.babylonjs.com/how_to/load_from_any_file_type\");\r\n return SceneLoader.GetDefaultPlugin();\r\n }\r\n\r\n private static _GetPluginForDirectLoad(data: string): IRegisteredPlugin {\r\n for (var extension in SceneLoader._registeredPlugins) {\r\n var plugin = SceneLoader._registeredPlugins[extension].plugin;\r\n\r\n if (plugin.canDirectLoad && plugin.canDirectLoad(data)) {\r\n return SceneLoader._registeredPlugins[extension];\r\n }\r\n }\r\n\r\n return SceneLoader.GetDefaultPlugin();\r\n }\r\n\r\n private static _GetPluginForFilename(sceneFilename: string): IRegisteredPlugin {\r\n var queryStringPosition = sceneFilename.indexOf(\"?\");\r\n\r\n if (queryStringPosition !== -1) {\r\n sceneFilename = sceneFilename.substring(0, queryStringPosition);\r\n }\r\n\r\n var dotPosition = sceneFilename.lastIndexOf(\".\");\r\n\r\n var extension = sceneFilename.substring(dotPosition, sceneFilename.length).toLowerCase();\r\n return SceneLoader._GetPluginForExtension(extension);\r\n }\r\n\r\n private static _GetDirectLoad(sceneFilename: string): Nullable<string> {\r\n if (sceneFilename.substr(0, 5) === \"data:\") {\r\n return sceneFilename.substr(5);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static _FormatErrorMessage(fileInfo: IFileInfo, message?: string, exception?: any): string {\r\n let errorMessage = \"Unable to load from \" + fileInfo.url;\r\n\r\n if (message) {\r\n errorMessage += `: ${message}`;\r\n }\r\n else if (exception) {\r\n errorMessage += `: ${exception}`;\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n private static _LoadData(fileInfo: IFileInfo, scene: Scene, onSuccess: (plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync, data: any, responseURL?: string) => void, onProgress: ((event: ISceneLoaderProgressEvent) => void) | undefined, onError: (message?: string, exception?: any) => void, onDispose: () => void, pluginExtension: Nullable<string>): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n const directLoad = SceneLoader._GetDirectLoad(fileInfo.url);\r\n const registeredPlugin = pluginExtension ? SceneLoader._GetPluginForExtension(pluginExtension) : (directLoad ? SceneLoader._GetPluginForDirectLoad(fileInfo.url) : SceneLoader._GetPluginForFilename(fileInfo.url));\r\n\r\n let plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n if ((registeredPlugin.plugin as ISceneLoaderPluginFactory).createPlugin !== undefined) {\r\n plugin = (registeredPlugin.plugin as ISceneLoaderPluginFactory).createPlugin();\r\n }\r\n else {\r\n plugin = <any>registeredPlugin.plugin;\r\n }\r\n\r\n if (!plugin) {\r\n throw \"The loader plugin corresponding to the file type you are trying to load has not been found. If using es6, please import the plugin you wish to use before.\";\r\n }\r\n\r\n SceneLoader.OnPluginActivatedObservable.notifyObservers(plugin);\r\n\r\n // Check if we have a direct load url. If the plugin is registered to handle\r\n // it or it's not a base64 data url, then pass it through the direct load path.\r\n if (directLoad && ((plugin.canDirectLoad && plugin.canDirectLoad(fileInfo.url) || !IsBase64DataUrl(fileInfo.url)))) {\r\n if (plugin.directLoad) {\r\n const result = plugin.directLoad(scene, directLoad);\r\n if (result.then) {\r\n result.then((data: any) => {\r\n onSuccess(plugin, data);\r\n }).catch((error: any) => {\r\n onError(\"Error in directLoad of _loadData: \" + error, error);\r\n });\r\n }\r\n else {\r\n onSuccess(plugin, result);\r\n }\r\n } else {\r\n onSuccess(plugin, directLoad);\r\n }\r\n return plugin;\r\n }\r\n\r\n const useArrayBuffer = registeredPlugin.isBinary;\r\n\r\n const dataCallback = (data: any, responseURL?: string) => {\r\n if (scene.isDisposed) {\r\n onError(\"Scene has been disposed\");\r\n return;\r\n }\r\n\r\n onSuccess(plugin, data, responseURL);\r\n };\r\n\r\n let request: Nullable<IFileRequest> = null;\r\n let pluginDisposed = false;\r\n const onDisposeObservable = (plugin as any).onDisposeObservable as Observable<ISceneLoaderPlugin | ISceneLoaderPluginAsync>;\r\n if (onDisposeObservable) {\r\n onDisposeObservable.add(() => {\r\n pluginDisposed = true;\r\n\r\n if (request) {\r\n request.abort();\r\n request = null;\r\n }\r\n\r\n onDispose();\r\n });\r\n }\r\n\r\n const manifestChecked = () => {\r\n if (pluginDisposed) {\r\n return;\r\n }\r\n\r\n const errorCallback = (request?: WebRequest, exception?: LoadFileError) => {\r\n onError(request?.statusText, exception);\r\n };\r\n\r\n const fileOrUrl = fileInfo.file || fileInfo.url;\r\n request = plugin.loadFile\r\n ? plugin.loadFile(scene, fileOrUrl, dataCallback, onProgress, useArrayBuffer, errorCallback)\r\n : scene._loadFile(fileOrUrl, dataCallback, onProgress, true, useArrayBuffer, errorCallback);\r\n };\r\n\r\n const engine = scene.getEngine();\r\n let canUseOfflineSupport = engine.enableOfflineSupport;\r\n if (canUseOfflineSupport) {\r\n // Also check for exceptions\r\n let exceptionFound = false;\r\n for (var regex of scene.disableOfflineSupportExceptionRules) {\r\n if (regex.test(fileInfo.url)) {\r\n exceptionFound = true;\r\n break;\r\n }\r\n }\r\n\r\n canUseOfflineSupport = !exceptionFound;\r\n }\r\n\r\n if (canUseOfflineSupport && Engine.OfflineProviderFactory) {\r\n // Checking if a manifest file has been set for this scene and if offline mode has been requested\r\n scene.offlineProvider = Engine.OfflineProviderFactory(fileInfo.url, manifestChecked, engine.disableManifestCheck);\r\n }\r\n else {\r\n manifestChecked();\r\n }\r\n\r\n return plugin;\r\n }\r\n\r\n private static _GetFileInfo(rootUrl: string, sceneFilename: string | File): Nullable<IFileInfo> {\r\n let url: string;\r\n let name: string;\r\n let file: Nullable<File> = null;\r\n\r\n if (!sceneFilename) {\r\n url = rootUrl;\r\n name = Tools.GetFilename(rootUrl);\r\n rootUrl = Tools.GetFolderPath(rootUrl);\r\n }\r\n else if ((sceneFilename as File).name) {\r\n const sceneFile = sceneFilename as File;\r\n url = `file:${sceneFile.name}`;\r\n name = sceneFile.name;\r\n file = sceneFile;\r\n }\r\n else if (typeof sceneFilename === \"string\" && StartsWith(sceneFilename, \"data:\")) {\r\n url = sceneFilename;\r\n name = \"\";\r\n }\r\n else {\r\n const filename = sceneFilename as string;\r\n if (filename.substr(0, 1) === \"/\") {\r\n Tools.Error(\"Wrong sceneFilename parameter\");\r\n return null;\r\n }\r\n\r\n url = rootUrl + filename;\r\n name = filename;\r\n }\r\n\r\n return {\r\n url: url,\r\n rootUrl: rootUrl,\r\n name: name,\r\n file: file\r\n };\r\n }\r\n\r\n // Public functions\r\n\r\n /**\r\n * Gets a plugin that can load the given extension\r\n * @param extension defines the extension to load\r\n * @returns a plugin or null if none works\r\n */\r\n public static GetPluginForExtension(extension: string): ISceneLoaderPlugin | ISceneLoaderPluginAsync | ISceneLoaderPluginFactory {\r\n return SceneLoader._GetPluginForExtension(extension).plugin;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the given extension can be loaded\r\n * @param extension defines the extension to load\r\n * @returns true if the extension is supported\r\n */\r\n public static IsPluginForExtensionAvailable(extension: string): boolean {\r\n return !!SceneLoader._registeredPlugins[extension];\r\n }\r\n\r\n /**\r\n * Adds a new plugin to the list of registered plugins\r\n * @param plugin defines the plugin to add\r\n */\r\n public static RegisterPlugin(plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync): void {\r\n if (typeof plugin.extensions === \"string\") {\r\n var extension = <string>plugin.extensions;\r\n SceneLoader._registeredPlugins[extension.toLowerCase()] = {\r\n plugin: plugin,\r\n isBinary: false\r\n };\r\n }\r\n else {\r\n var extensions = <ISceneLoaderPluginExtensions>plugin.extensions;\r\n Object.keys(extensions).forEach((extension) => {\r\n SceneLoader._registeredPlugins[extension.toLowerCase()] = {\r\n plugin: plugin,\r\n isBinary: extensions[extension].isBinary\r\n };\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Import meshes into a scene\r\n * @param meshNames an array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene the instance of BABYLON.Scene to append to\r\n * @param onSuccess a callback with a list of imported meshes, particleSystems, skeletons, and animationGroups when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded plugin\r\n */\r\n public static ImportMesh(meshNames: any, rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onSuccess: Nullable<SceneLoaderSuccessCallback> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to import mesh to\");\r\n return null;\r\n }\r\n\r\n const fileInfo = SceneLoader._GetFileInfo(rootUrl, sceneFilename);\r\n if (!fileInfo) {\r\n return null;\r\n }\r\n\r\n var loadingToken = {};\r\n scene._addPendingData(loadingToken);\r\n\r\n var disposeHandler = () => {\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n var errorHandler = (message?: string, exception?: any) => {\r\n const errorMessage = SceneLoader._FormatErrorMessage(fileInfo, message, exception);\r\n\r\n if (onError) {\r\n onError(scene, errorMessage, new Error(errorMessage));\r\n } else {\r\n Logger.Error(errorMessage);\r\n // should the exception be thrown?\r\n }\r\n\r\n disposeHandler();\r\n };\r\n\r\n var progressHandler = onProgress ? (event: ISceneLoaderProgressEvent) => {\r\n try {\r\n onProgress(event);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onProgress callback: \" + e, e);\r\n }\r\n } : undefined;\r\n\r\n var successHandler: SceneLoaderSuccessCallback = (meshes, particleSystems, skeletons, animationGroups, transformNodes, geometries, lights) => {\r\n scene.importedMeshesFiles.push(fileInfo.url);\r\n\r\n if (onSuccess) {\r\n try {\r\n onSuccess(meshes, particleSystems, skeletons, animationGroups, transformNodes, geometries, lights);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onSuccess callback: \" + e, e);\r\n }\r\n }\r\n\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n return SceneLoader._LoadData(fileInfo, scene, (plugin, data, responseURL) => {\r\n if (plugin.rewriteRootURL) {\r\n fileInfo.rootUrl = plugin.rewriteRootURL(fileInfo.rootUrl, responseURL);\r\n }\r\n\r\n if ((<any>plugin).importMesh) {\r\n var syncedPlugin = <ISceneLoaderPlugin>plugin;\r\n var meshes = new Array<AbstractMesh>();\r\n var particleSystems = new Array<IParticleSystem>();\r\n var skeletons = new Array<Skeleton>();\r\n\r\n if (!syncedPlugin.importMesh(meshNames, scene, data, fileInfo.rootUrl, meshes, particleSystems, skeletons, errorHandler)) {\r\n return;\r\n }\r\n\r\n scene.loadingPluginName = plugin.name;\r\n successHandler(meshes, particleSystems, skeletons, [], [], [], []);\r\n }\r\n else {\r\n var asyncedPlugin = <ISceneLoaderPluginAsync>plugin;\r\n asyncedPlugin.importMeshAsync(meshNames, scene, data, fileInfo.rootUrl, progressHandler, fileInfo.name).then((result) => {\r\n scene.loadingPluginName = plugin.name;\r\n successHandler(result.meshes, result.particleSystems, result.skeletons, result.animationGroups, result.transformNodes, result.geometries, result.lights);\r\n }).catch((error) => {\r\n errorHandler(error.message, error);\r\n });\r\n }\r\n }, progressHandler, errorHandler, disposeHandler, pluginExtension);\r\n }\r\n\r\n /**\r\n * Import meshes into a scene\r\n * @param meshNames an array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene the instance of BABYLON.Scene to append to\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded list of imported meshes, particle systems, skeletons, and animation groups\r\n */\r\n public static ImportMeshAsync(meshNames: any, rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, pluginExtension: Nullable<string> = null): Promise<ISceneLoaderAsyncResult> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.ImportMesh(meshNames, rootUrl, sceneFilename, scene, (meshes, particleSystems, skeletons, animationGroups, transformNodes, geometries, lights) => {\r\n resolve({\r\n meshes: meshes,\r\n particleSystems: particleSystems,\r\n skeletons: skeletons,\r\n animationGroups: animationGroups,\r\n transformNodes: transformNodes,\r\n geometries: geometries,\r\n lights: lights\r\n });\r\n }, onProgress, (scene, message, exception) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n\r\n /**\r\n * Load a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param engine is the instance of BABYLON.Engine to use to create the scene\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded plugin\r\n */\r\n public static Load(rootUrl: string, sceneFilename: string | File = \"\", engine: Nullable<Engine> = EngineStore.LastCreatedEngine, onSuccess: Nullable<(scene: Scene) => void> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n if (!engine) {\r\n Tools.Error(\"No engine available\");\r\n return null;\r\n }\r\n\r\n return SceneLoader.Append(rootUrl, sceneFilename, new Scene(engine), onSuccess, onProgress, onError, pluginExtension);\r\n }\r\n\r\n /**\r\n * Load a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param engine is the instance of BABYLON.Engine to use to create the scene\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded scene\r\n */\r\n public static LoadAsync(rootUrl: string, sceneFilename: string | File = \"\", engine: Nullable<Engine> = EngineStore.LastCreatedEngine, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, pluginExtension: Nullable<string> = null): Promise<Scene> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.Load(rootUrl, sceneFilename, engine, (scene) => {\r\n resolve(scene);\r\n }, onProgress, (scene, message, exception) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n\r\n /**\r\n * Append a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded plugin\r\n */\r\n public static Append(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onSuccess: Nullable<(scene: Scene) => void> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to append to\");\r\n return null;\r\n }\r\n\r\n const fileInfo = SceneLoader._GetFileInfo(rootUrl, sceneFilename);\r\n if (!fileInfo) {\r\n return null;\r\n }\r\n\r\n if (SceneLoader.ShowLoadingScreen && !this._showingLoadingScreen) {\r\n this._showingLoadingScreen = true;\r\n scene.getEngine().displayLoadingUI();\r\n scene.executeWhenReady(() => {\r\n scene.getEngine().hideLoadingUI();\r\n this._showingLoadingScreen = false;\r\n });\r\n }\r\n\r\n var loadingToken = {};\r\n scene._addPendingData(loadingToken);\r\n\r\n var disposeHandler = () => {\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n var errorHandler = (message?: string, exception?: any) => {\r\n const errorMessage = SceneLoader._FormatErrorMessage(fileInfo, message, exception);\r\n\r\n if (onError) {\r\n onError(scene, errorMessage, new Error(errorMessage));\r\n } else {\r\n Logger.Error(errorMessage);\r\n // should the exception be thrown?\r\n }\r\n\r\n disposeHandler();\r\n };\r\n\r\n var progressHandler = onProgress ? (event: ISceneLoaderProgressEvent) => {\r\n try {\r\n onProgress(event);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onProgress callback\", e);\r\n }\r\n } : undefined;\r\n\r\n var successHandler = () => {\r\n if (onSuccess) {\r\n try {\r\n onSuccess(scene);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onSuccess callback\", e);\r\n }\r\n }\r\n\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n return SceneLoader._LoadData(fileInfo, scene, (plugin, data) => {\r\n if ((<any>plugin).load) {\r\n var syncedPlugin = <ISceneLoaderPlugin>plugin;\r\n if (!syncedPlugin.load(scene, data, fileInfo.rootUrl, errorHandler)) {\r\n return;\r\n }\r\n\r\n scene.loadingPluginName = plugin.name;\r\n successHandler();\r\n } else {\r\n var asyncedPlugin = <ISceneLoaderPluginAsync>plugin;\r\n asyncedPlugin.loadAsync(scene, data, fileInfo.rootUrl, progressHandler, fileInfo.name).then(() => {\r\n scene.loadingPluginName = plugin.name;\r\n successHandler();\r\n }).catch((error) => {\r\n errorHandler(error.message, error);\r\n });\r\n }\r\n }, progressHandler, errorHandler, disposeHandler, pluginExtension);\r\n }\r\n\r\n /**\r\n * Append a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The given scene\r\n */\r\n public static AppendAsync(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, pluginExtension: Nullable<string> = null): Promise<Scene> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.Append(rootUrl, sceneFilename, scene, (scene) => {\r\n resolve(scene);\r\n }, onProgress, (scene, message, exception) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n\r\n /**\r\n * Load a scene into an asset container\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded plugin\r\n */\r\n public static LoadAssetContainer(\r\n rootUrl: string,\r\n sceneFilename: string | File = \"\",\r\n scene: Nullable<Scene> = EngineStore.LastCreatedScene,\r\n onSuccess: Nullable<(assets: AssetContainer) => void> = null,\r\n onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null,\r\n onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null,\r\n pluginExtension: Nullable<string> = null\r\n ): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to load asset container to\");\r\n return null;\r\n }\r\n\r\n const fileInfo = SceneLoader._GetFileInfo(rootUrl, sceneFilename);\r\n if (!fileInfo) {\r\n return null;\r\n }\r\n\r\n var loadingToken = {};\r\n scene._addPendingData(loadingToken);\r\n\r\n var disposeHandler = () => {\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n var errorHandler = (message?: string, exception?: any) => {\r\n const errorMessage = SceneLoader._FormatErrorMessage(fileInfo, message, exception);\r\n\r\n if (onError) {\r\n onError(scene, errorMessage, new Error(errorMessage));\r\n } else {\r\n Logger.Error(errorMessage);\r\n // should the exception be thrown?\r\n }\r\n\r\n disposeHandler();\r\n };\r\n\r\n var progressHandler = onProgress ? (event: ISceneLoaderProgressEvent) => {\r\n try {\r\n onProgress(event);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onProgress callback\", e);\r\n }\r\n } : undefined;\r\n\r\n var successHandler = (assets: AssetContainer) => {\r\n if (onSuccess) {\r\n try {\r\n onSuccess(assets);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onSuccess callback\", e);\r\n }\r\n }\r\n\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n return SceneLoader._LoadData(fileInfo, scene, (plugin, data) => {\r\n if ((<any>plugin).loadAssetContainer) {\r\n var syncedPlugin = <ISceneLoaderPlugin>plugin;\r\n var assetContainer = syncedPlugin.loadAssetContainer(scene, data, fileInfo.rootUrl, errorHandler);\r\n if (!assetContainer) {\r\n return;\r\n }\r\n\r\n scene.loadingPluginName = plugin.name;\r\n successHandler(assetContainer);\r\n } else if ((<any>plugin).loadAssetContainerAsync) {\r\n var asyncedPlugin = <ISceneLoaderPluginAsync>plugin;\r\n asyncedPlugin.loadAssetContainerAsync(scene, data, fileInfo.rootUrl, progressHandler, fileInfo.name).then((assetContainer) => {\r\n scene.loadingPluginName = plugin.name;\r\n successHandler(assetContainer);\r\n }).catch((error) => {\r\n errorHandler(error.message, error);\r\n });\r\n } else {\r\n errorHandler(\"LoadAssetContainer is not supported by this plugin. Plugin did not provide a loadAssetContainer or loadAssetContainerAsync method.\");\r\n }\r\n }, progressHandler, errorHandler, disposeHandler, pluginExtension);\r\n }\r\n\r\n /**\r\n * Load a scene into an asset container\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene (default: empty string)\r\n * @param scene is the instance of Scene to append to\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded asset container\r\n */\r\n public static LoadAssetContainerAsync(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, pluginExtension: Nullable<string> = null): Promise<AssetContainer> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.LoadAssetContainer(rootUrl, sceneFilename, scene, (assetContainer) => {\r\n resolve(assetContainer);\r\n }, onProgress, (scene, message, exception) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n\r\n /**\r\n * Import animations from a file into a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param overwriteAnimations when true, animations are cleaned before importing new ones. Animations are appended otherwise\r\n * @param animationGroupLoadingMode defines how to handle old animations groups before importing new ones\r\n * @param targetConverter defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n */\r\n public static ImportAnimations(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, overwriteAnimations = true, animationGroupLoadingMode = SceneLoaderAnimationGroupLoadingMode.Clean, targetConverter: Nullable<(target: any) => any> = null, onSuccess: Nullable<(scene: Scene) => void> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): void {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to load animations to\");\r\n return;\r\n }\r\n\r\n if (overwriteAnimations) {\r\n // Reset, stop and dispose all animations before loading new ones\r\n for (let animatable of scene.animatables) {\r\n animatable.reset();\r\n }\r\n scene.stopAllAnimations();\r\n scene.animationGroups.slice().forEach((animationGroup) => {\r\n animationGroup.dispose();\r\n });\r\n let nodes = scene.getNodes();\r\n nodes.forEach((node) => {\r\n if (node.animations) {\r\n node.animations = [];\r\n }\r\n });\r\n }\r\n else {\r\n switch (animationGroupLoadingMode) {\r\n case SceneLoaderAnimationGroupLoadingMode.Clean:\r\n scene.animationGroups.slice().forEach((animationGroup) => {\r\n animationGroup.dispose();\r\n });\r\n break;\r\n case SceneLoaderAnimationGroupLoadingMode.Stop:\r\n scene.animationGroups.forEach((animationGroup) => {\r\n animationGroup.stop();\r\n });\r\n break;\r\n case SceneLoaderAnimationGroupLoadingMode.Sync:\r\n scene.animationGroups.forEach((animationGroup) => {\r\n animationGroup.reset();\r\n animationGroup.restart();\r\n });\r\n break;\r\n case SceneLoaderAnimationGroupLoadingMode.NoSync:\r\n // nothing to do\r\n break;\r\n default:\r\n Logger.Error(\"Unknown animation group loading mode value '\" + animationGroupLoadingMode + \"'\");\r\n return;\r\n }\r\n }\r\n\r\n let startingIndexForNewAnimatables = scene.animatables.length;\r\n\r\n let onAssetContainerLoaded = (container: AssetContainer) => {\r\n container.mergeAnimationsTo(scene, scene.animatables.slice(startingIndexForNewAnimatables), targetConverter);\r\n\r\n container.dispose();\r\n\r\n scene.onAnimationFileImportedObservable.notifyObservers(scene);\r\n\r\n if (onSuccess) {\r\n onSuccess(scene);\r\n }\r\n };\r\n\r\n this.LoadAssetContainer(rootUrl, sceneFilename, scene, onAssetContainerLoaded, onProgress, onError, pluginExtension);\r\n }\r\n\r\n /**\r\n * Import animations from a file into a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param overwriteAnimations when true, animations are cleaned before importing new ones. Animations are appended otherwise\r\n * @param animationGroupLoadingMode defines how to handle old animations groups before importing new ones\r\n * @param targetConverter defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns the updated scene with imported animations\r\n */\r\n public static ImportAnimationsAsync(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, overwriteAnimations = true, animationGroupLoadingMode = SceneLoaderAnimationGroupLoadingMode.Clean, targetConverter: Nullable<(target: any) => any> = null, onSuccess: Nullable<(scene: Scene) => void> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): Promise<Scene> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.ImportAnimations(rootUrl, sceneFilename, scene, overwriteAnimations, animationGroupLoadingMode, targetConverter, (_scene: Scene) => {\r\n resolve(_scene);\r\n }, onProgress, (_scene: Scene, message: string, exception: any) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"sceneLoader.js","sourceRoot":"","sources":["../../../sourceES6/core/Loading/sceneLoader.ts"],"names":[],"mappings":"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","sourcesContent":["import { Tools } from \"../Misc/tools\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { Scene } from \"../scene\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { EngineStore } from \"../Engines/engineStore\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { AnimationGroup } from \"../Animations/animationGroup\";\r\nimport { AssetContainer } from \"../assetContainer\";\r\nimport { IParticleSystem } from \"../Particles/IParticleSystem\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { Logger } from \"../Misc/logger\";\r\n\r\nimport { SceneLoaderFlags } from \"./sceneLoaderFlags\";\r\nimport { IFileRequest } from \"../Misc/fileRequest\";\r\nimport { WebRequest } from \"../Misc/webRequest\";\r\nimport { IsBase64DataUrl, LoadFileError } from '../Misc/fileTools';\r\nimport { TransformNode } from '../Meshes/transformNode';\r\nimport { Geometry } from '../Meshes/geometry';\r\nimport { Light } from '../Lights/light';\r\nimport { StartsWith } from '../Misc/stringTools';\r\n\r\n/**\r\n * Type used for the success callback of ImportMesh\r\n */\r\nexport type SceneLoaderSuccessCallback = (\r\n meshes: AbstractMesh[],\r\n particleSystems: IParticleSystem[],\r\n skeletons: Skeleton[],\r\n animationGroups: AnimationGroup[],\r\n transformNodes: TransformNode[],\r\n geometries: Geometry[],\r\n lights: Light[]\r\n) => void;\r\n\r\n/**\r\n * Interface used for the result of ImportMeshAsync\r\n */\r\nexport interface ISceneLoaderAsyncResult {\r\n /**\r\n * The array of loaded meshes\r\n */\r\n readonly meshes: AbstractMesh[];\r\n\r\n /**\r\n * The array of loaded particle systems\r\n */\r\n readonly particleSystems: IParticleSystem[];\r\n\r\n /**\r\n * The array of loaded skeletons\r\n */\r\n readonly skeletons: Skeleton[];\r\n\r\n /**\r\n * The array of loaded animation groups\r\n */\r\n readonly animationGroups: AnimationGroup[];\r\n\r\n /**\r\n * The array of loaded transform nodes\r\n */\r\n readonly transformNodes: TransformNode[];\r\n\r\n /**\r\n * The array of loaded geometries\r\n */\r\n readonly geometries: Geometry[];\r\n\r\n /**\r\n * The array of loaded lights\r\n */\r\n readonly lights: Light[];\r\n}\r\n\r\n/**\r\n * Interface used to represent data loading progression\r\n */\r\nexport interface ISceneLoaderProgressEvent {\r\n /**\r\n * Defines if data length to load can be evaluated\r\n */\r\n readonly lengthComputable: boolean;\r\n\r\n /**\r\n * Defines the loaded data length\r\n */\r\n readonly loaded: number;\r\n\r\n /**\r\n * Defines the data length to load\r\n */\r\n readonly total: number;\r\n}\r\n\r\n/**\r\n * Interface used by SceneLoader plugins to define supported file extensions\r\n */\r\nexport interface ISceneLoaderPluginExtensions {\r\n /**\r\n * Defines the list of supported extensions\r\n */\r\n [extension: string]: {\r\n isBinary: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * Interface used by SceneLoader plugin factory\r\n */\r\nexport interface ISceneLoaderPluginFactory {\r\n /**\r\n * Defines the name of the factory\r\n */\r\n name: string;\r\n\r\n /**\r\n * Function called to create a new plugin\r\n * @return the new plugin\r\n */\r\n createPlugin(): ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n\r\n /**\r\n * The callback that returns true if the data can be directly loaded.\r\n * @param data string containing the file data\r\n * @returns if the data can be loaded directly\r\n */\r\n canDirectLoad?(data: string): boolean;\r\n}\r\n\r\n/**\r\n * Interface used to define the base of ISceneLoaderPlugin and ISceneLoaderPluginAsync\r\n */\r\nexport interface ISceneLoaderPluginBase {\r\n /**\r\n * The friendly name of this plugin.\r\n */\r\n name: string;\r\n\r\n /**\r\n * The file extensions supported by this plugin.\r\n */\r\n extensions: string | ISceneLoaderPluginExtensions;\r\n\r\n /**\r\n * The callback called when loading from a url.\r\n * @param scene scene loading this url\r\n * @param fileOrUrl file or 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 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 */\r\n loadFile?(scene: Scene, fileOrUrl: File | string, onSuccess: (data: any, responseURL?: string) => void, onProgress?: (ev: ISceneLoaderProgressEvent) => void, useArrayBuffer?: boolean, onError?: (request?: WebRequest, exception?: LoadFileError) => void): IFileRequest;\r\n\r\n /**\r\n * The callback that returns true if the data can be directly loaded.\r\n * @param data string containing the file data\r\n * @returns if the data can be loaded directly\r\n */\r\n canDirectLoad?(data: string): boolean;\r\n\r\n /**\r\n * The callback that returns the data to pass to the plugin if the data can be directly loaded.\r\n * @param scene scene loading this data\r\n * @param data string containing the data\r\n * @returns data to pass to the plugin\r\n */\r\n directLoad?(scene: Scene, data: string): any;\r\n\r\n /**\r\n * The callback that allows custom handling of the root url based on the response url.\r\n * @param rootUrl the original root url\r\n * @param responseURL the response url if available\r\n * @returns the new root url\r\n */\r\n rewriteRootURL?(rootUrl: string, responseURL?: string): string;\r\n}\r\n\r\n/**\r\n * Interface used to define a SceneLoader plugin\r\n */\r\nexport interface ISceneLoaderPlugin extends ISceneLoaderPluginBase {\r\n /**\r\n * Import meshes into a scene.\r\n * @param meshesNames An array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\r\n * @param scene The scene to import into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param meshes The meshes array to import into\r\n * @param particleSystems The particle systems array to import into\r\n * @param skeletons The skeletons array to import into\r\n * @param onError The callback when import fails\r\n * @returns True if successful or false otherwise\r\n */\r\n importMesh(meshesNames: any, scene: Scene, data: any, rootUrl: string, meshes: AbstractMesh[], particleSystems: IParticleSystem[], skeletons: Skeleton[], onError?: (message: string, exception?: any) => void): boolean;\r\n\r\n /**\r\n * Load into a scene.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onError The callback when import fails\r\n * @returns True if successful or false otherwise\r\n */\r\n load(scene: Scene, data: any, rootUrl: string, onError?: (message: string, exception?: any) => void): boolean;\r\n\r\n /**\r\n * Load into an asset container.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onError The callback when import fails\r\n * @returns The loaded asset container\r\n */\r\n loadAssetContainer(scene: Scene, data: any, rootUrl: string, onError?: (message: string, exception?: any) => void): AssetContainer;\r\n}\r\n\r\n/**\r\n * Interface used to define an async SceneLoader plugin\r\n */\r\nexport interface ISceneLoaderPluginAsync extends ISceneLoaderPluginBase {\r\n /**\r\n * Import meshes into a scene.\r\n * @param meshesNames An array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\r\n * @param scene The scene to import into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onProgress The callback when the load progresses\r\n * @param fileName Defines the name of the file to load\r\n * @returns The loaded objects (e.g. meshes, particle systems, skeletons, animation groups, etc.)\r\n */\r\n importMeshAsync(meshesNames: any, scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<ISceneLoaderAsyncResult>;\r\n\r\n /**\r\n * Load into a scene.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onProgress The callback when the load progresses\r\n * @param fileName Defines the name of the file to load\r\n * @returns Nothing\r\n */\r\n loadAsync(scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<void>;\r\n\r\n /**\r\n * Load into an asset container.\r\n * @param scene The scene to load into\r\n * @param data The data to import\r\n * @param rootUrl The root url for scene and resources\r\n * @param onProgress The callback when the load progresses\r\n * @param fileName Defines the name of the file to load\r\n * @returns The loaded asset container\r\n */\r\n loadAssetContainerAsync(scene: Scene, data: any, rootUrl: string, onProgress?: (event: ISceneLoaderProgressEvent) => void, fileName?: string): Promise<AssetContainer>;\r\n}\r\n\r\n/**\r\n * Mode that determines how to handle old animation groups before loading new ones.\r\n */\r\nexport enum SceneLoaderAnimationGroupLoadingMode {\r\n /**\r\n * Reset all old animations to initial state then dispose them.\r\n */\r\n Clean = 0,\r\n\r\n /**\r\n * Stop all old animations.\r\n */\r\n Stop = 1,\r\n\r\n /**\r\n * Restart old animations from first frame.\r\n */\r\n Sync = 2,\r\n\r\n /**\r\n * Old animations remains untouched.\r\n */\r\n NoSync = 3\r\n}\r\n\r\n/**\r\n * Defines a plugin registered by the SceneLoader\r\n */\r\ninterface IRegisteredPlugin {\r\n /**\r\n * Defines the plugin to use\r\n */\r\n plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync | ISceneLoaderPluginFactory;\r\n /**\r\n * Defines if the plugin supports binary data\r\n */\r\n isBinary: boolean;\r\n}\r\n\r\n/**\r\n * Defines file information\r\n */\r\ninterface IFileInfo {\r\n /**\r\n * Gets the file url\r\n */\r\n url: string;\r\n /**\r\n * Gets the root url\r\n */\r\n rootUrl: string;\r\n /**\r\n * Gets filename\r\n */\r\n name: string;\r\n /**\r\n * Gets the file\r\n */\r\n file: Nullable<File>;\r\n}\r\n\r\n/**\r\n * Class used to load scene from various file formats using registered plugins\r\n * @see https://doc.babylonjs.com/how_to/load_from_any_file_type\r\n */\r\nexport class SceneLoader {\r\n /**\r\n * No logging while loading\r\n */\r\n public static readonly NO_LOGGING = 0;\r\n\r\n /**\r\n * Minimal logging while loading\r\n */\r\n public static readonly MINIMAL_LOGGING = 1;\r\n\r\n /**\r\n * Summary logging while loading\r\n */\r\n public static readonly SUMMARY_LOGGING = 2;\r\n\r\n /**\r\n * Detailed logging while loading\r\n */\r\n public static readonly DETAILED_LOGGING = 3;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if entire scene must be loaded even if scene contains incremental data\r\n */\r\n public static get ForceFullSceneLoadingForIncremental() {\r\n return SceneLoaderFlags.ForceFullSceneLoadingForIncremental;\r\n }\r\n\r\n public static set ForceFullSceneLoadingForIncremental(value: boolean) {\r\n SceneLoaderFlags.ForceFullSceneLoadingForIncremental = value;\r\n }\r\n\r\n /**\r\n * Gets or sets a boolean indicating if loading screen must be displayed while loading a scene\r\n */\r\n public static get ShowLoadingScreen(): boolean {\r\n return SceneLoaderFlags.ShowLoadingScreen;\r\n }\r\n\r\n public static set ShowLoadingScreen(value: boolean) {\r\n SceneLoaderFlags.ShowLoadingScreen = value;\r\n }\r\n\r\n /**\r\n * Defines the current logging level (while loading the scene)\r\n * @ignorenaming\r\n */\r\n public static get loggingLevel(): number {\r\n return SceneLoaderFlags.loggingLevel;\r\n }\r\n\r\n public static set loggingLevel(value: number) {\r\n SceneLoaderFlags.loggingLevel = value;\r\n }\r\n\r\n /**\r\n * Gets or set a boolean indicating if matrix weights must be cleaned upon loading\r\n */\r\n public static get CleanBoneMatrixWeights(): boolean {\r\n return SceneLoaderFlags.CleanBoneMatrixWeights;\r\n }\r\n\r\n public static set CleanBoneMatrixWeights(value: boolean) {\r\n SceneLoaderFlags.CleanBoneMatrixWeights = value;\r\n }\r\n\r\n // Members\r\n\r\n /**\r\n * Event raised when a plugin is used to load a scene\r\n */\r\n public static OnPluginActivatedObservable = new Observable<ISceneLoaderPlugin | ISceneLoaderPluginAsync>();\r\n\r\n private static _registeredPlugins: { [extension: string]: IRegisteredPlugin } = {};\r\n\r\n private static _showingLoadingScreen = false;\r\n\r\n /**\r\n * Gets the default plugin (used to load Babylon files)\r\n * @returns the .babylon plugin\r\n */\r\n public static GetDefaultPlugin(): IRegisteredPlugin {\r\n return SceneLoader._registeredPlugins[\".babylon\"];\r\n }\r\n\r\n private static _GetPluginForExtension(extension: string): IRegisteredPlugin {\r\n var registeredPlugin = SceneLoader._registeredPlugins[extension];\r\n if (registeredPlugin) {\r\n return registeredPlugin;\r\n }\r\n Logger.Warn(\"Unable to find a plugin to load \" + extension + \" files. Trying to use .babylon default plugin. To load from a specific filetype (eg. gltf) see: https://doc.babylonjs.com/how_to/load_from_any_file_type\");\r\n return SceneLoader.GetDefaultPlugin();\r\n }\r\n\r\n private static _GetPluginForDirectLoad(data: string): IRegisteredPlugin {\r\n for (var extension in SceneLoader._registeredPlugins) {\r\n var plugin = SceneLoader._registeredPlugins[extension].plugin;\r\n\r\n if (plugin.canDirectLoad && plugin.canDirectLoad(data)) {\r\n return SceneLoader._registeredPlugins[extension];\r\n }\r\n }\r\n\r\n return SceneLoader.GetDefaultPlugin();\r\n }\r\n\r\n private static _GetPluginForFilename(sceneFilename: string): IRegisteredPlugin {\r\n var queryStringPosition = sceneFilename.indexOf(\"?\");\r\n\r\n if (queryStringPosition !== -1) {\r\n sceneFilename = sceneFilename.substring(0, queryStringPosition);\r\n }\r\n\r\n var dotPosition = sceneFilename.lastIndexOf(\".\");\r\n\r\n var extension = sceneFilename.substring(dotPosition, sceneFilename.length).toLowerCase();\r\n return SceneLoader._GetPluginForExtension(extension);\r\n }\r\n\r\n private static _GetDirectLoad(sceneFilename: string): Nullable<string> {\r\n if (sceneFilename.substr(0, 5) === \"data:\") {\r\n return sceneFilename.substr(5);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static _FormatErrorMessage(fileInfo: IFileInfo, message?: string, exception?: any): string {\r\n let errorMessage = \"Unable to load from \" + fileInfo.url;\r\n\r\n if (message) {\r\n errorMessage += `: ${message}`;\r\n }\r\n else if (exception) {\r\n errorMessage += `: ${exception}`;\r\n }\r\n\r\n return errorMessage;\r\n }\r\n\r\n private static _LoadData(fileInfo: IFileInfo, scene: Scene, onSuccess: (plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync, data: any, responseURL?: string) => void, onProgress: ((event: ISceneLoaderProgressEvent) => void) | undefined, onError: (message?: string, exception?: any) => void, onDispose: () => void, pluginExtension: Nullable<string>): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n const directLoad = SceneLoader._GetDirectLoad(fileInfo.url);\r\n const registeredPlugin = pluginExtension ? SceneLoader._GetPluginForExtension(pluginExtension) : (directLoad ? SceneLoader._GetPluginForDirectLoad(fileInfo.url) : SceneLoader._GetPluginForFilename(fileInfo.url));\r\n\r\n let plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync;\r\n if ((registeredPlugin.plugin as ISceneLoaderPluginFactory).createPlugin !== undefined) {\r\n plugin = (registeredPlugin.plugin as ISceneLoaderPluginFactory).createPlugin();\r\n }\r\n else {\r\n plugin = <any>registeredPlugin.plugin;\r\n }\r\n\r\n if (!plugin) {\r\n throw \"The loader plugin corresponding to the file type you are trying to load has not been found. If using es6, please import the plugin you wish to use before.\";\r\n }\r\n\r\n SceneLoader.OnPluginActivatedObservable.notifyObservers(plugin);\r\n\r\n // Check if we have a direct load url. If the plugin is registered to handle\r\n // it or it's not a base64 data url, then pass it through the direct load path.\r\n if (directLoad && ((plugin.canDirectLoad && plugin.canDirectLoad(fileInfo.url) || !IsBase64DataUrl(fileInfo.url)))) {\r\n if (plugin.directLoad) {\r\n const result = plugin.directLoad(scene, directLoad);\r\n if (result.then) {\r\n result.then((data: any) => {\r\n onSuccess(plugin, data);\r\n }).catch((error: any) => {\r\n onError(\"Error in directLoad of _loadData: \" + error, error);\r\n });\r\n }\r\n else {\r\n onSuccess(plugin, result);\r\n }\r\n } else {\r\n onSuccess(plugin, directLoad);\r\n }\r\n return plugin;\r\n }\r\n\r\n const useArrayBuffer = registeredPlugin.isBinary;\r\n\r\n const dataCallback = (data: any, responseURL?: string) => {\r\n if (scene.isDisposed) {\r\n onError(\"Scene has been disposed\");\r\n return;\r\n }\r\n\r\n onSuccess(plugin, data, responseURL);\r\n };\r\n\r\n let request: Nullable<IFileRequest> = null;\r\n let pluginDisposed = false;\r\n const onDisposeObservable = (plugin as any).onDisposeObservable as Observable<ISceneLoaderPlugin | ISceneLoaderPluginAsync>;\r\n if (onDisposeObservable) {\r\n onDisposeObservable.add(() => {\r\n pluginDisposed = true;\r\n\r\n if (request) {\r\n request.abort();\r\n request = null;\r\n }\r\n\r\n onDispose();\r\n });\r\n }\r\n\r\n const manifestChecked = () => {\r\n if (pluginDisposed) {\r\n return;\r\n }\r\n\r\n const errorCallback = (request?: WebRequest, exception?: LoadFileError) => {\r\n onError(request?.statusText, exception);\r\n };\r\n\r\n const fileOrUrl = fileInfo.file || fileInfo.url;\r\n request = plugin.loadFile\r\n ? plugin.loadFile(scene, fileOrUrl, dataCallback, onProgress, useArrayBuffer, errorCallback)\r\n : scene._loadFile(fileOrUrl, dataCallback, onProgress, true, useArrayBuffer, errorCallback);\r\n };\r\n\r\n const engine = scene.getEngine();\r\n let canUseOfflineSupport = engine.enableOfflineSupport;\r\n if (canUseOfflineSupport) {\r\n // Also check for exceptions\r\n let exceptionFound = false;\r\n for (var regex of scene.disableOfflineSupportExceptionRules) {\r\n if (regex.test(fileInfo.url)) {\r\n exceptionFound = true;\r\n break;\r\n }\r\n }\r\n\r\n canUseOfflineSupport = !exceptionFound;\r\n }\r\n\r\n if (canUseOfflineSupport && Engine.OfflineProviderFactory) {\r\n // Checking if a manifest file has been set for this scene and if offline mode has been requested\r\n scene.offlineProvider = Engine.OfflineProviderFactory(fileInfo.url, manifestChecked, engine.disableManifestCheck);\r\n }\r\n else {\r\n manifestChecked();\r\n }\r\n\r\n return plugin;\r\n }\r\n\r\n private static _GetFileInfo(rootUrl: string, sceneFilename: string | File): Nullable<IFileInfo> {\r\n let url: string;\r\n let name: string;\r\n let file: Nullable<File> = null;\r\n\r\n if (!sceneFilename) {\r\n url = rootUrl;\r\n name = Tools.GetFilename(rootUrl);\r\n rootUrl = Tools.GetFolderPath(rootUrl);\r\n }\r\n else if ((sceneFilename as File).name) {\r\n const sceneFile = sceneFilename as File;\r\n url = `file:${sceneFile.name}`;\r\n name = sceneFile.name;\r\n file = sceneFile;\r\n }\r\n else if (typeof sceneFilename === \"string\" && StartsWith(sceneFilename, \"data:\")) {\r\n url = sceneFilename;\r\n name = \"\";\r\n }\r\n else {\r\n const filename = sceneFilename as string;\r\n if (filename.substr(0, 1) === \"/\") {\r\n Tools.Error(\"Wrong sceneFilename parameter\");\r\n return null;\r\n }\r\n\r\n url = rootUrl + filename;\r\n name = filename;\r\n }\r\n\r\n return {\r\n url: url,\r\n rootUrl: rootUrl,\r\n name: name,\r\n file: file\r\n };\r\n }\r\n\r\n // Public functions\r\n\r\n /**\r\n * Gets a plugin that can load the given extension\r\n * @param extension defines the extension to load\r\n * @returns a plugin or null if none works\r\n */\r\n public static GetPluginForExtension(extension: string): ISceneLoaderPlugin | ISceneLoaderPluginAsync | ISceneLoaderPluginFactory {\r\n return SceneLoader._GetPluginForExtension(extension).plugin;\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the given extension can be loaded\r\n * @param extension defines the extension to load\r\n * @returns true if the extension is supported\r\n */\r\n public static IsPluginForExtensionAvailable(extension: string): boolean {\r\n return !!SceneLoader._registeredPlugins[extension];\r\n }\r\n\r\n /**\r\n * Adds a new plugin to the list of registered plugins\r\n * @param plugin defines the plugin to add\r\n */\r\n public static RegisterPlugin(plugin: ISceneLoaderPlugin | ISceneLoaderPluginAsync): void {\r\n if (typeof plugin.extensions === \"string\") {\r\n var extension = <string>plugin.extensions;\r\n SceneLoader._registeredPlugins[extension.toLowerCase()] = {\r\n plugin: plugin,\r\n isBinary: false\r\n };\r\n }\r\n else {\r\n var extensions = <ISceneLoaderPluginExtensions>plugin.extensions;\r\n Object.keys(extensions).forEach((extension) => {\r\n SceneLoader._registeredPlugins[extension.toLowerCase()] = {\r\n plugin: plugin,\r\n isBinary: extensions[extension].isBinary\r\n };\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Import meshes into a scene\r\n * @param meshNames an array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene the instance of BABYLON.Scene to append to\r\n * @param onSuccess a callback with a list of imported meshes, particleSystems, skeletons, and animationGroups when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded plugin\r\n */\r\n public static ImportMesh(meshNames: any, rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onSuccess: Nullable<SceneLoaderSuccessCallback> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to import mesh to\");\r\n return null;\r\n }\r\n\r\n const fileInfo = SceneLoader._GetFileInfo(rootUrl, sceneFilename);\r\n if (!fileInfo) {\r\n return null;\r\n }\r\n\r\n var loadingToken = {};\r\n scene._addPendingData(loadingToken);\r\n\r\n var disposeHandler = () => {\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n var errorHandler = (message?: string, exception?: any) => {\r\n const errorMessage = SceneLoader._FormatErrorMessage(fileInfo, message, exception);\r\n\r\n if (onError) {\r\n onError(scene, errorMessage, new Error(errorMessage));\r\n } else {\r\n Logger.Error(errorMessage);\r\n // should the exception be thrown?\r\n }\r\n\r\n disposeHandler();\r\n };\r\n\r\n var progressHandler = onProgress ? (event: ISceneLoaderProgressEvent) => {\r\n try {\r\n onProgress(event);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onProgress callback: \" + e, e);\r\n }\r\n } : undefined;\r\n\r\n var successHandler: SceneLoaderSuccessCallback = (meshes, particleSystems, skeletons, animationGroups, transformNodes, geometries, lights) => {\r\n scene.importedMeshesFiles.push(fileInfo.url);\r\n\r\n if (onSuccess) {\r\n try {\r\n onSuccess(meshes, particleSystems, skeletons, animationGroups, transformNodes, geometries, lights);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onSuccess callback: \" + e, e);\r\n }\r\n }\r\n\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n return SceneLoader._LoadData(fileInfo, scene, (plugin, data, responseURL) => {\r\n if (plugin.rewriteRootURL) {\r\n fileInfo.rootUrl = plugin.rewriteRootURL(fileInfo.rootUrl, responseURL);\r\n }\r\n\r\n if ((<any>plugin).importMesh) {\r\n var syncedPlugin = <ISceneLoaderPlugin>plugin;\r\n var meshes = new Array<AbstractMesh>();\r\n var particleSystems = new Array<IParticleSystem>();\r\n var skeletons = new Array<Skeleton>();\r\n\r\n if (!syncedPlugin.importMesh(meshNames, scene, data, fileInfo.rootUrl, meshes, particleSystems, skeletons, errorHandler)) {\r\n return;\r\n }\r\n\r\n scene.loadingPluginName = plugin.name;\r\n successHandler(meshes, particleSystems, skeletons, [], [], [], []);\r\n }\r\n else {\r\n var asyncedPlugin = <ISceneLoaderPluginAsync>plugin;\r\n asyncedPlugin.importMeshAsync(meshNames, scene, data, fileInfo.rootUrl, progressHandler, fileInfo.name).then((result) => {\r\n scene.loadingPluginName = plugin.name;\r\n successHandler(result.meshes, result.particleSystems, result.skeletons, result.animationGroups, result.transformNodes, result.geometries, result.lights);\r\n }).catch((error) => {\r\n errorHandler(error.message, error);\r\n });\r\n }\r\n }, progressHandler, errorHandler, disposeHandler, pluginExtension);\r\n }\r\n\r\n /**\r\n * Import meshes into a scene\r\n * @param meshNames an array of mesh names, a single mesh name, or empty string for all meshes that filter what meshes are imported\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene the instance of BABYLON.Scene to append to\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded list of imported meshes, particle systems, skeletons, and animation groups\r\n */\r\n public static ImportMeshAsync(meshNames: any, rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, pluginExtension: Nullable<string> = null): Promise<ISceneLoaderAsyncResult> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.ImportMesh(meshNames, rootUrl, sceneFilename, scene, (meshes, particleSystems, skeletons, animationGroups, transformNodes, geometries, lights) => {\r\n resolve({\r\n meshes: meshes,\r\n particleSystems: particleSystems,\r\n skeletons: skeletons,\r\n animationGroups: animationGroups,\r\n transformNodes: transformNodes,\r\n geometries: geometries,\r\n lights: lights\r\n });\r\n }, onProgress, (scene, message, exception) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n\r\n /**\r\n * Load a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param engine is the instance of BABYLON.Engine to use to create the scene\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded plugin\r\n */\r\n public static Load(rootUrl: string, sceneFilename: string | File = \"\", engine: Nullable<Engine> = EngineStore.LastCreatedEngine, onSuccess: Nullable<(scene: Scene) => void> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n if (!engine) {\r\n Tools.Error(\"No engine available\");\r\n return null;\r\n }\r\n\r\n return SceneLoader.Append(rootUrl, sceneFilename, new Scene(engine), onSuccess, onProgress, onError, pluginExtension);\r\n }\r\n\r\n /**\r\n * Load a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param engine is the instance of BABYLON.Engine to use to create the scene\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded scene\r\n */\r\n public static LoadAsync(rootUrl: string, sceneFilename: string | File = \"\", engine: Nullable<Engine> = EngineStore.LastCreatedEngine, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, pluginExtension: Nullable<string> = null): Promise<Scene> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.Load(rootUrl, sceneFilename, engine, (scene) => {\r\n resolve(scene);\r\n }, onProgress, (scene, message, exception) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n\r\n /**\r\n * Append a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded plugin\r\n */\r\n public static Append(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onSuccess: Nullable<(scene: Scene) => void> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to append to\");\r\n return null;\r\n }\r\n\r\n const fileInfo = SceneLoader._GetFileInfo(rootUrl, sceneFilename);\r\n if (!fileInfo) {\r\n return null;\r\n }\r\n\r\n if (SceneLoader.ShowLoadingScreen && !this._showingLoadingScreen) {\r\n this._showingLoadingScreen = true;\r\n scene.getEngine().displayLoadingUI();\r\n scene.executeWhenReady(() => {\r\n scene.getEngine().hideLoadingUI();\r\n this._showingLoadingScreen = false;\r\n });\r\n }\r\n\r\n var loadingToken = {};\r\n scene._addPendingData(loadingToken);\r\n\r\n var disposeHandler = () => {\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n var errorHandler = (message?: string, exception?: any) => {\r\n const errorMessage = SceneLoader._FormatErrorMessage(fileInfo, message, exception);\r\n\r\n if (onError) {\r\n onError(scene, errorMessage, new Error(errorMessage));\r\n } else {\r\n Logger.Error(errorMessage);\r\n // should the exception be thrown?\r\n }\r\n\r\n disposeHandler();\r\n };\r\n\r\n var progressHandler = onProgress ? (event: ISceneLoaderProgressEvent) => {\r\n try {\r\n onProgress(event);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onProgress callback\", e);\r\n }\r\n } : undefined;\r\n\r\n var successHandler = () => {\r\n if (onSuccess) {\r\n try {\r\n onSuccess(scene);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onSuccess callback\", e);\r\n }\r\n }\r\n\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n return SceneLoader._LoadData(fileInfo, scene, (plugin, data) => {\r\n if ((<any>plugin).load) {\r\n var syncedPlugin = <ISceneLoaderPlugin>plugin;\r\n if (!syncedPlugin.load(scene, data, fileInfo.rootUrl, errorHandler)) {\r\n return;\r\n }\r\n\r\n scene.loadingPluginName = plugin.name;\r\n successHandler();\r\n } else {\r\n var asyncedPlugin = <ISceneLoaderPluginAsync>plugin;\r\n asyncedPlugin.loadAsync(scene, data, fileInfo.rootUrl, progressHandler, fileInfo.name).then(() => {\r\n scene.loadingPluginName = plugin.name;\r\n successHandler();\r\n }).catch((error) => {\r\n errorHandler(error.message, error);\r\n });\r\n }\r\n }, progressHandler, errorHandler, disposeHandler, pluginExtension);\r\n }\r\n\r\n /**\r\n * Append a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The given scene\r\n */\r\n public static AppendAsync(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, pluginExtension: Nullable<string> = null): Promise<Scene> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.Append(rootUrl, sceneFilename, scene, (scene) => {\r\n resolve(scene);\r\n }, onProgress, (scene, message, exception) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n\r\n /**\r\n * Load a scene into an asset container\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded plugin\r\n */\r\n public static LoadAssetContainer(\r\n rootUrl: string,\r\n sceneFilename: string | File = \"\",\r\n scene: Nullable<Scene> = EngineStore.LastCreatedScene,\r\n onSuccess: Nullable<(assets: AssetContainer) => void> = null,\r\n onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null,\r\n onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null,\r\n pluginExtension: Nullable<string> = null\r\n ): Nullable<ISceneLoaderPlugin | ISceneLoaderPluginAsync> {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to load asset container to\");\r\n return null;\r\n }\r\n\r\n const fileInfo = SceneLoader._GetFileInfo(rootUrl, sceneFilename);\r\n if (!fileInfo) {\r\n return null;\r\n }\r\n\r\n var loadingToken = {};\r\n scene._addPendingData(loadingToken);\r\n\r\n var disposeHandler = () => {\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n var errorHandler = (message?: string, exception?: any) => {\r\n const errorMessage = SceneLoader._FormatErrorMessage(fileInfo, message, exception);\r\n\r\n if (onError) {\r\n onError(scene, errorMessage, new Error(errorMessage));\r\n } else {\r\n Logger.Error(errorMessage);\r\n // should the exception be thrown?\r\n }\r\n\r\n disposeHandler();\r\n };\r\n\r\n var progressHandler = onProgress ? (event: ISceneLoaderProgressEvent) => {\r\n try {\r\n onProgress(event);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onProgress callback\", e);\r\n }\r\n } : undefined;\r\n\r\n var successHandler = (assets: AssetContainer) => {\r\n if (onSuccess) {\r\n try {\r\n onSuccess(assets);\r\n }\r\n catch (e) {\r\n errorHandler(\"Error in onSuccess callback\", e);\r\n }\r\n }\r\n\r\n scene._removePendingData(loadingToken);\r\n };\r\n\r\n return SceneLoader._LoadData(fileInfo, scene, (plugin, data) => {\r\n if ((<any>plugin).loadAssetContainer) {\r\n var syncedPlugin = <ISceneLoaderPlugin>plugin;\r\n var assetContainer = syncedPlugin.loadAssetContainer(scene, data, fileInfo.rootUrl, errorHandler);\r\n if (!assetContainer) {\r\n return;\r\n }\r\n\r\n scene.loadingPluginName = plugin.name;\r\n successHandler(assetContainer);\r\n } else if ((<any>plugin).loadAssetContainerAsync) {\r\n var asyncedPlugin = <ISceneLoaderPluginAsync>plugin;\r\n asyncedPlugin.loadAssetContainerAsync(scene, data, fileInfo.rootUrl, progressHandler, fileInfo.name).then((assetContainer) => {\r\n scene.loadingPluginName = plugin.name;\r\n successHandler(assetContainer);\r\n }).catch((error) => {\r\n errorHandler(error.message, error);\r\n });\r\n } else {\r\n errorHandler(\"LoadAssetContainer is not supported by this plugin. Plugin did not provide a loadAssetContainer or loadAssetContainerAsync method.\");\r\n }\r\n }, progressHandler, errorHandler, disposeHandler, pluginExtension);\r\n }\r\n\r\n /**\r\n * Load a scene into an asset container\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene (default: empty string)\r\n * @param scene is the instance of Scene to append to\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns The loaded asset container\r\n */\r\n public static LoadAssetContainerAsync(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, pluginExtension: Nullable<string> = null): Promise<AssetContainer> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.LoadAssetContainer(rootUrl, sceneFilename, scene, (assetContainer) => {\r\n resolve(assetContainer);\r\n }, onProgress, (scene, message, exception) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n\r\n /**\r\n * Import animations from a file into a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param overwriteAnimations when true, animations are cleaned before importing new ones. Animations are appended otherwise\r\n * @param animationGroupLoadingMode defines how to handle old animations groups before importing new ones\r\n * @param targetConverter defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n */\r\n public static ImportAnimations(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, overwriteAnimations = true, animationGroupLoadingMode = SceneLoaderAnimationGroupLoadingMode.Clean, targetConverter: Nullable<(target: any) => any> = null, onSuccess: Nullable<(scene: Scene) => void> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): void {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to load animations to\");\r\n return;\r\n }\r\n\r\n if (overwriteAnimations) {\r\n // Reset, stop and dispose all animations before loading new ones\r\n for (let animatable of scene.animatables) {\r\n animatable.reset();\r\n }\r\n scene.stopAllAnimations();\r\n scene.animationGroups.slice().forEach((animationGroup) => {\r\n animationGroup.dispose();\r\n });\r\n let nodes = scene.getNodes();\r\n nodes.forEach((node) => {\r\n if (node.animations) {\r\n node.animations = [];\r\n }\r\n });\r\n }\r\n else {\r\n switch (animationGroupLoadingMode) {\r\n case SceneLoaderAnimationGroupLoadingMode.Clean:\r\n scene.animationGroups.slice().forEach((animationGroup) => {\r\n animationGroup.dispose();\r\n });\r\n break;\r\n case SceneLoaderAnimationGroupLoadingMode.Stop:\r\n scene.animationGroups.forEach((animationGroup) => {\r\n animationGroup.stop();\r\n });\r\n break;\r\n case SceneLoaderAnimationGroupLoadingMode.Sync:\r\n scene.animationGroups.forEach((animationGroup) => {\r\n animationGroup.reset();\r\n animationGroup.restart();\r\n });\r\n break;\r\n case SceneLoaderAnimationGroupLoadingMode.NoSync:\r\n // nothing to do\r\n break;\r\n default:\r\n Logger.Error(\"Unknown animation group loading mode value '\" + animationGroupLoadingMode + \"'\");\r\n return;\r\n }\r\n }\r\n\r\n let startingIndexForNewAnimatables = scene.animatables.length;\r\n\r\n let onAssetContainerLoaded = (container: AssetContainer) => {\r\n container.mergeAnimationsTo(scene, scene.animatables.slice(startingIndexForNewAnimatables), targetConverter);\r\n\r\n container.dispose();\r\n\r\n scene.onAnimationFileImportedObservable.notifyObservers(scene);\r\n\r\n if (onSuccess) {\r\n onSuccess(scene);\r\n }\r\n };\r\n\r\n this.LoadAssetContainer(rootUrl, sceneFilename, scene, onAssetContainerLoaded, onProgress, onError, pluginExtension);\r\n }\r\n\r\n /**\r\n * Import animations from a file into a scene\r\n * @param rootUrl a string that defines the root url for the scene and resources or the concatenation of rootURL and filename (e.g. http://example.com/test.glb)\r\n * @param sceneFilename a string that defines the name of the scene file or starts with \"data:\" following by the stringified version of the scene or a File object (default: empty string)\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param overwriteAnimations when true, animations are cleaned before importing new ones. Animations are appended otherwise\r\n * @param animationGroupLoadingMode defines how to handle old animations groups before importing new ones\r\n * @param targetConverter defines a function used to convert animation targets from loaded scene to current scene (default: search node by name)\r\n * @param onSuccess a callback with the scene when import succeeds\r\n * @param onProgress a callback with a progress event for each file being loaded\r\n * @param onError a callback with the scene, a message, and possibly an exception when import fails\r\n * @param pluginExtension the extension used to determine the plugin\r\n * @returns the updated scene with imported animations\r\n */\r\n public static ImportAnimationsAsync(rootUrl: string, sceneFilename: string | File = \"\", scene: Nullable<Scene> = EngineStore.LastCreatedScene, overwriteAnimations = true, animationGroupLoadingMode = SceneLoaderAnimationGroupLoadingMode.Clean, targetConverter: Nullable<(target: any) => any> = null, onSuccess: Nullable<(scene: Scene) => void> = null, onProgress: Nullable<(event: ISceneLoaderProgressEvent) => void> = null, onError: Nullable<(scene: Scene, message: string, exception?: any) => void> = null, pluginExtension: Nullable<string> = null): Promise<Scene> {\r\n return new Promise((resolve, reject) => {\r\n SceneLoader.ImportAnimations(rootUrl, sceneFilename, scene, overwriteAnimations, animationGroupLoadingMode, targetConverter, (_scene: Scene) => {\r\n resolve(_scene);\r\n }, onProgress, (_scene: Scene, message: string, exception: any) => {\r\n reject(exception || new Error(message));\r\n }, pluginExtension);\r\n });\r\n }\r\n}\r\n"]}
@@ -0,0 +1,37 @@
1
+ import { NodeMaterialBlock } from "../../nodeMaterialBlock";
2
+ import { NodeMaterialBuildState } from "../../nodeMaterialBuildState";
3
+ import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets";
4
+ import { NodeMaterialConnectionPoint } from "../../nodeMaterialBlockConnectionPoint";
5
+ import { Effect } from "../../../effect";
6
+ import { NodeMaterial, NodeMaterialDefines } from "../../nodeMaterial";
7
+ import { Mesh } from "../../../../Meshes/mesh";
8
+ import { AbstractMesh } from "../../../../Meshes/abstractMesh";
9
+ /**
10
+ * Block used to implement clip planes
11
+ */
12
+ export declare class ClipPlanesBlock extends NodeMaterialBlock {
13
+ /**
14
+ * Create a new ClipPlanesBlock
15
+ * @param name defines the block name
16
+ */
17
+ constructor(name: string);
18
+ /**
19
+ * Gets the current class name
20
+ * @returns the class name
21
+ */
22
+ getClassName(): string;
23
+ /**
24
+ * Initialize the block and prepare the context for build
25
+ * @param state defines the state that will be used for the build
26
+ */
27
+ initialize(state: NodeMaterialBuildState): void;
28
+ /**
29
+ * Gets the worldPosition input component
30
+ */
31
+ get worldPosition(): NodeMaterialConnectionPoint;
32
+ get target(): NodeMaterialBlockTargets;
33
+ set target(value: NodeMaterialBlockTargets);
34
+ prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines): void;
35
+ bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh): void;
36
+ protected _buildBlock(state: NodeMaterialBuildState): this | undefined;
37
+ }
@@ -0,0 +1,117 @@
1
+ import { __extends } from "tslib";
2
+ import { NodeMaterialBlock } from "../../nodeMaterialBlock.js";
3
+ import { NodeMaterialBlockConnectionPointTypes } from "../../Enums/nodeMaterialBlockConnectionPointTypes.js";
4
+ import { NodeMaterialBlockTargets } from "../../Enums/nodeMaterialBlockTargets.js";
5
+ import { RegisterClass } from "../../../../Misc/typeStore.js";
6
+ import { MaterialHelper } from "../../../materialHelper.js";
7
+ /**
8
+ * Block used to implement clip planes
9
+ */
10
+ var ClipPlanesBlock = /** @class */ (function (_super) {
11
+ __extends(ClipPlanesBlock, _super);
12
+ /**
13
+ * Create a new ClipPlanesBlock
14
+ * @param name defines the block name
15
+ */
16
+ function ClipPlanesBlock(name) {
17
+ var _this = _super.call(this, name, NodeMaterialBlockTargets.VertexAndFragment, true) || this;
18
+ _this.registerInput("worldPosition", NodeMaterialBlockConnectionPointTypes.Vector4, false);
19
+ return _this;
20
+ }
21
+ /**
22
+ * Gets the current class name
23
+ * @returns the class name
24
+ */
25
+ ClipPlanesBlock.prototype.getClassName = function () {
26
+ return "ClipPlanesBlock";
27
+ };
28
+ /**
29
+ * Initialize the block and prepare the context for build
30
+ * @param state defines the state that will be used for the build
31
+ */
32
+ ClipPlanesBlock.prototype.initialize = function (state) {
33
+ state._excludeVariableName("vClipPlane");
34
+ state._excludeVariableName("fClipDistance");
35
+ state._excludeVariableName("vClipPlane2");
36
+ state._excludeVariableName("fClipDistance2");
37
+ state._excludeVariableName("vClipPlane3");
38
+ state._excludeVariableName("fClipDistance3");
39
+ state._excludeVariableName("vClipPlane4");
40
+ state._excludeVariableName("fClipDistance4");
41
+ state._excludeVariableName("vClipPlane5");
42
+ state._excludeVariableName("fClipDistance5");
43
+ state._excludeVariableName("vClipPlane6");
44
+ state._excludeVariableName("fClipDistance6");
45
+ };
46
+ Object.defineProperty(ClipPlanesBlock.prototype, "worldPosition", {
47
+ /**
48
+ * Gets the worldPosition input component
49
+ */
50
+ get: function () {
51
+ return this._inputs[0];
52
+ },
53
+ enumerable: false,
54
+ configurable: true
55
+ });
56
+ Object.defineProperty(ClipPlanesBlock.prototype, "target", {
57
+ get: function () {
58
+ return NodeMaterialBlockTargets.VertexAndFragment;
59
+ },
60
+ set: function (value) { },
61
+ enumerable: false,
62
+ configurable: true
63
+ });
64
+ ClipPlanesBlock.prototype.prepareDefines = function (mesh, nodeMaterial, defines) {
65
+ var scene = mesh.getScene();
66
+ var useClipPlane1 = scene.clipPlane !== undefined && scene.clipPlane !== null;
67
+ var useClipPlane2 = scene.clipPlane2 !== undefined && scene.clipPlane2 !== null;
68
+ var useClipPlane3 = scene.clipPlane3 !== undefined && scene.clipPlane3 !== null;
69
+ var useClipPlane4 = scene.clipPlane4 !== undefined && scene.clipPlane4 !== null;
70
+ var useClipPlane5 = scene.clipPlane5 !== undefined && scene.clipPlane5 !== null;
71
+ var useClipPlane6 = scene.clipPlane6 !== undefined && scene.clipPlane6 !== null;
72
+ defines.setValue("CLIPPLANE", useClipPlane1, true);
73
+ defines.setValue("CLIPPLANE2", useClipPlane2, true);
74
+ defines.setValue("CLIPPLANE3", useClipPlane3, true);
75
+ defines.setValue("CLIPPLANE4", useClipPlane4, true);
76
+ defines.setValue("CLIPPLANE5", useClipPlane5, true);
77
+ defines.setValue("CLIPPLANE6", useClipPlane6, true);
78
+ };
79
+ ClipPlanesBlock.prototype.bind = function (effect, nodeMaterial, mesh) {
80
+ if (!mesh) {
81
+ return;
82
+ }
83
+ var scene = mesh.getScene();
84
+ MaterialHelper.BindClipPlane(effect, scene);
85
+ };
86
+ ClipPlanesBlock.prototype._buildBlock = function (state) {
87
+ _super.prototype._buildBlock.call(this, state);
88
+ var comments = "//".concat(this.name);
89
+ if (state.target !== NodeMaterialBlockTargets.Fragment) {
90
+ // Vertex
91
+ var worldPos = this.worldPosition;
92
+ state._emitFunctionFromInclude("clipPlaneVertexDeclaration", comments, {
93
+ replaceStrings: [{ search: /uniform vec4 vClipPlane\d*;/g, replace: "" }],
94
+ });
95
+ state.compilationString += state._emitCodeFromInclude("clipPlaneVertex", comments, {
96
+ replaceStrings: [{ search: /worldPos/g, replace: worldPos.associatedVariableName }],
97
+ });
98
+ state._emitUniformFromString("vClipPlane", "vec4");
99
+ state._emitUniformFromString("vClipPlane2", "vec4");
100
+ state._emitUniformFromString("vClipPlane3", "vec4");
101
+ state._emitUniformFromString("vClipPlane4", "vec4");
102
+ state._emitUniformFromString("vClipPlane5", "vec4");
103
+ state._emitUniformFromString("vClipPlane6", "vec4");
104
+ return;
105
+ }
106
+ // Fragment
107
+ state.sharedData.bindableBlocks.push(this);
108
+ state.sharedData.blocksWithDefines.push(this);
109
+ state._emitFunctionFromInclude("clipPlaneFragmentDeclaration", comments);
110
+ state.compilationString += state._emitCodeFromInclude("clipPlaneFragment", comments);
111
+ return this;
112
+ };
113
+ return ClipPlanesBlock;
114
+ }(NodeMaterialBlock));
115
+ export { ClipPlanesBlock };
116
+ RegisterClass("BABYLON.ClipPlanesBlock", ClipPlanesBlock);
117
+ //# sourceMappingURL=clipPlanesBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipPlanesBlock.js","sourceRoot":"","sources":["../../../../../../sourceES6/core/Materials/Node/Blocks/Dual/clipPlanesBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import { NodeMaterialBlock } from \"../../nodeMaterialBlock\";\r\nimport { NodeMaterialBlockConnectionPointTypes } from \"../../Enums/nodeMaterialBlockConnectionPointTypes\";\r\nimport { NodeMaterialBuildState } from \"../../nodeMaterialBuildState\";\r\nimport { NodeMaterialBlockTargets } from \"../../Enums/nodeMaterialBlockTargets\";\r\nimport { NodeMaterialConnectionPoint } from \"../../nodeMaterialBlockConnectionPoint\";\r\nimport { RegisterClass } from \"../../../../Misc/typeStore\";\r\nimport { MaterialHelper } from \"../../../materialHelper\";\r\nimport { Effect } from \"../../../effect\";\r\nimport { NodeMaterial, NodeMaterialDefines } from \"../../nodeMaterial\";\r\nimport { Mesh } from \"../../../../Meshes/mesh\";\r\nimport { AbstractMesh } from \"../../../../Meshes/abstractMesh\";\r\n/**\r\n * Block used to implement clip planes\r\n */\r\nexport class ClipPlanesBlock extends NodeMaterialBlock {\r\n /**\r\n * Create a new ClipPlanesBlock\r\n * @param name defines the block name\r\n */\r\n public constructor(name: string) {\r\n super(name, NodeMaterialBlockTargets.VertexAndFragment, true);\r\n\r\n this.registerInput(\"worldPosition\", NodeMaterialBlockConnectionPointTypes.Vector4, false);\r\n }\r\n\r\n /**\r\n * Gets the current class name\r\n * @returns the class name\r\n */\r\n public getClassName() {\r\n return \"ClipPlanesBlock\";\r\n }\r\n\r\n /**\r\n * Initialize the block and prepare the context for build\r\n * @param state defines the state that will be used for the build\r\n */\r\n public initialize(state: NodeMaterialBuildState) {\r\n state._excludeVariableName(\"vClipPlane\");\r\n state._excludeVariableName(\"fClipDistance\");\r\n state._excludeVariableName(\"vClipPlane2\");\r\n state._excludeVariableName(\"fClipDistance2\");\r\n state._excludeVariableName(\"vClipPlane3\");\r\n state._excludeVariableName(\"fClipDistance3\");\r\n state._excludeVariableName(\"vClipPlane4\");\r\n state._excludeVariableName(\"fClipDistance4\");\r\n state._excludeVariableName(\"vClipPlane5\");\r\n state._excludeVariableName(\"fClipDistance5\");\r\n state._excludeVariableName(\"vClipPlane6\");\r\n state._excludeVariableName(\"fClipDistance6\");\r\n }\r\n\r\n /**\r\n * Gets the worldPosition input component\r\n */\r\n public get worldPosition(): NodeMaterialConnectionPoint {\r\n return this._inputs[0];\r\n }\r\n\r\n public get target() {\r\n return NodeMaterialBlockTargets.VertexAndFragment;\r\n }\r\n\r\n public set target(value: NodeMaterialBlockTargets) {}\r\n\r\n public prepareDefines(mesh: AbstractMesh, nodeMaterial: NodeMaterial, defines: NodeMaterialDefines) {\r\n const scene = mesh.getScene();\r\n\r\n const useClipPlane1 = scene.clipPlane !== undefined && scene.clipPlane !== null;\r\n const useClipPlane2 = scene.clipPlane2 !== undefined && scene.clipPlane2 !== null;\r\n const useClipPlane3 = scene.clipPlane3 !== undefined && scene.clipPlane3 !== null;\r\n const useClipPlane4 = scene.clipPlane4 !== undefined && scene.clipPlane4 !== null;\r\n const useClipPlane5 = scene.clipPlane5 !== undefined && scene.clipPlane5 !== null;\r\n const useClipPlane6 = scene.clipPlane6 !== undefined && scene.clipPlane6 !== null;\r\n\r\n defines.setValue(\"CLIPPLANE\", useClipPlane1, true);\r\n defines.setValue(\"CLIPPLANE2\", useClipPlane2, true);\r\n defines.setValue(\"CLIPPLANE3\", useClipPlane3, true);\r\n defines.setValue(\"CLIPPLANE4\", useClipPlane4, true);\r\n defines.setValue(\"CLIPPLANE5\", useClipPlane5, true);\r\n defines.setValue(\"CLIPPLANE6\", useClipPlane6, true);\r\n }\r\n\r\n public bind(effect: Effect, nodeMaterial: NodeMaterial, mesh?: Mesh) {\r\n if (!mesh) {\r\n return;\r\n }\r\n\r\n const scene = mesh.getScene();\r\n\r\n MaterialHelper.BindClipPlane(effect, scene);\r\n }\r\n\r\n protected _buildBlock(state: NodeMaterialBuildState) {\r\n super._buildBlock(state);\r\n\r\n let comments = `//${this.name}`;\r\n if (state.target !== NodeMaterialBlockTargets.Fragment) {\r\n // Vertex\r\n let worldPos = this.worldPosition;\r\n\r\n state._emitFunctionFromInclude(\"clipPlaneVertexDeclaration\", comments, {\r\n replaceStrings: [{ search: /uniform vec4 vClipPlane\\d*;/g, replace: \"\" }],\r\n });\r\n state.compilationString += state._emitCodeFromInclude(\"clipPlaneVertex\", comments, {\r\n replaceStrings: [{ search: /worldPos/g, replace: worldPos.associatedVariableName }],\r\n });\r\n\r\n state._emitUniformFromString(\"vClipPlane\", \"vec4\");\r\n state._emitUniformFromString(\"vClipPlane2\", \"vec4\");\r\n state._emitUniformFromString(\"vClipPlane3\", \"vec4\");\r\n state._emitUniformFromString(\"vClipPlane4\", \"vec4\");\r\n state._emitUniformFromString(\"vClipPlane5\", \"vec4\");\r\n state._emitUniformFromString(\"vClipPlane6\", \"vec4\");\r\n\r\n return;\r\n }\r\n\r\n // Fragment\r\n state.sharedData.bindableBlocks.push(this);\r\n state.sharedData.blocksWithDefines.push(this);\r\n\r\n state._emitFunctionFromInclude(\"clipPlaneFragmentDeclaration\", comments);\r\n state.compilationString += state._emitCodeFromInclude(\"clipPlaneFragment\", comments);\r\n\r\n return this;\r\n }\r\n}\r\n\r\nRegisterClass(\"BABYLON.ClipPlanesBlock\", ClipPlanesBlock);\r\n"]}
@@ -154,7 +154,7 @@ var CurrentScreenBlock = /** @class */ (function (_super) {
154
154
  }
155
155
  this._mainUVName = "vMain" + uvInput.associatedVariableName;
156
156
  state._emitVaryingFromString(this._mainUVName, "vec2");
157
- state.compilationString += this._mainUVName + " = " + uvInput.associatedVariableName + ".xy;\r\n";
157
+ state.compilationString += "".concat(this._mainUVName, " = ").concat(uvInput.associatedVariableName, ".xy;\r\n");
158
158
  if (!this._outputs.some(function (o) { return o.isConnectedInVertexShader; })) {
159
159
  return;
160
160
  }
@@ -173,14 +173,14 @@ var CurrentScreenBlock = /** @class */ (function (_super) {
173
173
  if (state.target === NodeMaterialBlockTargets.Fragment) {
174
174
  return;
175
175
  }
176
- state.compilationString += "vec4 " + this._tempTextureRead + " = texture2D(" + this._samplerName + ", " + uvInput.associatedVariableName + ");\r\n";
176
+ state.compilationString += "vec4 ".concat(this._tempTextureRead, " = texture2D(").concat(this._samplerName, ", ").concat(uvInput.associatedVariableName, ");\r\n");
177
177
  return;
178
178
  }
179
179
  if (this.uv.ownerBlock.target === NodeMaterialBlockTargets.Fragment) {
180
- state.compilationString += "vec4 " + this._tempTextureRead + " = texture2D(" + this._samplerName + ", " + uvInput.associatedVariableName + ");\r\n";
180
+ state.compilationString += "vec4 ".concat(this._tempTextureRead, " = texture2D(").concat(this._samplerName, ", ").concat(uvInput.associatedVariableName, ");\r\n");
181
181
  return;
182
182
  }
183
- state.compilationString += "vec4 " + this._tempTextureRead + " = texture2D(" + this._samplerName + ", " + this._mainUVName + ");\r\n";
183
+ state.compilationString += "vec4 ".concat(this._tempTextureRead, " = texture2D(").concat(this._samplerName, ", ").concat(this._mainUVName, ");\r\n");
184
184
  };
185
185
  CurrentScreenBlock.prototype._writeOutput = function (state, output, swizzle, vertexMode) {
186
186
  if (vertexMode === void 0) { vertexMode = false; }
@@ -188,19 +188,19 @@ var CurrentScreenBlock = /** @class */ (function (_super) {
188
188
  if (state.target === NodeMaterialBlockTargets.Fragment) {
189
189
  return;
190
190
  }
191
- state.compilationString += this._declareOutput(output, state) + " = " + this._tempTextureRead + "." + swizzle + ";\r\n";
191
+ state.compilationString += "".concat(this._declareOutput(output, state), " = ").concat(this._tempTextureRead, ".").concat(swizzle, ";\r\n");
192
192
  return;
193
193
  }
194
194
  if (this.uv.ownerBlock.target === NodeMaterialBlockTargets.Fragment) {
195
- state.compilationString += this._declareOutput(output, state) + " = " + this._tempTextureRead + "." + swizzle + ";\r\n";
195
+ state.compilationString += "".concat(this._declareOutput(output, state), " = ").concat(this._tempTextureRead, ".").concat(swizzle, ";\r\n");
196
196
  return;
197
197
  }
198
- state.compilationString += this._declareOutput(output, state) + " = " + this._tempTextureRead + "." + swizzle + ";\r\n";
199
- state.compilationString += "#ifdef " + this._linearDefineName + "\r\n";
200
- state.compilationString += output.associatedVariableName + " = toGammaSpace(" + output.associatedVariableName + ");\r\n";
198
+ state.compilationString += "".concat(this._declareOutput(output, state), " = ").concat(this._tempTextureRead, ".").concat(swizzle, ";\r\n");
199
+ state.compilationString += "#ifdef ".concat(this._linearDefineName, "\r\n");
200
+ state.compilationString += "".concat(output.associatedVariableName, " = toGammaSpace(").concat(output.associatedVariableName, ");\r\n");
201
201
  state.compilationString += "#endif\r\n";
202
- state.compilationString += "#ifdef " + this._gammaDefineName + "\r\n";
203
- state.compilationString += output.associatedVariableName + " = toLinearSpace(" + output.associatedVariableName + ");\r\n";
202
+ state.compilationString += "#ifdef ".concat(this._gammaDefineName, "\r\n");
203
+ state.compilationString += "".concat(output.associatedVariableName, " = toLinearSpace(").concat(output.associatedVariableName, ");\r\n");
204
204
  state.compilationString += "#endif\r\n";
205
205
  };
206
206
  CurrentScreenBlock.prototype._buildBlock = function (state) {
@@ -228,7 +228,7 @@ var CurrentScreenBlock = /** @class */ (function (_super) {
228
228
  state._emit2DSampler(this._samplerName);
229
229
  this._linearDefineName = state._getFreeDefineName("ISLINEAR");
230
230
  this._gammaDefineName = state._getFreeDefineName("ISGAMMA");
231
- var comments = "//" + this.name;
231
+ var comments = "//".concat(this.name);
232
232
  state._emitFunctionFromInclude("helperFunctions", comments);
233
233
  this._writeTextureRead(state);
234
234
  for (var _i = 0, _a = this._outputs; _i < _a.length; _i++) {