@babylonjs/core 7.2.2 → 7.3.0

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 (620) hide show
  1. package/Animations/runtimeAnimation.d.ts +1 -0
  2. package/Animations/runtimeAnimation.js +12 -3
  3. package/Animations/runtimeAnimation.js.map +1 -1
  4. package/Audio/audioEngine.js +2 -2
  5. package/Audio/audioEngine.js.map +1 -1
  6. package/Bones/boneLookController.js +3 -0
  7. package/Bones/boneLookController.js.map +1 -1
  8. package/Buffers/buffer.d.ts +5 -5
  9. package/Buffers/buffer.js.map +1 -1
  10. package/Buffers/storageBuffer.d.ts +2 -2
  11. package/Buffers/storageBuffer.js.map +1 -1
  12. package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
  13. package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
  14. package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
  15. package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
  16. package/Compute/computeEffect.d.ts +3 -3
  17. package/Compute/computeEffect.js.map +1 -1
  18. package/Compute/computeShader.d.ts +10 -2
  19. package/Compute/computeShader.js +53 -35
  20. package/Compute/computeShader.js.map +1 -1
  21. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +2 -2
  22. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  23. package/DeviceInput/internalDeviceSourceManager.d.ts +4 -4
  24. package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
  25. package/DeviceInput/webDeviceInputSystem.d.ts +2 -2
  26. package/DeviceInput/webDeviceInputSystem.js.map +1 -1
  27. package/Engines/AbstractEngine/abstractEngine.alpha.d.ts +10 -0
  28. package/Engines/AbstractEngine/abstractEngine.alpha.js +29 -0
  29. package/Engines/AbstractEngine/abstractEngine.alpha.js.map +1 -0
  30. package/Engines/AbstractEngine/abstractEngine.cubeTexture.d.ts +17 -0
  31. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +138 -0
  32. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -0
  33. package/Engines/AbstractEngine/abstractEngine.dom.d.ts +61 -0
  34. package/Engines/AbstractEngine/abstractEngine.dom.js +27 -0
  35. package/Engines/AbstractEngine/abstractEngine.dom.js.map +1 -0
  36. package/Engines/AbstractEngine/abstractEngine.loadingScreen.d.ts +30 -0
  37. package/Engines/AbstractEngine/abstractEngine.loadingScreen.js +48 -0
  38. package/Engines/AbstractEngine/abstractEngine.loadingScreen.js.map +1 -0
  39. package/Engines/AbstractEngine/abstractEngine.query.d.ts +122 -0
  40. package/Engines/AbstractEngine/abstractEngine.query.js +175 -0
  41. package/Engines/AbstractEngine/abstractEngine.query.js.map +1 -0
  42. package/Engines/AbstractEngine/abstractEngine.renderPass.d.ts +26 -0
  43. package/Engines/AbstractEngine/abstractEngine.renderPass.js +29 -0
  44. package/Engines/AbstractEngine/abstractEngine.renderPass.js.map +1 -0
  45. package/Engines/AbstractEngine/abstractEngine.states.d.ts +162 -0
  46. package/Engines/AbstractEngine/abstractEngine.states.js +105 -0
  47. package/Engines/AbstractEngine/abstractEngine.states.js.map +1 -0
  48. package/Engines/AbstractEngine/abstractEngine.texture.d.ts +16 -0
  49. package/Engines/AbstractEngine/abstractEngine.texture.js +11 -0
  50. package/Engines/AbstractEngine/abstractEngine.texture.js.map +1 -0
  51. package/Engines/AbstractEngine/index.d.ts +8 -0
  52. package/Engines/AbstractEngine/index.js +10 -0
  53. package/Engines/AbstractEngine/index.js.map +1 -0
  54. package/Engines/Extensions/engine.alpha.d.ts +0 -24
  55. package/Engines/Extensions/engine.alpha.js +0 -35
  56. package/Engines/Extensions/engine.alpha.js.map +1 -1
  57. package/Engines/Extensions/engine.computeShader.d.ts +15 -2
  58. package/Engines/Extensions/engine.computeShader.js +5 -1
  59. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  60. package/Engines/Extensions/engine.cubeTexture.d.ts +0 -8
  61. package/Engines/Extensions/engine.cubeTexture.js +2 -135
  62. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  63. package/Engines/Extensions/engine.debugging.d.ts +2 -2
  64. package/Engines/Extensions/engine.debugging.js +5 -5
  65. package/Engines/Extensions/engine.debugging.js.map +1 -1
  66. package/Engines/Extensions/engine.dynamicTexture.js +3 -2
  67. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  68. package/Engines/Extensions/engine.multiview.js.map +1 -1
  69. package/Engines/Extensions/engine.query.d.ts +5 -120
  70. package/Engines/Extensions/engine.query.js +14 -150
  71. package/Engines/Extensions/engine.query.js.map +1 -1
  72. package/Engines/Extensions/engine.renderTarget.js +0 -9
  73. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  74. package/Engines/Extensions/engine.views.d.ts +3 -2
  75. package/Engines/Extensions/engine.views.js.map +1 -1
  76. package/Engines/Processors/iShaderProcessor.d.ts +2 -2
  77. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  78. package/Engines/Processors/shaderProcessor.d.ts +3 -3
  79. package/Engines/Processors/shaderProcessor.js.map +1 -1
  80. package/Engines/WebGL/webGLRenderTargetWrapper.js +12 -9
  81. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  82. package/Engines/WebGL/webGLShaderProcessors.d.ts +2 -2
  83. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  84. package/Engines/WebGPU/Extensions/engine.alpha.d.ts +35 -0
  85. package/Engines/WebGPU/Extensions/engine.alpha.js +4 -4
  86. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  87. package/Engines/WebGPU/Extensions/engine.computeShader.d.ts +9 -0
  88. package/Engines/WebGPU/Extensions/engine.computeShader.js +13 -2
  89. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  90. package/Engines/WebGPU/Extensions/engine.cubeTexture.d.ts +78 -1
  91. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  92. package/Engines/WebGPU/Extensions/engine.dynamicTexture.d.ts +27 -1
  93. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +3 -3
  94. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  95. package/Engines/WebGPU/Extensions/engine.externalTexture.d.ts +16 -0
  96. package/Engines/WebGPU/Extensions/engine.externalTexture.js.map +1 -1
  97. package/Engines/WebGPU/Extensions/engine.multiRender.d.ts +55 -1
  98. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  99. package/Engines/WebGPU/Extensions/engine.query.d.ts +1 -1
  100. package/Engines/WebGPU/Extensions/engine.query.js +1 -0
  101. package/Engines/WebGPU/Extensions/engine.query.js.map +1 -1
  102. package/Engines/WebGPU/Extensions/engine.rawTexture.d.ts +185 -1
  103. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  104. package/Engines/WebGPU/Extensions/engine.readTexture.d.ts +10 -1
  105. package/Engines/WebGPU/Extensions/engine.readTexture.js.map +1 -1
  106. package/Engines/WebGPU/Extensions/engine.renderTarget.d.ts +38 -1
  107. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  108. package/Engines/WebGPU/Extensions/engine.renderTargetCube.d.ts +13 -1
  109. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  110. package/Engines/WebGPU/Extensions/engine.storageBuffer.d.ts +38 -1
  111. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  112. package/Engines/WebGPU/Extensions/engine.textureSampler.d.ts +10 -0
  113. package/Engines/WebGPU/Extensions/engine.textureSampler.js.map +1 -1
  114. package/Engines/WebGPU/Extensions/engine.videoTexture.d.ts +14 -1
  115. package/Engines/WebGPU/Extensions/engine.videoTexture.js.map +1 -1
  116. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +2 -2
  117. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  118. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.d.ts +2 -0
  119. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +2 -0
  120. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  121. package/Engines/abstractEngine.d.ts +1695 -0
  122. package/Engines/abstractEngine.js +1362 -0
  123. package/Engines/abstractEngine.js.map +1 -0
  124. package/Engines/engine.common.d.ts +39 -0
  125. package/Engines/engine.common.js +226 -0
  126. package/Engines/engine.common.js.map +1 -0
  127. package/Engines/engine.d.ts +40 -447
  128. package/Engines/engine.js +64 -810
  129. package/Engines/engine.js.map +1 -1
  130. package/Engines/engineFactory.d.ts +2 -2
  131. package/Engines/engineFactory.js.map +1 -1
  132. package/Engines/engineStore.d.ts +4 -4
  133. package/Engines/engineStore.js.map +1 -1
  134. package/Engines/index.d.ts +3 -0
  135. package/Engines/index.js +3 -0
  136. package/Engines/index.js.map +1 -1
  137. package/Engines/nativeEngine.d.ts +1 -1
  138. package/Engines/nativeEngine.js +2 -1
  139. package/Engines/nativeEngine.js.map +1 -1
  140. package/Engines/nullEngine.d.ts +2 -2
  141. package/Engines/nullEngine.js +2 -3
  142. package/Engines/nullEngine.js.map +1 -1
  143. package/Engines/renderTargetWrapper.d.ts +3 -3
  144. package/Engines/renderTargetWrapper.js.map +1 -1
  145. package/Engines/thinEngine.d.ts +34 -597
  146. package/Engines/thinEngine.js +85 -1143
  147. package/Engines/thinEngine.js.map +1 -1
  148. package/Engines/webgpuEngine.d.ts +147 -109
  149. package/Engines/webgpuEngine.js +249 -162
  150. package/Engines/webgpuEngine.js.map +1 -1
  151. package/Instrumentation/engineInstrumentation.d.ts +5 -4
  152. package/Instrumentation/engineInstrumentation.js.map +1 -1
  153. package/Layers/effectLayer.d.ts +2 -2
  154. package/Layers/effectLayer.js +3 -3
  155. package/Layers/effectLayer.js.map +1 -1
  156. package/Layers/effectLayerSceneComponent.js.map +1 -1
  157. package/Layers/glowLayer.js +3 -3
  158. package/Layers/glowLayer.js.map +1 -1
  159. package/Layers/highlightLayer.js +3 -3
  160. package/Layers/highlightLayer.js.map +1 -1
  161. package/Layers/layerSceneComponent.js.map +1 -1
  162. package/Loading/loadingScreen.js +2 -2
  163. package/Loading/loadingScreen.js.map +1 -1
  164. package/Loading/sceneLoader.d.ts +3 -3
  165. package/Loading/sceneLoader.js +1 -1
  166. package/Loading/sceneLoader.js.map +1 -1
  167. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  168. package/Materials/Node/Blocks/Dual/clipPlanesBlock.d.ts +1 -1
  169. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js +6 -6
  170. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  171. package/Materials/Node/Blocks/Dual/currentScreenBlock.d.ts +2 -3
  172. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +5 -5
  173. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/Dual/fogBlock.d.ts +1 -1
  175. package/Materials/Node/Blocks/Dual/fogBlock.js +4 -4
  176. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/Dual/lightBlock.js +4 -4
  178. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  179. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.d.ts +1 -1
  180. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +8 -7
  181. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  182. package/Materials/Node/Blocks/Dual/sceneDepthBlock.d.ts +1 -1
  183. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +9 -5
  184. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  185. package/Materials/Node/Blocks/Dual/textureBlock.d.ts +4 -2
  186. package/Materials/Node/Blocks/Dual/textureBlock.js +43 -21
  187. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  188. package/Materials/Node/Blocks/Fragment/TBNBlock.js +3 -3
  189. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  190. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +9 -2
  191. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -1
  193. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  194. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.d.ts +1 -1
  195. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +16 -8
  196. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  197. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js +1 -1
  198. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
  199. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +2 -2
  200. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  201. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +3 -3
  202. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  203. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.d.ts +1 -1
  204. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +4 -4
  205. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  206. package/Materials/Node/Blocks/Fragment/screenSizeBlock.d.ts +1 -1
  207. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +2 -2
  208. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  209. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js +3 -3
  210. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  211. package/Materials/Node/Blocks/Fragment/shadowMapBlock.d.ts +1 -1
  212. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js +4 -4
  213. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  214. package/Materials/Node/Blocks/Fragment/twirlBlock.js +9 -9
  215. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/Input/inputBlock.d.ts +6 -1
  217. package/Materials/Node/Blocks/Input/inputBlock.js +36 -12
  218. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  219. package/Materials/Node/Blocks/PBR/anisotropyBlock.d.ts +1 -1
  220. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +1 -1
  221. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/PBR/clearCoatBlock.d.ts +1 -1
  223. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +3 -3
  224. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  225. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.d.ts +1 -1
  226. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +9 -9
  227. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  228. package/Materials/Node/Blocks/PBR/reflectionBlock.d.ts +1 -1
  229. package/Materials/Node/Blocks/PBR/reflectionBlock.js +21 -21
  230. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  231. package/Materials/Node/Blocks/PBR/refractionBlock.d.ts +1 -1
  232. package/Materials/Node/Blocks/PBR/refractionBlock.js +6 -6
  233. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  234. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +5 -0
  235. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  236. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js +2 -2
  237. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  238. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js +3 -3
  239. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/Particle/particleTextureBlock.js +1 -1
  241. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  242. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js +1 -1
  243. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  244. package/Materials/Node/Blocks/Vertex/bonesBlock.js +2 -2
  245. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  246. package/Materials/Node/Blocks/Vertex/instancesBlock.js +5 -5
  247. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  248. package/Materials/Node/Blocks/Vertex/lightInformationBlock.d.ts +1 -1
  249. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +12 -12
  250. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  251. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +7 -7
  252. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  253. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.d.ts +1 -1
  254. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +10 -3
  255. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  256. package/Materials/Node/Blocks/addBlock.js +2 -1
  257. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  258. package/Materials/Node/Blocks/arcTan2Block.js +3 -1
  259. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  260. package/Materials/Node/Blocks/clampBlock.js +1 -1
  261. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  262. package/Materials/Node/Blocks/cloudBlock.js +1 -1
  263. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  264. package/Materials/Node/Blocks/colorMergerBlock.js +9 -7
  265. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  266. package/Materials/Node/Blocks/colorSplitterBlock.js +5 -5
  267. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  268. package/Materials/Node/Blocks/conditionalBlock.js +18 -12
  269. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  270. package/Materials/Node/Blocks/crossBlock.js +1 -1
  271. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  272. package/Materials/Node/Blocks/curveBlock.js +48 -53
  273. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  274. package/Materials/Node/Blocks/customBlock.js +1 -1
  275. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  276. package/Materials/Node/Blocks/desaturateBlock.js +5 -4
  277. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  278. package/Materials/Node/Blocks/distanceBlock.js +1 -1
  279. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  280. package/Materials/Node/Blocks/divideBlock.js +2 -1
  281. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  282. package/Materials/Node/Blocks/dotBlock.js +1 -1
  283. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  284. package/Materials/Node/Blocks/elbowBlock.js +1 -1
  285. package/Materials/Node/Blocks/elbowBlock.js.map +1 -1
  286. package/Materials/Node/Blocks/fresnelBlock.js +1 -1
  287. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  288. package/Materials/Node/Blocks/gradientBlock.js +8 -7
  289. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  290. package/Materials/Node/Blocks/lengthBlock.js +1 -1
  291. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  292. package/Materials/Node/Blocks/lerpBlock.js +1 -1
  293. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  294. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -1
  295. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  296. package/Materials/Node/Blocks/matrixDeterminantBlock.js +1 -1
  297. package/Materials/Node/Blocks/matrixDeterminantBlock.js.map +1 -1
  298. package/Materials/Node/Blocks/matrixTransposeBlock.js +1 -1
  299. package/Materials/Node/Blocks/matrixTransposeBlock.js.map +1 -1
  300. package/Materials/Node/Blocks/maxBlock.js +1 -1
  301. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  302. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +1 -1
  303. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  304. package/Materials/Node/Blocks/minBlock.js +1 -1
  305. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  306. package/Materials/Node/Blocks/modBlock.js +1 -1
  307. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  308. package/Materials/Node/Blocks/multiplyBlock.js +2 -1
  309. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  310. package/Materials/Node/Blocks/nLerpBlock.js +1 -1
  311. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  312. package/Materials/Node/Blocks/negateBlock.js +1 -1
  313. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  314. package/Materials/Node/Blocks/normalBlendBlock.js +1 -1
  315. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  316. package/Materials/Node/Blocks/normalizeBlock.js +1 -1
  317. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  318. package/Materials/Node/Blocks/oneMinusBlock.js +1 -1
  319. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  320. package/Materials/Node/Blocks/posterizeBlock.js +1 -1
  321. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  322. package/Materials/Node/Blocks/powBlock.js +1 -1
  323. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  324. package/Materials/Node/Blocks/randomNumberBlock.js +1 -1
  325. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  326. package/Materials/Node/Blocks/reciprocalBlock.js +2 -2
  327. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  328. package/Materials/Node/Blocks/reflectBlock.js +1 -1
  329. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  330. package/Materials/Node/Blocks/refractBlock.js +1 -1
  331. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  332. package/Materials/Node/Blocks/remapBlock.js +1 -1
  333. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  334. package/Materials/Node/Blocks/replaceColorBlock.js +1 -1
  335. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  336. package/Materials/Node/Blocks/rotate2dBlock.js +1 -1
  337. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  338. package/Materials/Node/Blocks/scaleBlock.js +1 -1
  339. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  340. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -1
  341. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  342. package/Materials/Node/Blocks/smoothStepBlock.js +3 -2
  343. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  344. package/Materials/Node/Blocks/stepBlock.js +1 -1
  345. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  346. package/Materials/Node/Blocks/subtractBlock.js +2 -1
  347. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  348. package/Materials/Node/Blocks/transformBlock.js +18 -10
  349. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  350. package/Materials/Node/Blocks/triPlanarBlock.d.ts +1 -1
  351. package/Materials/Node/Blocks/triPlanarBlock.js +2 -2
  352. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  353. package/Materials/Node/Blocks/trigonometryBlock.js +1 -1
  354. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  355. package/Materials/Node/Blocks/vectorMergerBlock.js +30 -27
  356. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  357. package/Materials/Node/Blocks/vectorSplitterBlock.js +9 -8
  358. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  359. package/Materials/Node/Blocks/viewDirectionBlock.js +1 -1
  360. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  361. package/Materials/Node/Blocks/voronoiNoiseBlock.js +19 -8
  362. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  363. package/Materials/Node/Blocks/waveBlock.js +3 -3
  364. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  365. package/Materials/Node/Blocks/worleyNoise3DBlock.js +3 -3
  366. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  367. package/Materials/Node/nodeMaterial.d.ts +9 -3
  368. package/Materials/Node/nodeMaterial.js +29 -4
  369. package/Materials/Node/nodeMaterial.js.map +1 -1
  370. package/Materials/Node/nodeMaterialBlock.d.ts +0 -1
  371. package/Materials/Node/nodeMaterialBlock.js +6 -6
  372. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  373. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +4 -0
  374. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +12 -0
  375. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  376. package/Materials/Node/nodeMaterialBuildState.d.ts +35 -3
  377. package/Materials/Node/nodeMaterialBuildState.js +169 -16
  378. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  379. package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +18 -4
  380. package/Materials/PBR/pbrSubSurfaceConfiguration.js +60 -9
  381. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  382. package/Materials/Textures/Filtering/hdrFiltering.d.ts +2 -2
  383. package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
  384. package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
  385. package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
  386. package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -0
  387. package/Materials/Textures/MultiviewRenderTarget.js +1 -0
  388. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  389. package/Materials/Textures/Procedurals/proceduralTexture.js +1 -1
  390. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  391. package/Materials/Textures/baseTexture.d.ts +3 -3
  392. package/Materials/Textures/baseTexture.js.map +1 -1
  393. package/Materials/Textures/colorGradingTexture.d.ts +2 -2
  394. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  395. package/Materials/Textures/cubeTexture.d.ts +3 -2
  396. package/Materials/Textures/cubeTexture.js +1 -0
  397. package/Materials/Textures/cubeTexture.js.map +1 -1
  398. package/Materials/Textures/hdrCubeTexture.d.ts +2 -2
  399. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  400. package/Materials/Textures/htmlElementTexture.d.ts +2 -2
  401. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  402. package/Materials/Textures/internalTexture.d.ts +3 -3
  403. package/Materials/Textures/internalTexture.js.map +1 -1
  404. package/Materials/Textures/rawTexture.d.ts +10 -10
  405. package/Materials/Textures/rawTexture.js.map +1 -1
  406. package/Materials/Textures/renderTargetTexture.d.ts +4 -4
  407. package/Materials/Textures/renderTargetTexture.js +4 -4
  408. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  409. package/Materials/Textures/texture.d.ts +2 -2
  410. package/Materials/Textures/texture.js.map +1 -1
  411. package/Materials/Textures/thinTexture.d.ts +3 -3
  412. package/Materials/Textures/thinTexture.js +1 -1
  413. package/Materials/Textures/thinTexture.js.map +1 -1
  414. package/Materials/drawWrapper.d.ts +2 -3
  415. package/Materials/drawWrapper.functions.d.ts +8 -0
  416. package/Materials/drawWrapper.functions.js +9 -0
  417. package/Materials/drawWrapper.functions.js.map +1 -0
  418. package/Materials/drawWrapper.js +0 -3
  419. package/Materials/drawWrapper.js.map +1 -1
  420. package/Materials/effect.d.ts +4 -5
  421. package/Materials/effect.js.map +1 -1
  422. package/Materials/effectRenderer.d.ts +4 -4
  423. package/Materials/effectRenderer.js.map +1 -1
  424. package/Materials/index.d.ts +1 -0
  425. package/Materials/index.js +1 -0
  426. package/Materials/index.js.map +1 -1
  427. package/Materials/materialFlags.d.ts +6 -0
  428. package/Materials/materialFlags.js +15 -1
  429. package/Materials/materialFlags.js.map +1 -1
  430. package/Materials/materialHelper.functions.d.ts +2 -2
  431. package/Materials/materialHelper.functions.js.map +1 -1
  432. package/Materials/materialPluginBase.d.ts +4 -4
  433. package/Materials/materialPluginBase.js.map +1 -1
  434. package/Materials/materialPluginManager.d.ts +2 -2
  435. package/Materials/materialPluginManager.js.map +1 -1
  436. package/Materials/meshDebugPluginMaterial.js +1 -1
  437. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  438. package/Materials/uniformBuffer.d.ts +2 -2
  439. package/Materials/uniformBuffer.js.map +1 -1
  440. package/Meshes/Builders/greasedLineBuilder.d.ts +6 -0
  441. package/Meshes/Builders/greasedLineBuilder.js +15 -8
  442. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  443. package/Meshes/Compression/meshoptCompression.js +4 -3
  444. package/Meshes/Compression/meshoptCompression.js.map +1 -1
  445. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +1 -1
  446. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  447. package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
  448. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  449. package/Meshes/GreasedLine/greasedLineMesh.js +1 -1
  450. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  451. package/Meshes/geometry.d.ts +2 -2
  452. package/Meshes/geometry.js +3 -2
  453. package/Meshes/geometry.js.map +1 -1
  454. package/Meshes/instancedMesh.js.map +1 -1
  455. package/Meshes/mesh.d.ts +3 -3
  456. package/Meshes/mesh.js.map +1 -1
  457. package/Meshes/subMesh.d.ts +2 -2
  458. package/Meshes/subMesh.js.map +1 -1
  459. package/Misc/PerformanceViewer/performanceViewerCollectionStrategies.js.map +1 -1
  460. package/Misc/copyTextureToTexture.d.ts +2 -2
  461. package/Misc/copyTextureToTexture.js.map +1 -1
  462. package/Misc/dds.d.ts +3 -2
  463. package/Misc/dds.js +2 -1
  464. package/Misc/dds.js.map +1 -1
  465. package/Misc/dumpTools.d.ts +2 -2
  466. package/Misc/dumpTools.js.map +1 -1
  467. package/Misc/fileTools.js +3 -3
  468. package/Misc/fileTools.js.map +1 -1
  469. package/Misc/filesInput.d.ts +2 -2
  470. package/Misc/filesInput.js.map +1 -1
  471. package/Misc/khronosTextureContainer2.d.ts +8 -2
  472. package/Misc/khronosTextureContainer2.js +3 -2
  473. package/Misc/khronosTextureContainer2.js.map +1 -1
  474. package/Misc/minMaxReducer.d.ts +2 -2
  475. package/Misc/minMaxReducer.js.map +1 -1
  476. package/Misc/screenshotTools.d.ts +6 -6
  477. package/Misc/screenshotTools.js.map +1 -1
  478. package/Misc/textureTools.js.map +1 -1
  479. package/Misc/tools.d.ts +7 -7
  480. package/Misc/tools.functions.d.ts +26 -0
  481. package/Misc/tools.functions.js +62 -0
  482. package/Misc/tools.functions.js.map +1 -1
  483. package/Misc/tools.js.map +1 -1
  484. package/Misc/videoRecorder.d.ts +3 -3
  485. package/Misc/videoRecorder.js.map +1 -1
  486. package/Particles/baseParticleSystem.d.ts +2 -2
  487. package/Particles/baseParticleSystem.js.map +1 -1
  488. package/Particles/computeShaderParticleSystem.d.ts +2 -2
  489. package/Particles/computeShaderParticleSystem.js.map +1 -1
  490. package/Particles/gpuParticleSystem.d.ts +3 -3
  491. package/Particles/gpuParticleSystem.js +2 -2
  492. package/Particles/gpuParticleSystem.js.map +1 -1
  493. package/Particles/particle.js +1 -1
  494. package/Particles/particle.js.map +1 -1
  495. package/Particles/particleSystem.d.ts +3 -3
  496. package/Particles/particleSystem.js +3 -3
  497. package/Particles/particleSystem.js.map +1 -1
  498. package/Particles/particleSystemComponent.d.ts +2 -2
  499. package/Particles/particleSystemComponent.js +2 -2
  500. package/Particles/particleSystemComponent.js.map +1 -1
  501. package/Particles/subEmitter.d.ts +3 -3
  502. package/Particles/subEmitter.js.map +1 -1
  503. package/Particles/thinParticleSystem.d.ts +2 -2
  504. package/Particles/thinParticleSystem.js.map +1 -1
  505. package/Physics/v2/physicsBody.js +3 -3
  506. package/Physics/v2/physicsBody.js.map +1 -1
  507. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  508. package/PostProcesses/RenderPipeline/postProcessRenderEffect.d.ts +2 -2
  509. package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
  510. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.d.ts +2 -2
  511. package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
  512. package/PostProcesses/blackAndWhitePostProcess.d.ts +2 -2
  513. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  514. package/PostProcesses/bloomMergePostProcess.d.ts +2 -2
  515. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  516. package/PostProcesses/blurPostProcess.d.ts +2 -2
  517. package/PostProcesses/blurPostProcess.js.map +1 -1
  518. package/PostProcesses/chromaticAberrationPostProcess.d.ts +2 -2
  519. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  520. package/PostProcesses/circleOfConfusionPostProcess.d.ts +2 -2
  521. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  522. package/PostProcesses/colorCorrectionPostProcess.d.ts +2 -2
  523. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  524. package/PostProcesses/convolutionPostProcess.d.ts +2 -2
  525. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  526. package/PostProcesses/depthOfFieldBlurPostProcess.d.ts +2 -2
  527. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  528. package/PostProcesses/depthOfFieldEffect.js +1 -1
  529. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  530. package/PostProcesses/depthOfFieldMergePostProcess.d.ts +2 -2
  531. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  532. package/PostProcesses/displayPassPostProcess.d.ts +2 -2
  533. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  534. package/PostProcesses/extractHighlightsPostProcess.d.ts +2 -2
  535. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  536. package/PostProcesses/filterPostProcess.d.ts +2 -2
  537. package/PostProcesses/filterPostProcess.js.map +1 -1
  538. package/PostProcesses/fxaaPostProcess.d.ts +2 -2
  539. package/PostProcesses/fxaaPostProcess.js +2 -2
  540. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  541. package/PostProcesses/grainPostProcess.d.ts +2 -2
  542. package/PostProcesses/grainPostProcess.js.map +1 -1
  543. package/PostProcesses/imageProcessingPostProcess.d.ts +2 -2
  544. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  545. package/PostProcesses/motionBlurPostProcess.d.ts +2 -2
  546. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  547. package/PostProcesses/passPostProcess.d.ts +3 -3
  548. package/PostProcesses/passPostProcess.js +2 -2
  549. package/PostProcesses/passPostProcess.js.map +1 -1
  550. package/PostProcesses/postProcess.d.ts +4 -5
  551. package/PostProcesses/postProcess.js +3 -3
  552. package/PostProcesses/postProcess.js.map +1 -1
  553. package/PostProcesses/refractionPostProcess.d.ts +2 -2
  554. package/PostProcesses/refractionPostProcess.js.map +1 -1
  555. package/PostProcesses/screenSpaceCurvaturePostProcess.d.ts +2 -2
  556. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  557. package/PostProcesses/screenSpaceReflectionPostProcess.d.ts +2 -2
  558. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  559. package/PostProcesses/sharpenPostProcess.d.ts +2 -2
  560. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  561. package/PostProcesses/subSurfaceScatteringPostProcess.d.ts +2 -2
  562. package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
  563. package/PostProcesses/volumetricLightScatteringPostProcess.d.ts +2 -2
  564. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  565. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  566. package/Rendering/depthPeelingRenderer.js.map +1 -1
  567. package/Rendering/fluidRenderer/fluidRenderer.js.map +1 -1
  568. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.d.ts +2 -2
  569. package/Rendering/fluidRenderer/fluidRenderingDepthTextureCopy.js.map +1 -1
  570. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +2 -2
  571. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  572. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +2 -2
  573. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  574. package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
  575. package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
  576. package/Rendering/geometryBufferRenderer.js +24 -18
  577. package/Rendering/geometryBufferRenderer.js.map +1 -1
  578. package/Rendering/outlineRenderer.js.map +1 -1
  579. package/Rendering/prePassRenderer.js.map +1 -1
  580. package/Shaders/ShadersInclude/pbrBlockSubSurface.js +19 -3
  581. package/Shaders/ShadersInclude/pbrBlockSubSurface.js.map +1 -1
  582. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js +4 -1
  583. package/Shaders/ShadersInclude/pbrFragmentDeclaration.js.map +1 -1
  584. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js +1 -0
  585. package/Shaders/ShadersInclude/pbrFragmentSamplersDeclaration.js.map +1 -1
  586. package/Shaders/ShadersInclude/pbrVertexDeclaration.js +3 -0
  587. package/Shaders/ShadersInclude/pbrVertexDeclaration.js.map +1 -1
  588. package/Shaders/pbr.fragment.js +7 -0
  589. package/Shaders/pbr.fragment.js.map +1 -1
  590. package/Shaders/pbr.vertex.js +2 -0
  591. package/Shaders/pbr.vertex.js.map +1 -1
  592. package/ShadersWGSL/ShadersInclude/fresnelFunction.d.ts +5 -0
  593. package/ShadersWGSL/ShadersInclude/fresnelFunction.js +13 -0
  594. package/ShadersWGSL/ShadersInclude/fresnelFunction.js.map +1 -0
  595. package/ShadersWGSL/ShadersInclude/helperFunctions.d.ts +5 -0
  596. package/ShadersWGSL/ShadersInclude/helperFunctions.js +68 -0
  597. package/ShadersWGSL/ShadersInclude/helperFunctions.js.map +1 -0
  598. package/Sprites/spriteRenderer.d.ts +2 -2
  599. package/Sprites/spriteRenderer.js.map +1 -1
  600. package/XR/features/WebXRDepthSensing.js.map +1 -1
  601. package/XR/features/WebXRImageTracking.js.map +1 -1
  602. package/XR/features/WebXRLayers.d.ts +2 -2
  603. package/XR/features/WebXRLayers.js.map +1 -1
  604. package/XR/features/WebXRLightEstimation.js.map +1 -1
  605. package/XR/features/WebXRRawCameraAccess.d.ts +1 -1
  606. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  607. package/XR/features/WebXRSpaceWarp.js +1 -3
  608. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  609. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  610. package/XR/webXRExperienceHelper.js.map +1 -1
  611. package/XR/webXRManagedOutputCanvas.d.ts +2 -2
  612. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  613. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  614. package/XR/webXRSessionManager.js.map +1 -1
  615. package/assetContainer.js.map +1 -1
  616. package/node.d.ts +2 -2
  617. package/node.js.map +1 -1
  618. package/package.json +1 -1
  619. package/scene.d.ts +3 -3
  620. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webXRSessionManager.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRSessionManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { WebXRRenderTarget } from \"./webXRTypes\";\r\nimport { WebXRManagedOutputCanvas, WebXRManagedOutputCanvasOptions } from \"./webXRManagedOutputCanvas\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { IWebXRRenderTargetTextureProvider, WebXRLayerRenderTargetTextureProvider } from \"./webXRRenderTargetTextureProvider\";\r\nimport type { Viewport } from \"../Maths/math.viewport\";\r\nimport type { WebXRLayerWrapper } from \"./webXRLayerWrapper\";\r\nimport { NativeXRLayerWrapper, NativeXRRenderTarget } from \"./native/nativeXRRenderTarget\";\r\nimport { WebXRWebGLLayerWrapper } from \"./webXRWebGLLayer\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\n\r\n/**\r\n * Manages an XRSession to work with Babylon's engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/webXR/webXRSessionManagers\r\n */\r\nexport class WebXRSessionManager implements IDisposable, IWebXRRenderTargetTextureProvider {\r\n private _engine: Nullable<Engine>;\r\n private _referenceSpace: XRReferenceSpace;\r\n private _baseLayerWrapper: Nullable<WebXRLayerWrapper>;\r\n private _baseLayerRTTProvider: Nullable<WebXRLayerRenderTargetTextureProvider>;\r\n private _xrNavigator: any;\r\n private _sessionMode: XRSessionMode;\r\n private _onEngineDisposedObserver: Nullable<Observer<ThinEngine>>;\r\n\r\n /**\r\n * The base reference space from which the session started. good if you want to reset your\r\n * reference space\r\n */\r\n public baseReferenceSpace: XRReferenceSpace;\r\n /**\r\n * Current XR frame\r\n */\r\n public currentFrame: Nullable<XRFrame>;\r\n /** WebXR timestamp updated every frame */\r\n public currentTimestamp: number = -1;\r\n /**\r\n * Used just in case of a failure to initialize an immersive session.\r\n * The viewer reference space is compensated using this height, creating a kind of \"viewer-floor\" reference space\r\n */\r\n public defaultHeightCompensation = 1.7;\r\n /**\r\n * Fires every time a new xrFrame arrives which can be used to update the camera\r\n */\r\n public onXRFrameObservable: Observable<XRFrame> = new Observable<XRFrame>();\r\n /**\r\n * Fires when the reference space changed\r\n */\r\n public onXRReferenceSpaceChanged: Observable<XRReferenceSpace> = new Observable();\r\n /**\r\n * Fires when the xr session is ended either by the device or manually done\r\n */\r\n public onXRSessionEnded: Observable<any> = new Observable<any>();\r\n /**\r\n * Fires when the xr session is initialized: right after requestSession was called and returned with a successful result\r\n */\r\n public onXRSessionInit: Observable<XRSession> = new Observable<XRSession>();\r\n\r\n /**\r\n * Fires when the xr reference space has been initialized\r\n */\r\n public onXRReferenceSpaceInitialized: Observable<XRReferenceSpace> = new Observable<XRReferenceSpace>();\r\n\r\n /**\r\n * Fires when the session manager is rendering the first frame\r\n */\r\n public onXRReady: Observable<WebXRSessionManager> = new Observable<WebXRSessionManager>();\r\n /**\r\n * Underlying xr session\r\n */\r\n public session: XRSession;\r\n /**\r\n * The viewer (head position) reference space. This can be used to get the XR world coordinates\r\n * or get the offset the player is currently at.\r\n */\r\n public viewerReferenceSpace: XRReferenceSpace;\r\n /**\r\n * Are we currently in the XR loop?\r\n */\r\n public inXRFrameLoop: boolean = false;\r\n /**\r\n * Are we in an XR session?\r\n */\r\n public inXRSession: boolean = false;\r\n\r\n private _worldScalingFactor: number = 1;\r\n\r\n /**\r\n * Observable raised when the world scale has changed\r\n */\r\n public onWorldScaleFactorChangedObservable: Observable<{\r\n previousScaleFactor: number;\r\n newScaleFactor: number;\r\n }> = new Observable(undefined, true);\r\n\r\n /**\r\n * Scale factor to apply to all XR-related elements (camera, controllers)\r\n */\r\n public get worldScalingFactor(): number {\r\n return this._worldScalingFactor;\r\n }\r\n\r\n public set worldScalingFactor(value: number) {\r\n const oldValue = this._worldScalingFactor;\r\n this._worldScalingFactor = value;\r\n this.onWorldScaleFactorChangedObservable.notifyObservers({\r\n previousScaleFactor: oldValue,\r\n newScaleFactor: value,\r\n });\r\n }\r\n\r\n /**\r\n * Constructs a WebXRSessionManager, this must be initialized within a user action before usage\r\n * @param scene The scene which the session should be created for\r\n */\r\n constructor(\r\n /** The scene which the session should be created for */\r\n public scene: Scene\r\n ) {\r\n this._engine = scene.getEngine();\r\n this._onEngineDisposedObserver = this._engine.onDisposeObservable.addOnce(() => {\r\n this._engine = null;\r\n });\r\n scene.onDisposeObservable.addOnce(() => {\r\n this.dispose();\r\n });\r\n }\r\n\r\n /**\r\n * The current reference space used in this session. This reference space can constantly change!\r\n * It is mainly used to offset the camera's position.\r\n */\r\n public get referenceSpace(): XRReferenceSpace {\r\n return this._referenceSpace;\r\n }\r\n\r\n /**\r\n * Set a new reference space and triggers the observable\r\n */\r\n public set referenceSpace(newReferenceSpace: XRReferenceSpace) {\r\n this._referenceSpace = newReferenceSpace;\r\n this.onXRReferenceSpaceChanged.notifyObservers(this._referenceSpace);\r\n }\r\n\r\n /**\r\n * The mode for the managed XR session\r\n */\r\n public get sessionMode(): XRSessionMode {\r\n return this._sessionMode;\r\n }\r\n\r\n /**\r\n * Disposes of the session manager\r\n * This should be called explicitly by the dev, if required.\r\n */\r\n public dispose() {\r\n // disposing without leaving XR? Exit XR first\r\n if (this.inXRSession) {\r\n this.exitXRAsync();\r\n }\r\n this.onXRFrameObservable.clear();\r\n this.onXRSessionEnded.clear();\r\n this.onXRReferenceSpaceChanged.clear();\r\n this.onXRSessionInit.clear();\r\n this.onWorldScaleFactorChangedObservable.clear();\r\n this._engine?.onDisposeObservable.remove(this._onEngineDisposedObserver);\r\n this._engine = null;\r\n }\r\n\r\n /**\r\n * Stops the xrSession and restores the render loop\r\n * @returns Promise which resolves after it exits XR\r\n */\r\n public async exitXRAsync() {\r\n if (this.session && this.inXRSession) {\r\n this.inXRSession = false;\r\n try {\r\n return await this.session.end();\r\n } catch {\r\n Logger.Warn(\"Could not end XR session.\");\r\n }\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Attempts to set the framebuffer-size-normalized viewport to be rendered this frame for this view.\r\n * In the event of a failure, the supplied viewport is not updated.\r\n * @param viewport the viewport to which the view will be rendered\r\n * @param view the view for which to set the viewport\r\n * @returns whether the operation was successful\r\n */\r\n public trySetViewportForView(viewport: Viewport, view: XRView): boolean {\r\n return this._baseLayerRTTProvider?.trySetViewportForView(viewport, view) || false;\r\n }\r\n\r\n /**\r\n * Gets the correct render target texture to be rendered this frame for this eye\r\n * @param eye the eye for which to get the render target\r\n * @returns the render target for the specified eye or null if not available\r\n */\r\n public getRenderTargetTextureForEye(eye: XREye): Nullable<RenderTargetTexture> {\r\n return this._baseLayerRTTProvider?.getRenderTargetTextureForEye(eye) || null;\r\n }\r\n\r\n /**\r\n * Gets the correct render target texture to be rendered this frame for this view\r\n * @param view the view for which to get the render target\r\n * @returns the render target for the specified view or null if not available\r\n */\r\n public getRenderTargetTextureForView(view: XRView): Nullable<RenderTargetTexture> {\r\n return this._baseLayerRTTProvider?.getRenderTargetTextureForView(view) || null;\r\n }\r\n\r\n /**\r\n * Creates a WebXRRenderTarget object for the XR session\r\n * @param options optional options to provide when creating a new render target\r\n * @returns a WebXR render target to which the session can render\r\n */\r\n public getWebXRRenderTarget(options?: WebXRManagedOutputCanvasOptions): WebXRRenderTarget {\r\n const engine = this.scene.getEngine();\r\n if (this._xrNavigator.xr.native) {\r\n return new NativeXRRenderTarget(this);\r\n } else {\r\n options = options || WebXRManagedOutputCanvasOptions.GetDefaults(engine);\r\n options.canvasElement = options.canvasElement || engine.getRenderingCanvas() || undefined;\r\n return new WebXRManagedOutputCanvas(this, options);\r\n }\r\n }\r\n\r\n /**\r\n * Initializes the manager\r\n * After initialization enterXR can be called to start an XR session\r\n * @returns Promise which resolves after it is initialized\r\n */\r\n public initializeAsync(): Promise<void> {\r\n // Check if the browser supports webXR\r\n this._xrNavigator = navigator;\r\n if (!this._xrNavigator.xr) {\r\n return Promise.reject(\"WebXR not available\");\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Initializes an xr session\r\n * @param xrSessionMode mode to initialize\r\n * @param xrSessionInit defines optional and required values to pass to the session builder\r\n * @returns a promise which will resolve once the session has been initialized\r\n */\r\n public initializeSessionAsync(xrSessionMode: XRSessionMode = \"immersive-vr\", xrSessionInit: XRSessionInit = {}): Promise<XRSession> {\r\n return this._xrNavigator.xr.requestSession(xrSessionMode, xrSessionInit).then((session: XRSession) => {\r\n this.session = session;\r\n this._sessionMode = xrSessionMode;\r\n this.inXRSession = true;\r\n this.onXRSessionInit.notifyObservers(session);\r\n\r\n // handle when the session is ended (By calling session.end or device ends its own session eg. pressing home button on phone)\r\n this.session.addEventListener(\r\n \"end\",\r\n () => {\r\n this.inXRSession = false;\r\n\r\n // Notify frame observers\r\n this.onXRSessionEnded.notifyObservers(null);\r\n\r\n if (this._engine) {\r\n // make sure dimensions object is restored\r\n this._engine.framebufferDimensionsObject = null;\r\n\r\n // Restore frame buffer to avoid clear on xr framebuffer after session end\r\n this._engine.restoreDefaultFramebuffer();\r\n\r\n // Need to restart render loop as after the session is ended the last request for new frame will never call callback\r\n this._engine.customAnimationFrameRequester = null;\r\n this._engine._renderLoop();\r\n }\r\n\r\n // Dispose render target textures.\r\n // Only dispose on native because we can't destroy opaque textures on browser.\r\n if (this.isNative) {\r\n this._baseLayerRTTProvider?.dispose();\r\n }\r\n this._baseLayerRTTProvider = null;\r\n this._baseLayerWrapper = null;\r\n },\r\n { once: true }\r\n );\r\n\r\n return this.session;\r\n });\r\n }\r\n\r\n /**\r\n * Checks if a session would be supported for the creation options specified\r\n * @param sessionMode session mode to check if supported eg. immersive-vr\r\n * @returns A Promise that resolves to true if supported and false if not\r\n */\r\n public isSessionSupportedAsync(sessionMode: XRSessionMode): Promise<boolean> {\r\n return WebXRSessionManager.IsSessionSupportedAsync(sessionMode);\r\n }\r\n\r\n /**\r\n * Resets the reference space to the one started the session\r\n */\r\n public resetReferenceSpace() {\r\n this.referenceSpace = this.baseReferenceSpace;\r\n }\r\n\r\n /**\r\n * Starts rendering to the xr layer\r\n */\r\n public runXRRenderLoop() {\r\n if (!this.inXRSession || !this._engine) {\r\n return;\r\n }\r\n\r\n // Tell the engine's render loop to be driven by the xr session's refresh rate and provide xr pose information\r\n this._engine.customAnimationFrameRequester = {\r\n requestAnimationFrame: (callback: FrameRequestCallback) => this.session.requestAnimationFrame(callback),\r\n renderFunction: (timestamp: number, xrFrame: Nullable<XRFrame>) => {\r\n if (!this.inXRSession || !this._engine) {\r\n return;\r\n }\r\n // Store the XR frame and timestamp in the session manager\r\n this.currentFrame = xrFrame;\r\n this.currentTimestamp = timestamp;\r\n if (xrFrame) {\r\n this.inXRFrameLoop = true;\r\n const framebufferDimensionsObject = this._baseLayerRTTProvider?.getFramebufferDimensions() || null;\r\n // equality can be tested as it should be the same object\r\n if (this._engine.framebufferDimensionsObject !== framebufferDimensionsObject) {\r\n this._engine.framebufferDimensionsObject = framebufferDimensionsObject;\r\n }\r\n this.onXRFrameObservable.notifyObservers(xrFrame);\r\n this._engine._renderLoop();\r\n this._engine.framebufferDimensionsObject = null;\r\n this.inXRFrameLoop = false;\r\n }\r\n },\r\n };\r\n\r\n this._engine.framebufferDimensionsObject = this._baseLayerRTTProvider?.getFramebufferDimensions() || null;\r\n this.onXRFrameObservable.addOnce(() => {\r\n this.onXRReady.notifyObservers(this);\r\n });\r\n\r\n // Stop window's animation frame and trigger sessions animation frame\r\n if (typeof window !== \"undefined\" && window.cancelAnimationFrame) {\r\n window.cancelAnimationFrame(this._engine._frameHandler);\r\n }\r\n this._engine._renderLoop();\r\n }\r\n\r\n /**\r\n * Sets the reference space on the xr session\r\n * @param referenceSpaceType space to set\r\n * @returns a promise that will resolve once the reference space has been set\r\n */\r\n public setReferenceSpaceTypeAsync(referenceSpaceType: XRReferenceSpaceType = \"local-floor\"): Promise<XRReferenceSpace> {\r\n return this.session\r\n .requestReferenceSpace(referenceSpaceType)\r\n .then(\r\n (referenceSpace) => {\r\n return referenceSpace as XRReferenceSpace;\r\n },\r\n (rejectionReason) => {\r\n Logger.Error(\"XR.requestReferenceSpace failed for the following reason: \");\r\n Logger.Error(rejectionReason);\r\n Logger.Log('Defaulting to universally-supported \"viewer\" reference space type.');\r\n\r\n return this.session.requestReferenceSpace(\"viewer\").then(\r\n (referenceSpace) => {\r\n const heightCompensation = new XRRigidTransform({ x: 0, y: -this.defaultHeightCompensation, z: 0 });\r\n return (referenceSpace as XRReferenceSpace).getOffsetReferenceSpace(heightCompensation);\r\n },\r\n (rejectionReason) => {\r\n Logger.Error(rejectionReason);\r\n // eslint-disable-next-line no-throw-literal\r\n throw 'XR initialization failed: required \"viewer\" reference space type not supported.';\r\n }\r\n );\r\n }\r\n )\r\n .then((referenceSpace) => {\r\n // create viewer reference space before setting the first reference space\r\n return this.session.requestReferenceSpace(\"viewer\").then((viewerReferenceSpace) => {\r\n this.viewerReferenceSpace = viewerReferenceSpace as XRReferenceSpace;\r\n return referenceSpace;\r\n });\r\n })\r\n .then((referenceSpace) => {\r\n // initialize the base and offset (currently the same)\r\n this.referenceSpace = this.baseReferenceSpace = referenceSpace;\r\n this.onXRReferenceSpaceInitialized.notifyObservers(referenceSpace);\r\n return this.referenceSpace;\r\n });\r\n }\r\n\r\n /**\r\n * Updates the render state of the session.\r\n * Note that this is deprecated in favor of WebXRSessionManager.updateRenderState().\r\n * @param state state to set\r\n * @returns a promise that resolves once the render state has been updated\r\n * @deprecated Use updateRenderState() instead.\r\n */\r\n public updateRenderStateAsync(state: XRRenderState): Promise<void> {\r\n return Promise.resolve(this.session.updateRenderState(state));\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _setBaseLayerWrapper(baseLayerWrapper: Nullable<WebXRLayerWrapper>): void {\r\n if (this.isNative) {\r\n this._baseLayerRTTProvider?.dispose();\r\n }\r\n this._baseLayerWrapper = baseLayerWrapper;\r\n this._baseLayerRTTProvider = this._baseLayerWrapper?.createRenderTargetTextureProvider(this) || null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getBaseLayerWrapper(): Nullable<WebXRLayerWrapper> {\r\n return this._baseLayerWrapper;\r\n }\r\n\r\n /**\r\n * Updates the render state of the session\r\n * @param state state to set\r\n */\r\n public updateRenderState(state: XRRenderStateInit): void {\r\n if (state.baseLayer) {\r\n this._setBaseLayerWrapper(this.isNative ? new NativeXRLayerWrapper(state.baseLayer) : new WebXRWebGLLayerWrapper(state.baseLayer));\r\n }\r\n\r\n this.session.updateRenderState(state);\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves with a boolean indicating if the provided session mode is supported by this browser\r\n * @param sessionMode defines the session to test\r\n * @returns a promise with boolean as final value\r\n */\r\n public static IsSessionSupportedAsync(sessionMode: XRSessionMode): Promise<boolean> {\r\n if (!(navigator as any).xr) {\r\n return Promise.resolve(false);\r\n }\r\n // When the specs are final, remove supportsSession!\r\n const functionToUse = (navigator as any).xr.isSessionSupported || (navigator as any).xr.supportsSession;\r\n if (!functionToUse) {\r\n return Promise.resolve(false);\r\n } else {\r\n return functionToUse\r\n .call((navigator as any).xr, sessionMode)\r\n .then((result: boolean) => {\r\n const returnValue = typeof result === \"undefined\" ? true : result;\r\n return Promise.resolve(returnValue);\r\n })\r\n .catch((e: any) => {\r\n Logger.Warn(e);\r\n return Promise.resolve(false);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if Babylon.js is using the BabylonNative backend, otherwise false\r\n */\r\n public get isNative(): boolean {\r\n return this._xrNavigator.xr.native ?? false;\r\n }\r\n\r\n /**\r\n * The current frame rate as reported by the device\r\n */\r\n public get currentFrameRate(): number | undefined {\r\n return this.session?.frameRate;\r\n }\r\n\r\n /**\r\n * A list of supported frame rates (only available in-session!\r\n */\r\n public get supportedFrameRates(): Float32Array | undefined {\r\n return this.session?.supportedFrameRates;\r\n }\r\n\r\n /**\r\n * Set the framerate of the session.\r\n * @param rate the new framerate. This value needs to be in the supportedFrameRates array\r\n * @returns a promise that resolves once the framerate has been set\r\n */\r\n public updateTargetFrameRate(rate: number): Promise<void> {\r\n return this.session.updateTargetFrameRate(rate);\r\n }\r\n\r\n /**\r\n * Run a callback in the xr render loop\r\n * @param callback the callback to call when in XR Frame\r\n * @param ignoreIfNotInSession if no session is currently running, run it first thing on the next session\r\n */\r\n public runInXRFrame(callback: () => void, ignoreIfNotInSession = true): void {\r\n if (this.inXRFrameLoop) {\r\n callback();\r\n } else if (this.inXRSession || !ignoreIfNotInSession) {\r\n this.onXRFrameObservable.addOnce(callback);\r\n }\r\n }\r\n\r\n /**\r\n * Check if fixed foveation is supported on this device\r\n */\r\n public get isFixedFoveationSupported(): boolean {\r\n return this._baseLayerWrapper?.isFixedFoveationSupported || false;\r\n }\r\n\r\n /**\r\n * Get the fixed foveation currently set, as specified by the webxr specs\r\n * If this returns null, then fixed foveation is not supported\r\n */\r\n public get fixedFoveation(): Nullable<number> {\r\n return this._baseLayerWrapper?.fixedFoveation || null;\r\n }\r\n\r\n /**\r\n * Set the fixed foveation to the specified value, as specified by the webxr specs\r\n * This value will be normalized to be between 0 and 1, 1 being max foveation, 0 being no foveation\r\n */\r\n public set fixedFoveation(value: Nullable<number>) {\r\n const val = Math.max(0, Math.min(1, value || 0));\r\n if (this._baseLayerWrapper) {\r\n this._baseLayerWrapper.fixedFoveation = val;\r\n }\r\n }\r\n\r\n /**\r\n * Get the features enabled on the current session\r\n * This is only available in-session!\r\n * @see https://www.w3.org/TR/webxr/#dom-xrsession-enabledfeatures\r\n */\r\n public get enabledFeatures(): Nullable<string[]> {\r\n return this.session?.enabledFeatures ?? null;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRSessionManager.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRSessionManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { WebXRRenderTarget } from \"./webXRTypes\";\r\nimport { WebXRManagedOutputCanvas, WebXRManagedOutputCanvasOptions } from \"./webXRManagedOutputCanvas\";\r\nimport type { Engine } from \"../Engines/engine\";\r\nimport type { IWebXRRenderTargetTextureProvider, WebXRLayerRenderTargetTextureProvider } from \"./webXRRenderTargetTextureProvider\";\r\nimport type { Viewport } from \"../Maths/math.viewport\";\r\nimport type { WebXRLayerWrapper } from \"./webXRLayerWrapper\";\r\nimport { NativeXRLayerWrapper, NativeXRRenderTarget } from \"./native/nativeXRRenderTarget\";\r\nimport { WebXRWebGLLayerWrapper } from \"./webXRWebGLLayer\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\n\r\n/**\r\n * Manages an XRSession to work with Babylon's engine\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/webXR/webXRSessionManagers\r\n */\r\nexport class WebXRSessionManager implements IDisposable, IWebXRRenderTargetTextureProvider {\r\n private _engine: Nullable<Engine>;\r\n private _referenceSpace: XRReferenceSpace;\r\n private _baseLayerWrapper: Nullable<WebXRLayerWrapper>;\r\n private _baseLayerRTTProvider: Nullable<WebXRLayerRenderTargetTextureProvider>;\r\n private _xrNavigator: any;\r\n private _sessionMode: XRSessionMode;\r\n private _onEngineDisposedObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /**\r\n * The base reference space from which the session started. good if you want to reset your\r\n * reference space\r\n */\r\n public baseReferenceSpace: XRReferenceSpace;\r\n /**\r\n * Current XR frame\r\n */\r\n public currentFrame: Nullable<XRFrame>;\r\n /** WebXR timestamp updated every frame */\r\n public currentTimestamp: number = -1;\r\n /**\r\n * Used just in case of a failure to initialize an immersive session.\r\n * The viewer reference space is compensated using this height, creating a kind of \"viewer-floor\" reference space\r\n */\r\n public defaultHeightCompensation = 1.7;\r\n /**\r\n * Fires every time a new xrFrame arrives which can be used to update the camera\r\n */\r\n public onXRFrameObservable: Observable<XRFrame> = new Observable<XRFrame>();\r\n /**\r\n * Fires when the reference space changed\r\n */\r\n public onXRReferenceSpaceChanged: Observable<XRReferenceSpace> = new Observable();\r\n /**\r\n * Fires when the xr session is ended either by the device or manually done\r\n */\r\n public onXRSessionEnded: Observable<any> = new Observable<any>();\r\n /**\r\n * Fires when the xr session is initialized: right after requestSession was called and returned with a successful result\r\n */\r\n public onXRSessionInit: Observable<XRSession> = new Observable<XRSession>();\r\n\r\n /**\r\n * Fires when the xr reference space has been initialized\r\n */\r\n public onXRReferenceSpaceInitialized: Observable<XRReferenceSpace> = new Observable<XRReferenceSpace>();\r\n\r\n /**\r\n * Fires when the session manager is rendering the first frame\r\n */\r\n public onXRReady: Observable<WebXRSessionManager> = new Observable<WebXRSessionManager>();\r\n /**\r\n * Underlying xr session\r\n */\r\n public session: XRSession;\r\n /**\r\n * The viewer (head position) reference space. This can be used to get the XR world coordinates\r\n * or get the offset the player is currently at.\r\n */\r\n public viewerReferenceSpace: XRReferenceSpace;\r\n /**\r\n * Are we currently in the XR loop?\r\n */\r\n public inXRFrameLoop: boolean = false;\r\n /**\r\n * Are we in an XR session?\r\n */\r\n public inXRSession: boolean = false;\r\n\r\n private _worldScalingFactor: number = 1;\r\n\r\n /**\r\n * Observable raised when the world scale has changed\r\n */\r\n public onWorldScaleFactorChangedObservable: Observable<{\r\n previousScaleFactor: number;\r\n newScaleFactor: number;\r\n }> = new Observable(undefined, true);\r\n\r\n /**\r\n * Scale factor to apply to all XR-related elements (camera, controllers)\r\n */\r\n public get worldScalingFactor(): number {\r\n return this._worldScalingFactor;\r\n }\r\n\r\n public set worldScalingFactor(value: number) {\r\n const oldValue = this._worldScalingFactor;\r\n this._worldScalingFactor = value;\r\n this.onWorldScaleFactorChangedObservable.notifyObservers({\r\n previousScaleFactor: oldValue,\r\n newScaleFactor: value,\r\n });\r\n }\r\n\r\n /**\r\n * Constructs a WebXRSessionManager, this must be initialized within a user action before usage\r\n * @param scene The scene which the session should be created for\r\n */\r\n constructor(\r\n /** The scene which the session should be created for */\r\n public scene: Scene\r\n ) {\r\n this._engine = scene.getEngine() as Engine;\r\n this._onEngineDisposedObserver = this._engine.onDisposeObservable.addOnce(() => {\r\n this._engine = null;\r\n });\r\n scene.onDisposeObservable.addOnce(() => {\r\n this.dispose();\r\n });\r\n }\r\n\r\n /**\r\n * The current reference space used in this session. This reference space can constantly change!\r\n * It is mainly used to offset the camera's position.\r\n */\r\n public get referenceSpace(): XRReferenceSpace {\r\n return this._referenceSpace;\r\n }\r\n\r\n /**\r\n * Set a new reference space and triggers the observable\r\n */\r\n public set referenceSpace(newReferenceSpace: XRReferenceSpace) {\r\n this._referenceSpace = newReferenceSpace;\r\n this.onXRReferenceSpaceChanged.notifyObservers(this._referenceSpace);\r\n }\r\n\r\n /**\r\n * The mode for the managed XR session\r\n */\r\n public get sessionMode(): XRSessionMode {\r\n return this._sessionMode;\r\n }\r\n\r\n /**\r\n * Disposes of the session manager\r\n * This should be called explicitly by the dev, if required.\r\n */\r\n public dispose() {\r\n // disposing without leaving XR? Exit XR first\r\n if (this.inXRSession) {\r\n this.exitXRAsync();\r\n }\r\n this.onXRFrameObservable.clear();\r\n this.onXRSessionEnded.clear();\r\n this.onXRReferenceSpaceChanged.clear();\r\n this.onXRSessionInit.clear();\r\n this.onWorldScaleFactorChangedObservable.clear();\r\n this._engine?.onDisposeObservable.remove(this._onEngineDisposedObserver);\r\n this._engine = null;\r\n }\r\n\r\n /**\r\n * Stops the xrSession and restores the render loop\r\n * @returns Promise which resolves after it exits XR\r\n */\r\n public async exitXRAsync() {\r\n if (this.session && this.inXRSession) {\r\n this.inXRSession = false;\r\n try {\r\n return await this.session.end();\r\n } catch {\r\n Logger.Warn(\"Could not end XR session.\");\r\n }\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Attempts to set the framebuffer-size-normalized viewport to be rendered this frame for this view.\r\n * In the event of a failure, the supplied viewport is not updated.\r\n * @param viewport the viewport to which the view will be rendered\r\n * @param view the view for which to set the viewport\r\n * @returns whether the operation was successful\r\n */\r\n public trySetViewportForView(viewport: Viewport, view: XRView): boolean {\r\n return this._baseLayerRTTProvider?.trySetViewportForView(viewport, view) || false;\r\n }\r\n\r\n /**\r\n * Gets the correct render target texture to be rendered this frame for this eye\r\n * @param eye the eye for which to get the render target\r\n * @returns the render target for the specified eye or null if not available\r\n */\r\n public getRenderTargetTextureForEye(eye: XREye): Nullable<RenderTargetTexture> {\r\n return this._baseLayerRTTProvider?.getRenderTargetTextureForEye(eye) || null;\r\n }\r\n\r\n /**\r\n * Gets the correct render target texture to be rendered this frame for this view\r\n * @param view the view for which to get the render target\r\n * @returns the render target for the specified view or null if not available\r\n */\r\n public getRenderTargetTextureForView(view: XRView): Nullable<RenderTargetTexture> {\r\n return this._baseLayerRTTProvider?.getRenderTargetTextureForView(view) || null;\r\n }\r\n\r\n /**\r\n * Creates a WebXRRenderTarget object for the XR session\r\n * @param options optional options to provide when creating a new render target\r\n * @returns a WebXR render target to which the session can render\r\n */\r\n public getWebXRRenderTarget(options?: WebXRManagedOutputCanvasOptions): WebXRRenderTarget {\r\n const engine = this.scene.getEngine();\r\n if (this._xrNavigator.xr.native) {\r\n return new NativeXRRenderTarget(this);\r\n } else {\r\n options = options || WebXRManagedOutputCanvasOptions.GetDefaults(engine);\r\n options.canvasElement = options.canvasElement || engine.getRenderingCanvas() || undefined;\r\n return new WebXRManagedOutputCanvas(this, options);\r\n }\r\n }\r\n\r\n /**\r\n * Initializes the manager\r\n * After initialization enterXR can be called to start an XR session\r\n * @returns Promise which resolves after it is initialized\r\n */\r\n public initializeAsync(): Promise<void> {\r\n // Check if the browser supports webXR\r\n this._xrNavigator = navigator;\r\n if (!this._xrNavigator.xr) {\r\n return Promise.reject(\"WebXR not available\");\r\n }\r\n return Promise.resolve();\r\n }\r\n\r\n /**\r\n * Initializes an xr session\r\n * @param xrSessionMode mode to initialize\r\n * @param xrSessionInit defines optional and required values to pass to the session builder\r\n * @returns a promise which will resolve once the session has been initialized\r\n */\r\n public initializeSessionAsync(xrSessionMode: XRSessionMode = \"immersive-vr\", xrSessionInit: XRSessionInit = {}): Promise<XRSession> {\r\n return this._xrNavigator.xr.requestSession(xrSessionMode, xrSessionInit).then((session: XRSession) => {\r\n this.session = session;\r\n this._sessionMode = xrSessionMode;\r\n this.inXRSession = true;\r\n this.onXRSessionInit.notifyObservers(session);\r\n\r\n // handle when the session is ended (By calling session.end or device ends its own session eg. pressing home button on phone)\r\n this.session.addEventListener(\r\n \"end\",\r\n () => {\r\n this.inXRSession = false;\r\n\r\n // Notify frame observers\r\n this.onXRSessionEnded.notifyObservers(null);\r\n\r\n if (this._engine) {\r\n // make sure dimensions object is restored\r\n this._engine.framebufferDimensionsObject = null;\r\n\r\n // Restore frame buffer to avoid clear on xr framebuffer after session end\r\n this._engine.restoreDefaultFramebuffer();\r\n\r\n // Need to restart render loop as after the session is ended the last request for new frame will never call callback\r\n this._engine.customAnimationFrameRequester = null;\r\n this._engine._renderLoop();\r\n }\r\n\r\n // Dispose render target textures.\r\n // Only dispose on native because we can't destroy opaque textures on browser.\r\n if (this.isNative) {\r\n this._baseLayerRTTProvider?.dispose();\r\n }\r\n this._baseLayerRTTProvider = null;\r\n this._baseLayerWrapper = null;\r\n },\r\n { once: true }\r\n );\r\n\r\n return this.session;\r\n });\r\n }\r\n\r\n /**\r\n * Checks if a session would be supported for the creation options specified\r\n * @param sessionMode session mode to check if supported eg. immersive-vr\r\n * @returns A Promise that resolves to true if supported and false if not\r\n */\r\n public isSessionSupportedAsync(sessionMode: XRSessionMode): Promise<boolean> {\r\n return WebXRSessionManager.IsSessionSupportedAsync(sessionMode);\r\n }\r\n\r\n /**\r\n * Resets the reference space to the one started the session\r\n */\r\n public resetReferenceSpace() {\r\n this.referenceSpace = this.baseReferenceSpace;\r\n }\r\n\r\n /**\r\n * Starts rendering to the xr layer\r\n */\r\n public runXRRenderLoop() {\r\n if (!this.inXRSession || !this._engine) {\r\n return;\r\n }\r\n\r\n // Tell the engine's render loop to be driven by the xr session's refresh rate and provide xr pose information\r\n this._engine.customAnimationFrameRequester = {\r\n requestAnimationFrame: (callback: FrameRequestCallback) => this.session.requestAnimationFrame(callback),\r\n renderFunction: (timestamp: number, xrFrame: Nullable<XRFrame>) => {\r\n if (!this.inXRSession || !this._engine) {\r\n return;\r\n }\r\n // Store the XR frame and timestamp in the session manager\r\n this.currentFrame = xrFrame;\r\n this.currentTimestamp = timestamp;\r\n if (xrFrame) {\r\n this.inXRFrameLoop = true;\r\n const framebufferDimensionsObject = this._baseLayerRTTProvider?.getFramebufferDimensions() || null;\r\n // equality can be tested as it should be the same object\r\n if (this._engine.framebufferDimensionsObject !== framebufferDimensionsObject) {\r\n this._engine.framebufferDimensionsObject = framebufferDimensionsObject;\r\n }\r\n this.onXRFrameObservable.notifyObservers(xrFrame);\r\n this._engine._renderLoop();\r\n this._engine.framebufferDimensionsObject = null;\r\n this.inXRFrameLoop = false;\r\n }\r\n },\r\n };\r\n\r\n this._engine.framebufferDimensionsObject = this._baseLayerRTTProvider?.getFramebufferDimensions() || null;\r\n this.onXRFrameObservable.addOnce(() => {\r\n this.onXRReady.notifyObservers(this);\r\n });\r\n\r\n // Stop window's animation frame and trigger sessions animation frame\r\n if (typeof window !== \"undefined\" && window.cancelAnimationFrame) {\r\n window.cancelAnimationFrame(this._engine._frameHandler);\r\n }\r\n this._engine._renderLoop();\r\n }\r\n\r\n /**\r\n * Sets the reference space on the xr session\r\n * @param referenceSpaceType space to set\r\n * @returns a promise that will resolve once the reference space has been set\r\n */\r\n public setReferenceSpaceTypeAsync(referenceSpaceType: XRReferenceSpaceType = \"local-floor\"): Promise<XRReferenceSpace> {\r\n return this.session\r\n .requestReferenceSpace(referenceSpaceType)\r\n .then(\r\n (referenceSpace) => {\r\n return referenceSpace as XRReferenceSpace;\r\n },\r\n (rejectionReason) => {\r\n Logger.Error(\"XR.requestReferenceSpace failed for the following reason: \");\r\n Logger.Error(rejectionReason);\r\n Logger.Log('Defaulting to universally-supported \"viewer\" reference space type.');\r\n\r\n return this.session.requestReferenceSpace(\"viewer\").then(\r\n (referenceSpace) => {\r\n const heightCompensation = new XRRigidTransform({ x: 0, y: -this.defaultHeightCompensation, z: 0 });\r\n return (referenceSpace as XRReferenceSpace).getOffsetReferenceSpace(heightCompensation);\r\n },\r\n (rejectionReason) => {\r\n Logger.Error(rejectionReason);\r\n // eslint-disable-next-line no-throw-literal\r\n throw 'XR initialization failed: required \"viewer\" reference space type not supported.';\r\n }\r\n );\r\n }\r\n )\r\n .then((referenceSpace) => {\r\n // create viewer reference space before setting the first reference space\r\n return this.session.requestReferenceSpace(\"viewer\").then((viewerReferenceSpace) => {\r\n this.viewerReferenceSpace = viewerReferenceSpace as XRReferenceSpace;\r\n return referenceSpace;\r\n });\r\n })\r\n .then((referenceSpace) => {\r\n // initialize the base and offset (currently the same)\r\n this.referenceSpace = this.baseReferenceSpace = referenceSpace;\r\n this.onXRReferenceSpaceInitialized.notifyObservers(referenceSpace);\r\n return this.referenceSpace;\r\n });\r\n }\r\n\r\n /**\r\n * Updates the render state of the session.\r\n * Note that this is deprecated in favor of WebXRSessionManager.updateRenderState().\r\n * @param state state to set\r\n * @returns a promise that resolves once the render state has been updated\r\n * @deprecated Use updateRenderState() instead.\r\n */\r\n public updateRenderStateAsync(state: XRRenderState): Promise<void> {\r\n return Promise.resolve(this.session.updateRenderState(state));\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _setBaseLayerWrapper(baseLayerWrapper: Nullable<WebXRLayerWrapper>): void {\r\n if (this.isNative) {\r\n this._baseLayerRTTProvider?.dispose();\r\n }\r\n this._baseLayerWrapper = baseLayerWrapper;\r\n this._baseLayerRTTProvider = this._baseLayerWrapper?.createRenderTargetTextureProvider(this) || null;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public _getBaseLayerWrapper(): Nullable<WebXRLayerWrapper> {\r\n return this._baseLayerWrapper;\r\n }\r\n\r\n /**\r\n * Updates the render state of the session\r\n * @param state state to set\r\n */\r\n public updateRenderState(state: XRRenderStateInit): void {\r\n if (state.baseLayer) {\r\n this._setBaseLayerWrapper(this.isNative ? new NativeXRLayerWrapper(state.baseLayer) : new WebXRWebGLLayerWrapper(state.baseLayer));\r\n }\r\n\r\n this.session.updateRenderState(state);\r\n }\r\n\r\n /**\r\n * Returns a promise that resolves with a boolean indicating if the provided session mode is supported by this browser\r\n * @param sessionMode defines the session to test\r\n * @returns a promise with boolean as final value\r\n */\r\n public static IsSessionSupportedAsync(sessionMode: XRSessionMode): Promise<boolean> {\r\n if (!(navigator as any).xr) {\r\n return Promise.resolve(false);\r\n }\r\n // When the specs are final, remove supportsSession!\r\n const functionToUse = (navigator as any).xr.isSessionSupported || (navigator as any).xr.supportsSession;\r\n if (!functionToUse) {\r\n return Promise.resolve(false);\r\n } else {\r\n return functionToUse\r\n .call((navigator as any).xr, sessionMode)\r\n .then((result: boolean) => {\r\n const returnValue = typeof result === \"undefined\" ? true : result;\r\n return Promise.resolve(returnValue);\r\n })\r\n .catch((e: any) => {\r\n Logger.Warn(e);\r\n return Promise.resolve(false);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if Babylon.js is using the BabylonNative backend, otherwise false\r\n */\r\n public get isNative(): boolean {\r\n return this._xrNavigator.xr.native ?? false;\r\n }\r\n\r\n /**\r\n * The current frame rate as reported by the device\r\n */\r\n public get currentFrameRate(): number | undefined {\r\n return this.session?.frameRate;\r\n }\r\n\r\n /**\r\n * A list of supported frame rates (only available in-session!\r\n */\r\n public get supportedFrameRates(): Float32Array | undefined {\r\n return this.session?.supportedFrameRates;\r\n }\r\n\r\n /**\r\n * Set the framerate of the session.\r\n * @param rate the new framerate. This value needs to be in the supportedFrameRates array\r\n * @returns a promise that resolves once the framerate has been set\r\n */\r\n public updateTargetFrameRate(rate: number): Promise<void> {\r\n return this.session.updateTargetFrameRate(rate);\r\n }\r\n\r\n /**\r\n * Run a callback in the xr render loop\r\n * @param callback the callback to call when in XR Frame\r\n * @param ignoreIfNotInSession if no session is currently running, run it first thing on the next session\r\n */\r\n public runInXRFrame(callback: () => void, ignoreIfNotInSession = true): void {\r\n if (this.inXRFrameLoop) {\r\n callback();\r\n } else if (this.inXRSession || !ignoreIfNotInSession) {\r\n this.onXRFrameObservable.addOnce(callback);\r\n }\r\n }\r\n\r\n /**\r\n * Check if fixed foveation is supported on this device\r\n */\r\n public get isFixedFoveationSupported(): boolean {\r\n return this._baseLayerWrapper?.isFixedFoveationSupported || false;\r\n }\r\n\r\n /**\r\n * Get the fixed foveation currently set, as specified by the webxr specs\r\n * If this returns null, then fixed foveation is not supported\r\n */\r\n public get fixedFoveation(): Nullable<number> {\r\n return this._baseLayerWrapper?.fixedFoveation || null;\r\n }\r\n\r\n /**\r\n * Set the fixed foveation to the specified value, as specified by the webxr specs\r\n * This value will be normalized to be between 0 and 1, 1 being max foveation, 0 being no foveation\r\n */\r\n public set fixedFoveation(value: Nullable<number>) {\r\n const val = Math.max(0, Math.min(1, value || 0));\r\n if (this._baseLayerWrapper) {\r\n this._baseLayerWrapper.fixedFoveation = val;\r\n }\r\n }\r\n\r\n /**\r\n * Get the features enabled on the current session\r\n * This is only available in-session!\r\n * @see https://www.w3.org/TR/webxr/#dom-xrsession-enabledfeatures\r\n */\r\n public get enabledFeatures(): Nullable<string[]> {\r\n return this.session?.enabledFeatures ?? null;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"assetContainer.js","sourceRoot":"","sources":["../../../dev/core/src/assetContainer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AbstractScene } from \"./abstractScene\";\r\nimport type { Scene } from \"./scene\";\r\nimport { Mesh } from \"./Meshes/mesh\";\r\nimport { TransformNode } from \"./Meshes/transformNode\";\r\nimport type { Skeleton } from \"./Bones/skeleton\";\r\nimport type { AnimationGroup } from \"./Animations/animationGroup\";\r\nimport type { Animatable } from \"./Animations/animatable\";\r\nimport { AbstractMesh } from \"./Meshes/abstractMesh\";\r\nimport type { MultiMaterial } from \"./Materials/multiMaterial\";\r\nimport type { Material } from \"./Materials/material\";\r\nimport { Logger } from \"./Misc/logger\";\r\nimport { EngineStore } from \"./Engines/engineStore\";\r\nimport type { Nullable } from \"./types\";\r\nimport type { Node } from \"./node\";\r\nimport type { Observer } from \"./Misc/observable\";\r\nimport type { ThinEngine } from \"./Engines/thinEngine\";\r\nimport { InstancedMesh } from \"./Meshes/instancedMesh\";\r\nimport { Light } from \"./Lights/light\";\r\nimport { Camera } from \"./Cameras/camera\";\r\nimport { Tools } from \"./Misc/tools\";\r\n\r\n/**\r\n * Set of assets to keep when moving a scene into an asset container.\r\n */\r\nexport class KeepAssets extends AbstractScene {}\r\n\r\n/**\r\n * Class used to store the output of the AssetContainer.instantiateAllMeshesToScene function\r\n */\r\nexport class InstantiatedEntries {\r\n /**\r\n * List of new root nodes (eg. nodes with no parent)\r\n */\r\n public rootNodes: Node[] = [];\r\n\r\n /**\r\n * List of new skeletons\r\n */\r\n public skeletons: Skeleton[] = [];\r\n\r\n /**\r\n * List of new animation groups\r\n */\r\n public animationGroups: AnimationGroup[] = [];\r\n\r\n /**\r\n * Disposes the instantiated entries from the scene\r\n */\r\n public dispose() {\r\n this.rootNodes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.rootNodes.length = 0;\r\n\r\n this.skeletons.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.skeletons.length = 0;\r\n\r\n this.animationGroups.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.animationGroups.length = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Container with a set of assets that can be added or removed from a scene.\r\n */\r\nexport class AssetContainer extends AbstractScene {\r\n private _wasAddedToScene = false;\r\n private _onContextRestoredObserver: Nullable<Observer<ThinEngine>>;\r\n\r\n /**\r\n * The scene the AssetContainer belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Instantiates an AssetContainer.\r\n * @param scene The scene the AssetContainer belongs to.\r\n */\r\n constructor(scene?: Nullable<Scene>) {\r\n super();\r\n scene = scene || EngineStore.LastCreatedScene;\r\n if (!scene) {\r\n return;\r\n }\r\n this.scene = scene;\r\n this[\"sounds\"] = [];\r\n this[\"effectLayers\"] = [];\r\n this[\"layers\"] = [];\r\n this[\"lensFlareSystems\"] = [];\r\n this[\"proceduralTextures\"] = [];\r\n this[\"reflectionProbes\"] = [];\r\n\r\n scene.onDisposeObservable.add(() => {\r\n if (!this._wasAddedToScene) {\r\n this.dispose();\r\n }\r\n });\r\n\r\n this._onContextRestoredObserver = scene.getEngine().onContextRestoredObservable.add(() => {\r\n for (const geometry of this.geometries) {\r\n geometry._rebuild();\r\n }\r\n\r\n for (const mesh of this.meshes) {\r\n mesh._rebuild();\r\n }\r\n\r\n for (const system of this.particleSystems) {\r\n system.rebuild();\r\n }\r\n\r\n for (const texture of this.textures) {\r\n texture._rebuild();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Given a list of nodes, return a topological sorting of them.\r\n * @param nodes\r\n * @returns a sorted array of nodes\r\n */\r\n private _topologicalSort(nodes: Node[]): Node[] {\r\n const nodesUidMap = new Map<number, Node>();\r\n\r\n for (const node of nodes) {\r\n nodesUidMap.set(node.uniqueId, node);\r\n }\r\n\r\n const dependencyGraph = {\r\n dependsOn: new Map<number, Set<number>>(), // given a node id, what are the ids of the nodes it depends on\r\n dependedBy: new Map<number, Set<number>>(), // given a node id, what are the ids of the nodes that depend on it\r\n };\r\n\r\n // Build the dependency graph given the list of nodes\r\n\r\n // First pass: Initialize the empty dependency graph\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n dependencyGraph.dependsOn.set(nodeId, new Set<number>());\r\n dependencyGraph.dependedBy.set(nodeId, new Set<number>());\r\n }\r\n\r\n // Second pass: Populate the dependency graph. We assume that we\r\n // don't need to check for cycles here, as the scene graph cannot\r\n // contain cycles. Our graph also already contains all transitive\r\n // dependencies because getDescendants returns the transitive\r\n // dependencies by default.\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n const dependsOn = dependencyGraph.dependsOn.get(nodeId)!;\r\n if (node instanceof InstancedMesh) {\r\n const masterMesh = node.sourceMesh;\r\n if (nodesUidMap.has(masterMesh.uniqueId)) {\r\n dependsOn.add(masterMesh.uniqueId);\r\n dependencyGraph.dependedBy.get(masterMesh.uniqueId)!.add(nodeId);\r\n }\r\n }\r\n const dependedBy = dependencyGraph.dependedBy.get(nodeId)!;\r\n\r\n for (const child of node.getDescendants()) {\r\n const childId = child.uniqueId;\r\n if (nodesUidMap.has(childId)) {\r\n dependedBy.add(childId);\r\n\r\n const childDependsOn = dependencyGraph.dependsOn.get(childId)!;\r\n childDependsOn.add(nodeId);\r\n }\r\n }\r\n }\r\n\r\n // Third pass: Topological sort\r\n const sortedNodes: Node[] = [];\r\n\r\n // First: Find all nodes that have no dependencies\r\n const leaves: Node[] = [];\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n if (dependencyGraph.dependsOn.get(nodeId)!.size === 0) {\r\n leaves.push(node);\r\n nodesUidMap.delete(nodeId);\r\n }\r\n }\r\n\r\n const visitList = leaves;\r\n while (visitList.length > 0) {\r\n const nodeToVisit = visitList.shift()!;\r\n\r\n sortedNodes.push(nodeToVisit);\r\n\r\n // Remove the node from the dependency graph\r\n // When a node is visited, we know that dependsOn is empty.\r\n // So we only need to remove the node from dependedBy.\r\n const dependedByVisitedNode = dependencyGraph.dependedBy.get(nodeToVisit.uniqueId)!;\r\n // Array.from(x.values()) is to make the TS compiler happy\r\n for (const dependedByVisitedNodeId of Array.from(dependedByVisitedNode.values())) {\r\n const dependsOnDependedByVisitedNode = dependencyGraph.dependsOn.get(dependedByVisitedNodeId)!;\r\n dependsOnDependedByVisitedNode.delete(nodeToVisit.uniqueId);\r\n\r\n if (dependsOnDependedByVisitedNode.size === 0 && nodesUidMap.get(dependedByVisitedNodeId)) {\r\n visitList.push(nodesUidMap.get(dependedByVisitedNodeId)!);\r\n nodesUidMap.delete(dependedByVisitedNodeId);\r\n }\r\n }\r\n }\r\n\r\n if (nodesUidMap.size > 0) {\r\n Logger.Error(\"SceneSerializer._topologicalSort: There were unvisited nodes:\");\r\n nodesUidMap.forEach((node) => Logger.Error(node.name));\r\n }\r\n\r\n return sortedNodes;\r\n }\r\n\r\n private _addNodeAndDescendantsToList(list: Node[], addedIds: Set<number>, rootNode?: Node, predicate?: (entity: any) => boolean) {\r\n if (!rootNode || (predicate && !predicate(rootNode)) || addedIds.has(rootNode.uniqueId)) {\r\n return;\r\n }\r\n\r\n list.push(rootNode);\r\n addedIds.add(rootNode.uniqueId);\r\n\r\n for (const child of rootNode.getDescendants(true)) {\r\n this._addNodeAndDescendantsToList(list, addedIds, child, predicate);\r\n }\r\n }\r\n\r\n /**\r\n * Check if a specific node is contained in this asset container.\r\n * @param node the node to check\r\n * @returns true if the node is contained in this container, otherwise false.\r\n */\r\n private _isNodeInContainer(node: Node) {\r\n if (node instanceof AbstractMesh && this.meshes.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof TransformNode && this.transformNodes.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof Light && this.lights.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof Camera && this.cameras.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * For every node in the scene, check if its parent node is also in the scene.\r\n * @returns true if every node's parent is also in the scene, otherwise false.\r\n */\r\n private _isValidHierarchy() {\r\n for (const node of this.meshes) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.transformNodes) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.lights) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.cameras) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Instantiate or clone all meshes and add the new ones to the scene.\r\n * Skeletons and animation groups will all be cloned\r\n * @param nameFunction defines an optional function used to get new names for clones\r\n * @param cloneMaterials defines an optional boolean that defines if materials must be cloned as well (false by default)\r\n * @param options defines an optional list of options to control how to instantiate / clone models\r\n * @param options.doNotInstantiate defines if the model must be instantiated or just cloned\r\n * @param options.predicate defines a predicate used to filter whih mesh to instantiate/clone\r\n * @returns a list of rootNodes, skeletons and animation groups that were duplicated\r\n */\r\n public instantiateModelsToScene(\r\n nameFunction?: (sourceName: string) => string,\r\n cloneMaterials = false,\r\n options?: { doNotInstantiate?: boolean | ((node: Node) => boolean); predicate?: (entity: any) => boolean }\r\n ): InstantiatedEntries {\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n const conversionMap: { [key: number]: number } = {};\r\n const storeMap: { [key: number]: any } = {};\r\n const result = new InstantiatedEntries();\r\n const alreadySwappedSkeletons: Skeleton[] = [];\r\n const alreadySwappedMaterials: Material[] = [];\r\n\r\n const localOptions = {\r\n doNotInstantiate: true,\r\n ...options,\r\n };\r\n\r\n const onClone = (source: Node, clone: Node) => {\r\n conversionMap[source.uniqueId] = clone.uniqueId;\r\n storeMap[clone.uniqueId] = clone;\r\n\r\n if (nameFunction) {\r\n clone.name = nameFunction(source.name);\r\n }\r\n\r\n if (clone instanceof Mesh) {\r\n const clonedMesh = clone as Mesh;\r\n\r\n if (clonedMesh.morphTargetManager) {\r\n const oldMorphTargetManager = (source as Mesh).morphTargetManager!;\r\n clonedMesh.morphTargetManager = oldMorphTargetManager.clone();\r\n\r\n for (let index = 0; index < oldMorphTargetManager.numTargets; index++) {\r\n const oldTarget = oldMorphTargetManager.getTarget(index);\r\n const newTarget = clonedMesh.morphTargetManager.getTarget(index);\r\n\r\n conversionMap[oldTarget.uniqueId] = newTarget.uniqueId;\r\n storeMap[newTarget.uniqueId] = newTarget;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const nodesToSort: Node[] = [];\r\n const idsOnSortList = new Set<number>();\r\n\r\n for (const transformNode of this.transformNodes) {\r\n if (transformNode.parent === null) {\r\n this._addNodeAndDescendantsToList(nodesToSort, idsOnSortList, transformNode, localOptions.predicate);\r\n }\r\n }\r\n\r\n for (const mesh of this.meshes) {\r\n if (mesh.parent === null) {\r\n this._addNodeAndDescendantsToList(nodesToSort, idsOnSortList, mesh, localOptions.predicate);\r\n }\r\n }\r\n\r\n // Topologically sort nodes by parenting/instancing relationships so that all resources are in place\r\n // when a given node is instantiated.\r\n const sortedNodes = this._topologicalSort(nodesToSort);\r\n\r\n const onNewCreated = (source: Node, clone: Node) => {\r\n onClone(source, clone);\r\n\r\n if (source.parent) {\r\n const replicatedParentId = conversionMap[source.parent.uniqueId];\r\n const replicatedParent = storeMap[replicatedParentId];\r\n\r\n if (replicatedParent) {\r\n clone.parent = replicatedParent;\r\n } else {\r\n clone.parent = source.parent;\r\n }\r\n }\r\n\r\n if ((clone as any).position && (source as any).position) {\r\n (clone as any).position.copyFrom((source as any).position);\r\n }\r\n if ((clone as any).rotationQuaternion && (source as any).rotationQuaternion) {\r\n (clone as any).rotationQuaternion.copyFrom((source as any).rotationQuaternion);\r\n }\r\n if ((clone as any).rotation && (source as any).rotation) {\r\n (clone as any).rotation.copyFrom((source as any).rotation);\r\n }\r\n if ((clone as any).scaling && (source as any).scaling) {\r\n (clone as any).scaling.copyFrom((source as any).scaling);\r\n }\r\n\r\n if ((clone as any).material) {\r\n const mesh = clone as AbstractMesh;\r\n\r\n if (mesh.material) {\r\n if (cloneMaterials) {\r\n const sourceMaterial = (source as AbstractMesh).material!;\r\n\r\n if (alreadySwappedMaterials.indexOf(sourceMaterial) === -1) {\r\n let swap = sourceMaterial.clone(nameFunction ? nameFunction(sourceMaterial.name) : \"Clone of \" + sourceMaterial.name)!;\r\n alreadySwappedMaterials.push(sourceMaterial);\r\n conversionMap[sourceMaterial.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n\r\n if (sourceMaterial.getClassName() === \"MultiMaterial\") {\r\n const multi = sourceMaterial as MultiMaterial;\r\n\r\n for (const material of multi.subMaterials) {\r\n if (!material) {\r\n continue;\r\n }\r\n swap = material.clone(nameFunction ? nameFunction(material.name) : \"Clone of \" + material.name)!;\r\n alreadySwappedMaterials.push(material);\r\n conversionMap[material.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n }\r\n\r\n multi.subMaterials = multi.subMaterials.map((m) => m && storeMap[conversionMap[m.uniqueId]]);\r\n }\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.material = storeMap[conversionMap[sourceMaterial.uniqueId]];\r\n }\r\n } else {\r\n if (mesh.material.getClassName() === \"MultiMaterial\") {\r\n if (this.scene.multiMaterials.indexOf(mesh.material as MultiMaterial) === -1) {\r\n this.scene.addMultiMaterial(mesh.material as MultiMaterial);\r\n }\r\n } else {\r\n if (this.scene.materials.indexOf(mesh.material) === -1) {\r\n this.scene.addMaterial(mesh.material);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (clone.parent === null) {\r\n result.rootNodes.push(clone);\r\n }\r\n };\r\n\r\n sortedNodes.forEach((node) => {\r\n if (node.getClassName() === \"InstancedMesh\") {\r\n const instancedNode = node as InstancedMesh;\r\n const sourceMesh = instancedNode.sourceMesh;\r\n const replicatedSourceId = conversionMap[sourceMesh.uniqueId];\r\n const replicatedSource = typeof replicatedSourceId === \"number\" ? storeMap[replicatedSourceId] : sourceMesh;\r\n const replicatedInstancedNode = replicatedSource.createInstance(instancedNode.name);\r\n onNewCreated(instancedNode, replicatedInstancedNode);\r\n } else {\r\n // Mesh or TransformNode\r\n let canInstance = true;\r\n if (\r\n node.getClassName() === \"TransformNode\" ||\r\n node.getClassName() === \"Node\" ||\r\n (node as Mesh).skeleton ||\r\n !(node as any).getTotalVertices ||\r\n (node as Mesh).getTotalVertices() === 0\r\n ) {\r\n // Transform nodes, skinned meshes, and meshes with no vertices can never be instanced!\r\n canInstance = false;\r\n } else if (localOptions.doNotInstantiate) {\r\n if (typeof localOptions.doNotInstantiate === \"function\") {\r\n canInstance = !localOptions.doNotInstantiate(node);\r\n } else {\r\n canInstance = !localOptions.doNotInstantiate;\r\n }\r\n }\r\n const replicatedNode = canInstance ? (node as Mesh).createInstance(`instance of ${node.name}`) : node.clone(`Clone of ${node.name}`, null, true);\r\n if (!replicatedNode) {\r\n throw new Error(`Could not clone or instantiate node on Asset Container ${node.name}`);\r\n }\r\n onNewCreated(node, replicatedNode);\r\n }\r\n });\r\n\r\n this.skeletons.forEach((s) => {\r\n if (localOptions.predicate && !localOptions.predicate(s)) {\r\n return;\r\n }\r\n\r\n const clone = s.clone(nameFunction ? nameFunction(s.name) : \"Clone of \" + s.name);\r\n\r\n for (const m of this.meshes) {\r\n if (m.skeleton === s && !m.isAnInstance) {\r\n const copy = storeMap[conversionMap[m.uniqueId]] as Mesh;\r\n if (!copy || copy.isAnInstance) {\r\n continue;\r\n }\r\n copy.skeleton = clone;\r\n\r\n if (alreadySwappedSkeletons.indexOf(clone) !== -1) {\r\n continue;\r\n }\r\n\r\n alreadySwappedSkeletons.push(clone);\r\n\r\n // Check if bones are mesh linked\r\n for (const bone of clone.bones) {\r\n if (bone._linkedTransformNode) {\r\n bone._linkedTransformNode = storeMap[conversionMap[bone._linkedTransformNode.uniqueId]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.skeletons.push(clone);\r\n });\r\n\r\n this.animationGroups.forEach((o) => {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n return;\r\n }\r\n\r\n const clone = o.clone(nameFunction ? nameFunction(o.name) : \"Clone of \" + o.name, (oldTarget) => {\r\n const newTarget = storeMap[conversionMap[oldTarget.uniqueId]];\r\n\r\n return newTarget || oldTarget;\r\n });\r\n\r\n result.animationGroups.push(clone);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds all the assets from the container to the scene.\r\n */\r\n public addAllToScene() {\r\n if (this._wasAddedToScene) {\r\n return;\r\n }\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.addAllToScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n\r\n this._wasAddedToScene = true;\r\n\r\n this.addToScene(null);\r\n\r\n if (this.environmentTexture) {\r\n this.scene.environmentTexture = this.environmentTexture;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.addFromContainer(this);\r\n }\r\n\r\n this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n\r\n /**\r\n * Adds assets from the container to the scene.\r\n * @param predicate defines a predicate used to select which entity will be added (can be null)\r\n */\r\n public addToScene(predicate: Nullable<(entity: any) => boolean> = null) {\r\n const addedNodes: Node[] = [];\r\n this.cameras.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addCamera(o);\r\n addedNodes.push(o);\r\n });\r\n this.lights.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addLight(o);\r\n addedNodes.push(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMesh(o);\r\n addedNodes.push(o);\r\n });\r\n this.skeletons.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addTransformNode(o);\r\n addedNodes.push(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addReflectionProbe(o);\r\n });\r\n\r\n for (const addedNode of addedNodes) {\r\n // If node was added to the scene, but parent is not in the scene, break the relationship\r\n if (addedNode.parent && this.scene.getNodes().indexOf(addedNode.parent) === -1) {\r\n // Use setParent to keep transform if possible\r\n if ((addedNode as TransformNode).setParent) {\r\n (addedNode as TransformNode).setParent(null);\r\n } else {\r\n addedNode.parent = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets in the container from the scene\r\n */\r\n public removeAllFromScene() {\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.removeAllFromScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n\r\n this._wasAddedToScene = false;\r\n\r\n this.removeFromScene(null);\r\n\r\n if (this.environmentTexture === this.scene.environmentTexture) {\r\n this.scene.environmentTexture = null;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.removeFromContainer(this);\r\n }\r\n }\r\n\r\n /**\r\n * Removes assets in the container from the scene\r\n * @param predicate defines a predicate used to select which entity will be added (can be null)\r\n */\r\n public removeFromScene(predicate: Nullable<(entity: any) => boolean> = null) {\r\n this.cameras.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeCamera(o);\r\n });\r\n this.lights.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeLight(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMesh(o, true);\r\n });\r\n this.skeletons.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeTransformNode(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeReflectionProbe(o);\r\n });\r\n }\r\n\r\n /**\r\n * Disposes all the assets in the container\r\n */\r\n public dispose() {\r\n this.cameras.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.cameras.length = 0;\r\n\r\n this.lights.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.lights.length = 0;\r\n\r\n this.meshes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.meshes.length = 0;\r\n\r\n this.skeletons.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.skeletons.length = 0;\r\n\r\n this.animationGroups.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.animationGroups.length = 0;\r\n\r\n this.multiMaterials.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.multiMaterials.length = 0;\r\n\r\n this.materials.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.materials.length = 0;\r\n\r\n this.geometries.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.geometries.length = 0;\r\n\r\n this.transformNodes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.transformNodes.length = 0;\r\n\r\n this.actionManagers.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.actionManagers.length = 0;\r\n\r\n this.textures.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.textures.length = 0;\r\n\r\n this.reflectionProbes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.reflectionProbes.length = 0;\r\n\r\n this.morphTargetManagers.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.morphTargetManagers.length = 0;\r\n\r\n if (this.environmentTexture) {\r\n this.environmentTexture.dispose();\r\n this.environmentTexture = null;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.removeFromContainer(this, true);\r\n }\r\n\r\n if (this._onContextRestoredObserver) {\r\n this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n\r\n private _moveAssets<T>(sourceAssets: T[], targetAssets: T[], keepAssets: T[]): void {\r\n if (!sourceAssets || !targetAssets) {\r\n return;\r\n }\r\n\r\n for (const asset of sourceAssets) {\r\n let move = true;\r\n if (keepAssets) {\r\n for (const keepAsset of keepAssets) {\r\n if (asset === keepAsset) {\r\n move = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (move) {\r\n targetAssets.push(asset);\r\n (asset as any)._parentContainer = this;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets contained in the scene and adds them to the container.\r\n * @param keepAssets Set of assets to keep in the scene. (default: empty)\r\n */\r\n public moveAllFromScene(keepAssets?: KeepAssets): void {\r\n this._wasAddedToScene = false;\r\n\r\n if (keepAssets === undefined) {\r\n keepAssets = new KeepAssets();\r\n }\r\n\r\n for (const key in this) {\r\n if (Object.prototype.hasOwnProperty.call(this, key)) {\r\n (<any>this)[key] = (<any>this)[key] || (key === \"_environmentTexture\" ? null : []);\r\n this._moveAssets((<any>this.scene)[key], (<any>this)[key], (<any>keepAssets)[key]);\r\n }\r\n }\r\n\r\n this.environmentTexture = this.scene.environmentTexture;\r\n\r\n this.removeAllFromScene();\r\n }\r\n\r\n /**\r\n * Adds all meshes in the asset container to a root mesh that can be used to position all the contained meshes. The root mesh is then added to the front of the meshes in the assetContainer.\r\n * @returns the root mesh\r\n */\r\n public createRootMesh() {\r\n const rootMesh = new Mesh(\"assetContainerRootMesh\", this.scene);\r\n this.meshes.forEach((m) => {\r\n if (!m.parent) {\r\n rootMesh.addChild(m);\r\n }\r\n });\r\n this.meshes.unshift(rootMesh);\r\n return rootMesh;\r\n }\r\n\r\n /**\r\n * Merge animations (direct and animation groups) from this asset container into a scene\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param animatables set of animatables to retarget to a node from the scene\r\n * @param targetConverter defines a function used to convert animation targets from the asset container to the scene (default: search node by name)\r\n * @returns an array of the new AnimationGroup added to the scene (empty array if none)\r\n */\r\n public mergeAnimationsTo(\r\n scene: Nullable<Scene> = EngineStore.LastCreatedScene,\r\n animatables: Animatable[],\r\n targetConverter: Nullable<(target: any) => Nullable<Node>> = null\r\n ): AnimationGroup[] {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to merge animations to\");\r\n return [];\r\n }\r\n\r\n const _targetConverter = targetConverter\r\n ? targetConverter\r\n : (target: any) => {\r\n let node = null;\r\n\r\n const targetProperty = target.animations.length ? target.animations[0].targetProperty : \"\";\r\n /*\r\n BabylonJS adds special naming to targets that are children of nodes.\r\n This name attempts to remove that special naming to get the parent nodes name in case the target\r\n can't be found in the node tree\r\n\r\n Ex: Torso_primitive0 likely points to a Mesh primitive. We take away primitive0 and are left with \"Torso\" which is the name\r\n of the primitive's parent.\r\n */\r\n const name = target.name.split(\".\").join(\"\").split(\"_primitive\")[0];\r\n\r\n switch (targetProperty) {\r\n case \"position\":\r\n case \"rotationQuaternion\":\r\n node = scene.getTransformNodeByName(target.name) || scene.getTransformNodeByName(name);\r\n break;\r\n case \"influence\":\r\n node = scene.getMorphTargetByName(target.name) || scene.getMorphTargetByName(name);\r\n break;\r\n default:\r\n node = scene.getNodeByName(target.name) || scene.getNodeByName(name);\r\n }\r\n\r\n return node;\r\n };\r\n\r\n // Copy new node animations\r\n const nodesInAC = this.getNodes();\r\n nodesInAC.forEach((nodeInAC) => {\r\n const nodeInScene = _targetConverter(nodeInAC);\r\n if (nodeInScene !== null) {\r\n // Remove old animations with same target property as a new one\r\n for (const animationInAC of nodeInAC.animations) {\r\n // Doing treatment on an array for safety measure\r\n const animationsWithSameProperty = nodeInScene.animations.filter((animationInScene) => {\r\n return animationInScene.targetProperty === animationInAC.targetProperty;\r\n });\r\n for (const animationWithSameProperty of animationsWithSameProperty) {\r\n const index = nodeInScene.animations.indexOf(animationWithSameProperty, 0);\r\n if (index > -1) {\r\n nodeInScene.animations.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n // Append new animations\r\n nodeInScene.animations = nodeInScene.animations.concat(nodeInAC.animations);\r\n }\r\n });\r\n\r\n const newAnimationGroups: AnimationGroup[] = [];\r\n\r\n // Copy new animation groups\r\n this.animationGroups.slice().forEach((animationGroupInAC) => {\r\n // Clone the animation group and all its animatables\r\n newAnimationGroups.push(animationGroupInAC.clone(animationGroupInAC.name, _targetConverter));\r\n\r\n // Remove animatables related to the asset container\r\n animationGroupInAC.animatables.forEach((animatable) => {\r\n animatable.stop();\r\n });\r\n });\r\n\r\n // Retarget animatables\r\n animatables.forEach((animatable) => {\r\n const target = _targetConverter(animatable.target);\r\n\r\n if (target) {\r\n // Clone the animatable and retarget it\r\n scene.beginAnimation(\r\n target,\r\n animatable.fromFrame,\r\n animatable.toFrame,\r\n animatable.loopAnimation,\r\n animatable.speedRatio,\r\n animatable.onAnimationEnd ? animatable.onAnimationEnd : undefined,\r\n undefined,\r\n true,\r\n undefined,\r\n animatable.onAnimationLoop ? animatable.onAnimationLoop : undefined\r\n );\r\n\r\n // Stop animation for the target in the asset container\r\n scene.stopAnimation(animatable.target);\r\n }\r\n });\r\n\r\n return newAnimationGroups;\r\n }\r\n\r\n /**\r\n * @since 6.15.0\r\n * This method checks for any node that has no parent\r\n * and is not in the rootNodes array, and adds the node\r\n * there, if so.\r\n */\r\n public populateRootNodes() {\r\n this.rootNodes.length = 0;\r\n this.meshes.forEach((m) => {\r\n if (!m.parent && this.rootNodes.indexOf(m) === -1) {\r\n this.rootNodes.push(m);\r\n }\r\n });\r\n this.transformNodes.forEach((t) => {\r\n if (!t.parent && this.rootNodes.indexOf(t) === -1) {\r\n this.rootNodes.push(t);\r\n }\r\n });\r\n this.lights.forEach((l) => {\r\n if (!l.parent && this.rootNodes.indexOf(l) === -1) {\r\n this.rootNodes.push(l);\r\n }\r\n });\r\n this.cameras.forEach((c) => {\r\n if (!c.parent && this.rootNodes.indexOf(c) === -1) {\r\n this.rootNodes.push(c);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @since 6.26.0\r\n * Given a root asset, this method will traverse its hierarchy and add it, its children and any materials/skeletons/animation groups to the container.\r\n * @param root root node\r\n */\r\n public addAllAssetsToContainer(root: Node) {\r\n if (!root) {\r\n return;\r\n }\r\n\r\n const nodesToVisit: Node[] = [];\r\n const visitedNodes = new Set<Node>();\r\n\r\n nodesToVisit.push(root);\r\n\r\n while (nodesToVisit.length > 0) {\r\n const nodeToVisit = nodesToVisit.pop()!;\r\n\r\n if (nodeToVisit instanceof Mesh) {\r\n if (nodeToVisit.geometry && this.geometries.indexOf(nodeToVisit.geometry) === -1) {\r\n this.geometries.push(nodeToVisit.geometry);\r\n }\r\n this.meshes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof TransformNode) {\r\n this.transformNodes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof Light) {\r\n this.lights.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof Camera) {\r\n this.cameras.push(nodeToVisit);\r\n }\r\n\r\n if (nodeToVisit instanceof AbstractMesh) {\r\n if (nodeToVisit.material && this.materials.indexOf(nodeToVisit.material) === -1) {\r\n this.materials.push(nodeToVisit.material);\r\n for (const texture of nodeToVisit.material.getActiveTextures()) {\r\n if (this.textures.indexOf(texture) === -1) {\r\n this.textures.push(texture);\r\n }\r\n }\r\n }\r\n\r\n if (nodeToVisit.skeleton && this.skeletons.indexOf(nodeToVisit.skeleton) === -1) {\r\n this.skeletons.push(nodeToVisit.skeleton);\r\n }\r\n\r\n if (nodeToVisit.morphTargetManager && this.morphTargetManagers.indexOf(nodeToVisit.morphTargetManager) === -1) {\r\n this.morphTargetManagers.push(nodeToVisit.morphTargetManager);\r\n }\r\n }\r\n\r\n for (const child of nodeToVisit.getChildren()) {\r\n if (!visitedNodes.has(child)) {\r\n nodesToVisit.push(child);\r\n }\r\n }\r\n\r\n visitedNodes.add(nodeToVisit);\r\n }\r\n\r\n this.populateRootNodes();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"assetContainer.js","sourceRoot":"","sources":["../../../dev/core/src/assetContainer.ts"],"names":[],"mappings":"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","sourcesContent":["import { AbstractScene } from \"./abstractScene\";\r\nimport type { Scene } from \"./scene\";\r\nimport { Mesh } from \"./Meshes/mesh\";\r\nimport { TransformNode } from \"./Meshes/transformNode\";\r\nimport type { Skeleton } from \"./Bones/skeleton\";\r\nimport type { AnimationGroup } from \"./Animations/animationGroup\";\r\nimport type { Animatable } from \"./Animations/animatable\";\r\nimport { AbstractMesh } from \"./Meshes/abstractMesh\";\r\nimport type { MultiMaterial } from \"./Materials/multiMaterial\";\r\nimport type { Material } from \"./Materials/material\";\r\nimport { Logger } from \"./Misc/logger\";\r\nimport { EngineStore } from \"./Engines/engineStore\";\r\nimport type { Nullable } from \"./types\";\r\nimport type { Node } from \"./node\";\r\nimport type { Observer } from \"./Misc/observable\";\r\nimport type { AbstractEngine } from \"./Engines/abstractEngine\";\r\nimport { InstancedMesh } from \"./Meshes/instancedMesh\";\r\nimport { Light } from \"./Lights/light\";\r\nimport { Camera } from \"./Cameras/camera\";\r\nimport { Tools } from \"./Misc/tools\";\r\n\r\n/**\r\n * Set of assets to keep when moving a scene into an asset container.\r\n */\r\nexport class KeepAssets extends AbstractScene {}\r\n\r\n/**\r\n * Class used to store the output of the AssetContainer.instantiateAllMeshesToScene function\r\n */\r\nexport class InstantiatedEntries {\r\n /**\r\n * List of new root nodes (eg. nodes with no parent)\r\n */\r\n public rootNodes: Node[] = [];\r\n\r\n /**\r\n * List of new skeletons\r\n */\r\n public skeletons: Skeleton[] = [];\r\n\r\n /**\r\n * List of new animation groups\r\n */\r\n public animationGroups: AnimationGroup[] = [];\r\n\r\n /**\r\n * Disposes the instantiated entries from the scene\r\n */\r\n public dispose() {\r\n this.rootNodes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.rootNodes.length = 0;\r\n\r\n this.skeletons.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.skeletons.length = 0;\r\n\r\n this.animationGroups.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.animationGroups.length = 0;\r\n }\r\n}\r\n\r\n/**\r\n * Container with a set of assets that can be added or removed from a scene.\r\n */\r\nexport class AssetContainer extends AbstractScene {\r\n private _wasAddedToScene = false;\r\n private _onContextRestoredObserver: Nullable<Observer<AbstractEngine>>;\r\n\r\n /**\r\n * The scene the AssetContainer belongs to.\r\n */\r\n public scene: Scene;\r\n\r\n /**\r\n * Instantiates an AssetContainer.\r\n * @param scene The scene the AssetContainer belongs to.\r\n */\r\n constructor(scene?: Nullable<Scene>) {\r\n super();\r\n scene = scene || EngineStore.LastCreatedScene;\r\n if (!scene) {\r\n return;\r\n }\r\n this.scene = scene;\r\n this[\"sounds\"] = [];\r\n this[\"effectLayers\"] = [];\r\n this[\"layers\"] = [];\r\n this[\"lensFlareSystems\"] = [];\r\n this[\"proceduralTextures\"] = [];\r\n this[\"reflectionProbes\"] = [];\r\n\r\n scene.onDisposeObservable.add(() => {\r\n if (!this._wasAddedToScene) {\r\n this.dispose();\r\n }\r\n });\r\n\r\n this._onContextRestoredObserver = scene.getEngine().onContextRestoredObservable.add(() => {\r\n for (const geometry of this.geometries) {\r\n geometry._rebuild();\r\n }\r\n\r\n for (const mesh of this.meshes) {\r\n mesh._rebuild();\r\n }\r\n\r\n for (const system of this.particleSystems) {\r\n system.rebuild();\r\n }\r\n\r\n for (const texture of this.textures) {\r\n texture._rebuild();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Given a list of nodes, return a topological sorting of them.\r\n * @param nodes\r\n * @returns a sorted array of nodes\r\n */\r\n private _topologicalSort(nodes: Node[]): Node[] {\r\n const nodesUidMap = new Map<number, Node>();\r\n\r\n for (const node of nodes) {\r\n nodesUidMap.set(node.uniqueId, node);\r\n }\r\n\r\n const dependencyGraph = {\r\n dependsOn: new Map<number, Set<number>>(), // given a node id, what are the ids of the nodes it depends on\r\n dependedBy: new Map<number, Set<number>>(), // given a node id, what are the ids of the nodes that depend on it\r\n };\r\n\r\n // Build the dependency graph given the list of nodes\r\n\r\n // First pass: Initialize the empty dependency graph\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n dependencyGraph.dependsOn.set(nodeId, new Set<number>());\r\n dependencyGraph.dependedBy.set(nodeId, new Set<number>());\r\n }\r\n\r\n // Second pass: Populate the dependency graph. We assume that we\r\n // don't need to check for cycles here, as the scene graph cannot\r\n // contain cycles. Our graph also already contains all transitive\r\n // dependencies because getDescendants returns the transitive\r\n // dependencies by default.\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n const dependsOn = dependencyGraph.dependsOn.get(nodeId)!;\r\n if (node instanceof InstancedMesh) {\r\n const masterMesh = node.sourceMesh;\r\n if (nodesUidMap.has(masterMesh.uniqueId)) {\r\n dependsOn.add(masterMesh.uniqueId);\r\n dependencyGraph.dependedBy.get(masterMesh.uniqueId)!.add(nodeId);\r\n }\r\n }\r\n const dependedBy = dependencyGraph.dependedBy.get(nodeId)!;\r\n\r\n for (const child of node.getDescendants()) {\r\n const childId = child.uniqueId;\r\n if (nodesUidMap.has(childId)) {\r\n dependedBy.add(childId);\r\n\r\n const childDependsOn = dependencyGraph.dependsOn.get(childId)!;\r\n childDependsOn.add(nodeId);\r\n }\r\n }\r\n }\r\n\r\n // Third pass: Topological sort\r\n const sortedNodes: Node[] = [];\r\n\r\n // First: Find all nodes that have no dependencies\r\n const leaves: Node[] = [];\r\n for (const node of nodes) {\r\n const nodeId = node.uniqueId;\r\n if (dependencyGraph.dependsOn.get(nodeId)!.size === 0) {\r\n leaves.push(node);\r\n nodesUidMap.delete(nodeId);\r\n }\r\n }\r\n\r\n const visitList = leaves;\r\n while (visitList.length > 0) {\r\n const nodeToVisit = visitList.shift()!;\r\n\r\n sortedNodes.push(nodeToVisit);\r\n\r\n // Remove the node from the dependency graph\r\n // When a node is visited, we know that dependsOn is empty.\r\n // So we only need to remove the node from dependedBy.\r\n const dependedByVisitedNode = dependencyGraph.dependedBy.get(nodeToVisit.uniqueId)!;\r\n // Array.from(x.values()) is to make the TS compiler happy\r\n for (const dependedByVisitedNodeId of Array.from(dependedByVisitedNode.values())) {\r\n const dependsOnDependedByVisitedNode = dependencyGraph.dependsOn.get(dependedByVisitedNodeId)!;\r\n dependsOnDependedByVisitedNode.delete(nodeToVisit.uniqueId);\r\n\r\n if (dependsOnDependedByVisitedNode.size === 0 && nodesUidMap.get(dependedByVisitedNodeId)) {\r\n visitList.push(nodesUidMap.get(dependedByVisitedNodeId)!);\r\n nodesUidMap.delete(dependedByVisitedNodeId);\r\n }\r\n }\r\n }\r\n\r\n if (nodesUidMap.size > 0) {\r\n Logger.Error(\"SceneSerializer._topologicalSort: There were unvisited nodes:\");\r\n nodesUidMap.forEach((node) => Logger.Error(node.name));\r\n }\r\n\r\n return sortedNodes;\r\n }\r\n\r\n private _addNodeAndDescendantsToList(list: Node[], addedIds: Set<number>, rootNode?: Node, predicate?: (entity: any) => boolean) {\r\n if (!rootNode || (predicate && !predicate(rootNode)) || addedIds.has(rootNode.uniqueId)) {\r\n return;\r\n }\r\n\r\n list.push(rootNode);\r\n addedIds.add(rootNode.uniqueId);\r\n\r\n for (const child of rootNode.getDescendants(true)) {\r\n this._addNodeAndDescendantsToList(list, addedIds, child, predicate);\r\n }\r\n }\r\n\r\n /**\r\n * Check if a specific node is contained in this asset container.\r\n * @param node the node to check\r\n * @returns true if the node is contained in this container, otherwise false.\r\n */\r\n private _isNodeInContainer(node: Node) {\r\n if (node instanceof AbstractMesh && this.meshes.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof TransformNode && this.transformNodes.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof Light && this.lights.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n if (node instanceof Camera && this.cameras.indexOf(node) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * For every node in the scene, check if its parent node is also in the scene.\r\n * @returns true if every node's parent is also in the scene, otherwise false.\r\n */\r\n private _isValidHierarchy() {\r\n for (const node of this.meshes) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.transformNodes) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.lights) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n for (const node of this.cameras) {\r\n if (node.parent && !this._isNodeInContainer(node.parent)) {\r\n Logger.Warn(`Node ${node.name} has a parent that is not in the container.`);\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Instantiate or clone all meshes and add the new ones to the scene.\r\n * Skeletons and animation groups will all be cloned\r\n * @param nameFunction defines an optional function used to get new names for clones\r\n * @param cloneMaterials defines an optional boolean that defines if materials must be cloned as well (false by default)\r\n * @param options defines an optional list of options to control how to instantiate / clone models\r\n * @param options.doNotInstantiate defines if the model must be instantiated or just cloned\r\n * @param options.predicate defines a predicate used to filter whih mesh to instantiate/clone\r\n * @returns a list of rootNodes, skeletons and animation groups that were duplicated\r\n */\r\n public instantiateModelsToScene(\r\n nameFunction?: (sourceName: string) => string,\r\n cloneMaterials = false,\r\n options?: { doNotInstantiate?: boolean | ((node: Node) => boolean); predicate?: (entity: any) => boolean }\r\n ): InstantiatedEntries {\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.InstantiateModelsToScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n const conversionMap: { [key: number]: number } = {};\r\n const storeMap: { [key: number]: any } = {};\r\n const result = new InstantiatedEntries();\r\n const alreadySwappedSkeletons: Skeleton[] = [];\r\n const alreadySwappedMaterials: Material[] = [];\r\n\r\n const localOptions = {\r\n doNotInstantiate: true,\r\n ...options,\r\n };\r\n\r\n const onClone = (source: Node, clone: Node) => {\r\n conversionMap[source.uniqueId] = clone.uniqueId;\r\n storeMap[clone.uniqueId] = clone;\r\n\r\n if (nameFunction) {\r\n clone.name = nameFunction(source.name);\r\n }\r\n\r\n if (clone instanceof Mesh) {\r\n const clonedMesh = clone as Mesh;\r\n\r\n if (clonedMesh.morphTargetManager) {\r\n const oldMorphTargetManager = (source as Mesh).morphTargetManager!;\r\n clonedMesh.morphTargetManager = oldMorphTargetManager.clone();\r\n\r\n for (let index = 0; index < oldMorphTargetManager.numTargets; index++) {\r\n const oldTarget = oldMorphTargetManager.getTarget(index);\r\n const newTarget = clonedMesh.morphTargetManager.getTarget(index);\r\n\r\n conversionMap[oldTarget.uniqueId] = newTarget.uniqueId;\r\n storeMap[newTarget.uniqueId] = newTarget;\r\n }\r\n }\r\n }\r\n };\r\n\r\n const nodesToSort: Node[] = [];\r\n const idsOnSortList = new Set<number>();\r\n\r\n for (const transformNode of this.transformNodes) {\r\n if (transformNode.parent === null) {\r\n this._addNodeAndDescendantsToList(nodesToSort, idsOnSortList, transformNode, localOptions.predicate);\r\n }\r\n }\r\n\r\n for (const mesh of this.meshes) {\r\n if (mesh.parent === null) {\r\n this._addNodeAndDescendantsToList(nodesToSort, idsOnSortList, mesh, localOptions.predicate);\r\n }\r\n }\r\n\r\n // Topologically sort nodes by parenting/instancing relationships so that all resources are in place\r\n // when a given node is instantiated.\r\n const sortedNodes = this._topologicalSort(nodesToSort);\r\n\r\n const onNewCreated = (source: Node, clone: Node) => {\r\n onClone(source, clone);\r\n\r\n if (source.parent) {\r\n const replicatedParentId = conversionMap[source.parent.uniqueId];\r\n const replicatedParent = storeMap[replicatedParentId];\r\n\r\n if (replicatedParent) {\r\n clone.parent = replicatedParent;\r\n } else {\r\n clone.parent = source.parent;\r\n }\r\n }\r\n\r\n if ((clone as any).position && (source as any).position) {\r\n (clone as any).position.copyFrom((source as any).position);\r\n }\r\n if ((clone as any).rotationQuaternion && (source as any).rotationQuaternion) {\r\n (clone as any).rotationQuaternion.copyFrom((source as any).rotationQuaternion);\r\n }\r\n if ((clone as any).rotation && (source as any).rotation) {\r\n (clone as any).rotation.copyFrom((source as any).rotation);\r\n }\r\n if ((clone as any).scaling && (source as any).scaling) {\r\n (clone as any).scaling.copyFrom((source as any).scaling);\r\n }\r\n\r\n if ((clone as any).material) {\r\n const mesh = clone as AbstractMesh;\r\n\r\n if (mesh.material) {\r\n if (cloneMaterials) {\r\n const sourceMaterial = (source as AbstractMesh).material!;\r\n\r\n if (alreadySwappedMaterials.indexOf(sourceMaterial) === -1) {\r\n let swap = sourceMaterial.clone(nameFunction ? nameFunction(sourceMaterial.name) : \"Clone of \" + sourceMaterial.name)!;\r\n alreadySwappedMaterials.push(sourceMaterial);\r\n conversionMap[sourceMaterial.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n\r\n if (sourceMaterial.getClassName() === \"MultiMaterial\") {\r\n const multi = sourceMaterial as MultiMaterial;\r\n\r\n for (const material of multi.subMaterials) {\r\n if (!material) {\r\n continue;\r\n }\r\n swap = material.clone(nameFunction ? nameFunction(material.name) : \"Clone of \" + material.name)!;\r\n alreadySwappedMaterials.push(material);\r\n conversionMap[material.uniqueId] = swap.uniqueId;\r\n storeMap[swap.uniqueId] = swap;\r\n }\r\n\r\n multi.subMaterials = multi.subMaterials.map((m) => m && storeMap[conversionMap[m.uniqueId]]);\r\n }\r\n }\r\n\r\n if (mesh.getClassName() !== \"InstancedMesh\") {\r\n mesh.material = storeMap[conversionMap[sourceMaterial.uniqueId]];\r\n }\r\n } else {\r\n if (mesh.material.getClassName() === \"MultiMaterial\") {\r\n if (this.scene.multiMaterials.indexOf(mesh.material as MultiMaterial) === -1) {\r\n this.scene.addMultiMaterial(mesh.material as MultiMaterial);\r\n }\r\n } else {\r\n if (this.scene.materials.indexOf(mesh.material) === -1) {\r\n this.scene.addMaterial(mesh.material);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (clone.parent === null) {\r\n result.rootNodes.push(clone);\r\n }\r\n };\r\n\r\n sortedNodes.forEach((node) => {\r\n if (node.getClassName() === \"InstancedMesh\") {\r\n const instancedNode = node as InstancedMesh;\r\n const sourceMesh = instancedNode.sourceMesh;\r\n const replicatedSourceId = conversionMap[sourceMesh.uniqueId];\r\n const replicatedSource = typeof replicatedSourceId === \"number\" ? storeMap[replicatedSourceId] : sourceMesh;\r\n const replicatedInstancedNode = replicatedSource.createInstance(instancedNode.name);\r\n onNewCreated(instancedNode, replicatedInstancedNode);\r\n } else {\r\n // Mesh or TransformNode\r\n let canInstance = true;\r\n if (\r\n node.getClassName() === \"TransformNode\" ||\r\n node.getClassName() === \"Node\" ||\r\n (node as Mesh).skeleton ||\r\n !(node as any).getTotalVertices ||\r\n (node as Mesh).getTotalVertices() === 0\r\n ) {\r\n // Transform nodes, skinned meshes, and meshes with no vertices can never be instanced!\r\n canInstance = false;\r\n } else if (localOptions.doNotInstantiate) {\r\n if (typeof localOptions.doNotInstantiate === \"function\") {\r\n canInstance = !localOptions.doNotInstantiate(node);\r\n } else {\r\n canInstance = !localOptions.doNotInstantiate;\r\n }\r\n }\r\n const replicatedNode = canInstance ? (node as Mesh).createInstance(`instance of ${node.name}`) : node.clone(`Clone of ${node.name}`, null, true);\r\n if (!replicatedNode) {\r\n throw new Error(`Could not clone or instantiate node on Asset Container ${node.name}`);\r\n }\r\n onNewCreated(node, replicatedNode);\r\n }\r\n });\r\n\r\n this.skeletons.forEach((s) => {\r\n if (localOptions.predicate && !localOptions.predicate(s)) {\r\n return;\r\n }\r\n\r\n const clone = s.clone(nameFunction ? nameFunction(s.name) : \"Clone of \" + s.name);\r\n\r\n for (const m of this.meshes) {\r\n if (m.skeleton === s && !m.isAnInstance) {\r\n const copy = storeMap[conversionMap[m.uniqueId]] as Mesh;\r\n if (!copy || copy.isAnInstance) {\r\n continue;\r\n }\r\n copy.skeleton = clone;\r\n\r\n if (alreadySwappedSkeletons.indexOf(clone) !== -1) {\r\n continue;\r\n }\r\n\r\n alreadySwappedSkeletons.push(clone);\r\n\r\n // Check if bones are mesh linked\r\n for (const bone of clone.bones) {\r\n if (bone._linkedTransformNode) {\r\n bone._linkedTransformNode = storeMap[conversionMap[bone._linkedTransformNode.uniqueId]];\r\n }\r\n }\r\n }\r\n }\r\n\r\n result.skeletons.push(clone);\r\n });\r\n\r\n this.animationGroups.forEach((o) => {\r\n if (localOptions.predicate && !localOptions.predicate(o)) {\r\n return;\r\n }\r\n\r\n const clone = o.clone(nameFunction ? nameFunction(o.name) : \"Clone of \" + o.name, (oldTarget) => {\r\n const newTarget = storeMap[conversionMap[oldTarget.uniqueId]];\r\n\r\n return newTarget || oldTarget;\r\n });\r\n\r\n result.animationGroups.push(clone);\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Adds all the assets from the container to the scene.\r\n */\r\n public addAllToScene() {\r\n if (this._wasAddedToScene) {\r\n return;\r\n }\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.addAllToScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n\r\n this._wasAddedToScene = true;\r\n\r\n this.addToScene(null);\r\n\r\n if (this.environmentTexture) {\r\n this.scene.environmentTexture = this.environmentTexture;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.addFromContainer(this);\r\n }\r\n\r\n this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n\r\n /**\r\n * Adds assets from the container to the scene.\r\n * @param predicate defines a predicate used to select which entity will be added (can be null)\r\n */\r\n public addToScene(predicate: Nullable<(entity: any) => boolean> = null) {\r\n const addedNodes: Node[] = [];\r\n this.cameras.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addCamera(o);\r\n addedNodes.push(o);\r\n });\r\n this.lights.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addLight(o);\r\n addedNodes.push(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMesh(o);\r\n addedNodes.push(o);\r\n });\r\n this.skeletons.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addTransformNode(o);\r\n addedNodes.push(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.addReflectionProbe(o);\r\n });\r\n\r\n for (const addedNode of addedNodes) {\r\n // If node was added to the scene, but parent is not in the scene, break the relationship\r\n if (addedNode.parent && this.scene.getNodes().indexOf(addedNode.parent) === -1) {\r\n // Use setParent to keep transform if possible\r\n if ((addedNode as TransformNode).setParent) {\r\n (addedNode as TransformNode).setParent(null);\r\n } else {\r\n addedNode.parent = null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets in the container from the scene\r\n */\r\n public removeAllFromScene() {\r\n if (!this._isValidHierarchy()) {\r\n Tools.Warn(\"SceneSerializer.removeAllFromScene: The Asset Container hierarchy is not valid.\");\r\n }\r\n\r\n this._wasAddedToScene = false;\r\n\r\n this.removeFromScene(null);\r\n\r\n if (this.environmentTexture === this.scene.environmentTexture) {\r\n this.scene.environmentTexture = null;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.removeFromContainer(this);\r\n }\r\n }\r\n\r\n /**\r\n * Removes assets in the container from the scene\r\n * @param predicate defines a predicate used to select which entity will be added (can be null)\r\n */\r\n public removeFromScene(predicate: Nullable<(entity: any) => boolean> = null) {\r\n this.cameras.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeCamera(o);\r\n });\r\n this.lights.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeLight(o);\r\n });\r\n this.meshes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMesh(o, true);\r\n });\r\n this.skeletons.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeSkeleton(o);\r\n });\r\n this.animations.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeAnimation(o);\r\n });\r\n this.animationGroups.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeAnimationGroup(o);\r\n });\r\n this.multiMaterials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMultiMaterial(o);\r\n });\r\n this.materials.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMaterial(o);\r\n });\r\n this.morphTargetManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeMorphTargetManager(o);\r\n });\r\n this.geometries.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeGeometry(o);\r\n });\r\n this.transformNodes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeTransformNode(o);\r\n });\r\n this.actionManagers.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeActionManager(o);\r\n });\r\n this.textures.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeTexture(o);\r\n });\r\n this.reflectionProbes.forEach((o) => {\r\n if (predicate && !predicate(o)) {\r\n return;\r\n }\r\n this.scene.removeReflectionProbe(o);\r\n });\r\n }\r\n\r\n /**\r\n * Disposes all the assets in the container\r\n */\r\n public dispose() {\r\n this.cameras.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.cameras.length = 0;\r\n\r\n this.lights.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.lights.length = 0;\r\n\r\n this.meshes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.meshes.length = 0;\r\n\r\n this.skeletons.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.skeletons.length = 0;\r\n\r\n this.animationGroups.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.animationGroups.length = 0;\r\n\r\n this.multiMaterials.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.multiMaterials.length = 0;\r\n\r\n this.materials.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.materials.length = 0;\r\n\r\n this.geometries.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.geometries.length = 0;\r\n\r\n this.transformNodes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.transformNodes.length = 0;\r\n\r\n this.actionManagers.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.actionManagers.length = 0;\r\n\r\n this.textures.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.textures.length = 0;\r\n\r\n this.reflectionProbes.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.reflectionProbes.length = 0;\r\n\r\n this.morphTargetManagers.slice(0).forEach((o) => {\r\n o.dispose();\r\n });\r\n this.morphTargetManagers.length = 0;\r\n\r\n if (this.environmentTexture) {\r\n this.environmentTexture.dispose();\r\n this.environmentTexture = null;\r\n }\r\n\r\n for (const component of this.scene._serializableComponents) {\r\n component.removeFromContainer(this, true);\r\n }\r\n\r\n if (this._onContextRestoredObserver) {\r\n this.scene.getEngine().onContextRestoredObservable.remove(this._onContextRestoredObserver);\r\n this._onContextRestoredObserver = null;\r\n }\r\n }\r\n\r\n private _moveAssets<T>(sourceAssets: T[], targetAssets: T[], keepAssets: T[]): void {\r\n if (!sourceAssets || !targetAssets) {\r\n return;\r\n }\r\n\r\n for (const asset of sourceAssets) {\r\n let move = true;\r\n if (keepAssets) {\r\n for (const keepAsset of keepAssets) {\r\n if (asset === keepAsset) {\r\n move = false;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (move) {\r\n targetAssets.push(asset);\r\n (asset as any)._parentContainer = this;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all the assets contained in the scene and adds them to the container.\r\n * @param keepAssets Set of assets to keep in the scene. (default: empty)\r\n */\r\n public moveAllFromScene(keepAssets?: KeepAssets): void {\r\n this._wasAddedToScene = false;\r\n\r\n if (keepAssets === undefined) {\r\n keepAssets = new KeepAssets();\r\n }\r\n\r\n for (const key in this) {\r\n if (Object.prototype.hasOwnProperty.call(this, key)) {\r\n (<any>this)[key] = (<any>this)[key] || (key === \"_environmentTexture\" ? null : []);\r\n this._moveAssets((<any>this.scene)[key], (<any>this)[key], (<any>keepAssets)[key]);\r\n }\r\n }\r\n\r\n this.environmentTexture = this.scene.environmentTexture;\r\n\r\n this.removeAllFromScene();\r\n }\r\n\r\n /**\r\n * Adds all meshes in the asset container to a root mesh that can be used to position all the contained meshes. The root mesh is then added to the front of the meshes in the assetContainer.\r\n * @returns the root mesh\r\n */\r\n public createRootMesh() {\r\n const rootMesh = new Mesh(\"assetContainerRootMesh\", this.scene);\r\n this.meshes.forEach((m) => {\r\n if (!m.parent) {\r\n rootMesh.addChild(m);\r\n }\r\n });\r\n this.meshes.unshift(rootMesh);\r\n return rootMesh;\r\n }\r\n\r\n /**\r\n * Merge animations (direct and animation groups) from this asset container into a scene\r\n * @param scene is the instance of BABYLON.Scene to append to (default: last created scene)\r\n * @param animatables set of animatables to retarget to a node from the scene\r\n * @param targetConverter defines a function used to convert animation targets from the asset container to the scene (default: search node by name)\r\n * @returns an array of the new AnimationGroup added to the scene (empty array if none)\r\n */\r\n public mergeAnimationsTo(\r\n scene: Nullable<Scene> = EngineStore.LastCreatedScene,\r\n animatables: Animatable[],\r\n targetConverter: Nullable<(target: any) => Nullable<Node>> = null\r\n ): AnimationGroup[] {\r\n if (!scene) {\r\n Logger.Error(\"No scene available to merge animations to\");\r\n return [];\r\n }\r\n\r\n const _targetConverter = targetConverter\r\n ? targetConverter\r\n : (target: any) => {\r\n let node = null;\r\n\r\n const targetProperty = target.animations.length ? target.animations[0].targetProperty : \"\";\r\n /*\r\n BabylonJS adds special naming to targets that are children of nodes.\r\n This name attempts to remove that special naming to get the parent nodes name in case the target\r\n can't be found in the node tree\r\n\r\n Ex: Torso_primitive0 likely points to a Mesh primitive. We take away primitive0 and are left with \"Torso\" which is the name\r\n of the primitive's parent.\r\n */\r\n const name = target.name.split(\".\").join(\"\").split(\"_primitive\")[0];\r\n\r\n switch (targetProperty) {\r\n case \"position\":\r\n case \"rotationQuaternion\":\r\n node = scene.getTransformNodeByName(target.name) || scene.getTransformNodeByName(name);\r\n break;\r\n case \"influence\":\r\n node = scene.getMorphTargetByName(target.name) || scene.getMorphTargetByName(name);\r\n break;\r\n default:\r\n node = scene.getNodeByName(target.name) || scene.getNodeByName(name);\r\n }\r\n\r\n return node;\r\n };\r\n\r\n // Copy new node animations\r\n const nodesInAC = this.getNodes();\r\n nodesInAC.forEach((nodeInAC) => {\r\n const nodeInScene = _targetConverter(nodeInAC);\r\n if (nodeInScene !== null) {\r\n // Remove old animations with same target property as a new one\r\n for (const animationInAC of nodeInAC.animations) {\r\n // Doing treatment on an array for safety measure\r\n const animationsWithSameProperty = nodeInScene.animations.filter((animationInScene) => {\r\n return animationInScene.targetProperty === animationInAC.targetProperty;\r\n });\r\n for (const animationWithSameProperty of animationsWithSameProperty) {\r\n const index = nodeInScene.animations.indexOf(animationWithSameProperty, 0);\r\n if (index > -1) {\r\n nodeInScene.animations.splice(index, 1);\r\n }\r\n }\r\n }\r\n\r\n // Append new animations\r\n nodeInScene.animations = nodeInScene.animations.concat(nodeInAC.animations);\r\n }\r\n });\r\n\r\n const newAnimationGroups: AnimationGroup[] = [];\r\n\r\n // Copy new animation groups\r\n this.animationGroups.slice().forEach((animationGroupInAC) => {\r\n // Clone the animation group and all its animatables\r\n newAnimationGroups.push(animationGroupInAC.clone(animationGroupInAC.name, _targetConverter));\r\n\r\n // Remove animatables related to the asset container\r\n animationGroupInAC.animatables.forEach((animatable) => {\r\n animatable.stop();\r\n });\r\n });\r\n\r\n // Retarget animatables\r\n animatables.forEach((animatable) => {\r\n const target = _targetConverter(animatable.target);\r\n\r\n if (target) {\r\n // Clone the animatable and retarget it\r\n scene.beginAnimation(\r\n target,\r\n animatable.fromFrame,\r\n animatable.toFrame,\r\n animatable.loopAnimation,\r\n animatable.speedRatio,\r\n animatable.onAnimationEnd ? animatable.onAnimationEnd : undefined,\r\n undefined,\r\n true,\r\n undefined,\r\n animatable.onAnimationLoop ? animatable.onAnimationLoop : undefined\r\n );\r\n\r\n // Stop animation for the target in the asset container\r\n scene.stopAnimation(animatable.target);\r\n }\r\n });\r\n\r\n return newAnimationGroups;\r\n }\r\n\r\n /**\r\n * @since 6.15.0\r\n * This method checks for any node that has no parent\r\n * and is not in the rootNodes array, and adds the node\r\n * there, if so.\r\n */\r\n public populateRootNodes() {\r\n this.rootNodes.length = 0;\r\n this.meshes.forEach((m) => {\r\n if (!m.parent && this.rootNodes.indexOf(m) === -1) {\r\n this.rootNodes.push(m);\r\n }\r\n });\r\n this.transformNodes.forEach((t) => {\r\n if (!t.parent && this.rootNodes.indexOf(t) === -1) {\r\n this.rootNodes.push(t);\r\n }\r\n });\r\n this.lights.forEach((l) => {\r\n if (!l.parent && this.rootNodes.indexOf(l) === -1) {\r\n this.rootNodes.push(l);\r\n }\r\n });\r\n this.cameras.forEach((c) => {\r\n if (!c.parent && this.rootNodes.indexOf(c) === -1) {\r\n this.rootNodes.push(c);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * @since 6.26.0\r\n * Given a root asset, this method will traverse its hierarchy and add it, its children and any materials/skeletons/animation groups to the container.\r\n * @param root root node\r\n */\r\n public addAllAssetsToContainer(root: Node) {\r\n if (!root) {\r\n return;\r\n }\r\n\r\n const nodesToVisit: Node[] = [];\r\n const visitedNodes = new Set<Node>();\r\n\r\n nodesToVisit.push(root);\r\n\r\n while (nodesToVisit.length > 0) {\r\n const nodeToVisit = nodesToVisit.pop()!;\r\n\r\n if (nodeToVisit instanceof Mesh) {\r\n if (nodeToVisit.geometry && this.geometries.indexOf(nodeToVisit.geometry) === -1) {\r\n this.geometries.push(nodeToVisit.geometry);\r\n }\r\n this.meshes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof TransformNode) {\r\n this.transformNodes.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof Light) {\r\n this.lights.push(nodeToVisit);\r\n } else if (nodeToVisit instanceof Camera) {\r\n this.cameras.push(nodeToVisit);\r\n }\r\n\r\n if (nodeToVisit instanceof AbstractMesh) {\r\n if (nodeToVisit.material && this.materials.indexOf(nodeToVisit.material) === -1) {\r\n this.materials.push(nodeToVisit.material);\r\n for (const texture of nodeToVisit.material.getActiveTextures()) {\r\n if (this.textures.indexOf(texture) === -1) {\r\n this.textures.push(texture);\r\n }\r\n }\r\n }\r\n\r\n if (nodeToVisit.skeleton && this.skeletons.indexOf(nodeToVisit.skeleton) === -1) {\r\n this.skeletons.push(nodeToVisit.skeleton);\r\n }\r\n\r\n if (nodeToVisit.morphTargetManager && this.morphTargetManagers.indexOf(nodeToVisit.morphTargetManager) === -1) {\r\n this.morphTargetManagers.push(nodeToVisit.morphTargetManager);\r\n }\r\n }\r\n\r\n for (const child of nodeToVisit.getChildren()) {\r\n if (!visitedNodes.has(child)) {\r\n nodesToVisit.push(child);\r\n }\r\n }\r\n\r\n visitedNodes.add(nodeToVisit);\r\n }\r\n\r\n this.populateRootNodes();\r\n }\r\n}\r\n"]}
package/node.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { Scene } from "./scene";
2
2
  import type { Nullable } from "./types";
3
3
  import { Matrix, Vector3 } from "./Maths/math.vector";
4
- import type { Engine } from "./Engines/engine";
4
+ import type { AbstractEngine } from "./Engines/abstractEngine";
5
5
  import type { IBehaviorAware, Behavior } from "./Behaviors/behavior";
6
6
  import { Observable } from "./Misc/observable";
7
7
  import type { AbstractActionManager } from "./Actions/abstractActionManager";
@@ -190,7 +190,7 @@ export declare class Node implements IBehaviorAware<Node> {
190
190
  * Gets the engine of the node
191
191
  * @returns a Engine
192
192
  */
193
- getEngine(): Engine;
193
+ getEngine(): AbstractEngine;
194
194
  private _behaviors;
195
195
  /**
196
196
  * Attach a behavior to the node