@babylonjs/core 5.0.0-alpha.55 → 5.0.0-alpha.59

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 (377) hide show
  1. package/Bones/boneIKController.d.ts +1 -2
  2. package/Bones/boneIKController.js +12 -37
  3. package/Bones/boneIKController.js.map +1 -1
  4. package/Buffers/buffer.js +3 -2
  5. package/Buffers/buffer.js.map +1 -1
  6. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
  7. package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
  8. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  9. package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
  10. package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
  11. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  12. package/Cameras/camera.d.ts +4 -0
  13. package/Cameras/camera.js +2 -0
  14. package/Cameras/camera.js.map +1 -1
  15. package/Culling/boundingBox.d.ts +7 -1
  16. package/Culling/boundingBox.js +4 -0
  17. package/Culling/boundingBox.js.map +1 -1
  18. package/DeviceInput/Helpers/eventFactory.js +1 -2
  19. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  20. package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
  21. package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
  22. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  23. package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
  24. package/DeviceInput/InputDevices/deviceEnums.js +0 -2
  25. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  26. package/Engines/Extensions/engine.alpha.js +11 -6
  27. package/Engines/Extensions/engine.alpha.js.map +1 -1
  28. package/Engines/Extensions/engine.cubeTexture.d.ts +1 -1
  29. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  30. package/Engines/Extensions/engine.multiRender.d.ts +2 -2
  31. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  32. package/Engines/Extensions/engine.renderTarget.d.ts +7 -15
  33. package/Engines/Extensions/engine.renderTarget.js +6 -63
  34. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  35. package/Engines/Extensions/engine.renderTargetCube.d.ts +1 -1
  36. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  37. package/Engines/IDrawContext.d.ts +4 -0
  38. package/Engines/IDrawContext.js.map +1 -1
  39. package/Engines/IMaterialContext.d.ts +1 -0
  40. package/Engines/IMaterialContext.js.map +1 -1
  41. package/Engines/WebGL/webGLRenderTargetWrapper.d.ts +24 -2
  42. package/Engines/WebGL/webGLRenderTargetWrapper.js +53 -0
  43. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  44. package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
  45. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  46. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  47. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  48. package/Engines/WebGPU/Extensions/engine.renderTarget.js +2 -40
  49. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  50. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  51. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  52. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  53. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
  54. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
  55. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
  56. package/Engines/WebGPU/webgpuBufferManager.js +3 -0
  57. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  58. package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
  59. package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
  60. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  61. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
  62. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  63. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
  64. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
  65. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  66. package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
  67. package/Engines/WebGPU/webgpuDrawContext.js +75 -1
  68. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  69. package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
  70. package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
  71. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  72. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
  73. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  74. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  75. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
  76. package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
  77. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  78. package/Engines/constants.d.ts +46 -8
  79. package/Engines/constants.js +46 -8
  80. package/Engines/constants.js.map +1 -1
  81. package/Engines/engine.d.ts +37 -2
  82. package/Engines/engine.js +68 -0
  83. package/Engines/engine.js.map +1 -1
  84. package/Engines/engineFeatures.d.ts +2 -0
  85. package/Engines/engineFeatures.js.map +1 -1
  86. package/Engines/nativeEngine.d.ts +3 -5
  87. package/Engines/nativeEngine.js +2 -2
  88. package/Engines/nativeEngine.js.map +1 -1
  89. package/Engines/nullEngine.d.ts +1 -1
  90. package/Engines/nullEngine.js +2 -2
  91. package/Engines/nullEngine.js.map +1 -1
  92. package/Engines/renderTargetWrapper.d.ts +10 -3
  93. package/Engines/renderTargetWrapper.js +29 -10
  94. package/Engines/renderTargetWrapper.js.map +1 -1
  95. package/Engines/thinEngine.d.ts +16 -1
  96. package/Engines/thinEngine.js +82 -2
  97. package/Engines/thinEngine.js.map +1 -1
  98. package/Engines/webgpuEngine.d.ts +28 -7
  99. package/Engines/webgpuEngine.js +177 -58
  100. package/Engines/webgpuEngine.js.map +1 -1
  101. package/Inputs/scene.inputManager.js +2 -3
  102. package/Inputs/scene.inputManager.js.map +1 -1
  103. package/Layers/effectLayer.d.ts +0 -2
  104. package/Layers/effectLayer.js +12 -11
  105. package/Layers/effectLayer.js.map +1 -1
  106. package/Layers/effectLayerSceneComponent.js +5 -0
  107. package/Layers/effectLayerSceneComponent.js.map +1 -1
  108. package/Layers/glowLayer.js +2 -0
  109. package/Layers/glowLayer.js.map +1 -1
  110. package/Layers/highlightLayer.js +2 -0
  111. package/Layers/highlightLayer.js.map +1 -1
  112. package/LensFlares/lensFlare.d.ts +3 -0
  113. package/LensFlares/lensFlare.js +5 -0
  114. package/LensFlares/lensFlare.js.map +1 -1
  115. package/LensFlares/lensFlareSystem.d.ts +2 -1
  116. package/LensFlares/lensFlareSystem.js +15 -12
  117. package/LensFlares/lensFlareSystem.js.map +1 -1
  118. package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
  119. package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
  120. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  121. package/Lights/Shadows/shadowGenerator.d.ts +0 -3
  122. package/Lights/Shadows/shadowGenerator.js +8 -14
  123. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  124. package/Lights/light.js +3 -0
  125. package/Lights/light.js.map +1 -1
  126. package/Loading/Plugins/babylonFileLoader.js +3 -0
  127. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  128. package/Materials/Background/backgroundMaterial.js +8 -11
  129. package/Materials/Background/backgroundMaterial.js.map +1 -1
  130. package/Materials/Node/Blocks/Dual/lightBlock.js +1 -1
  131. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  132. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +1 -1
  133. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  134. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
  135. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  136. package/Materials/Node/Blocks/cloudBlock.d.ts +49 -0
  137. package/Materials/Node/Blocks/cloudBlock.js +154 -0
  138. package/Materials/Node/Blocks/cloudBlock.js.map +1 -0
  139. package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
  140. package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
  141. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  142. package/Materials/Node/Blocks/index.d.ts +1 -0
  143. package/Materials/Node/Blocks/index.js +1 -0
  144. package/Materials/Node/Blocks/index.js.map +1 -1
  145. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
  146. package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
  147. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  148. package/Materials/Node/nodeMaterial.js +17 -7
  149. package/Materials/Node/nodeMaterial.js.map +1 -1
  150. package/Materials/Node/nodeMaterialBuildStateSharedData.d.ts +5 -1
  151. package/Materials/Node/nodeMaterialBuildStateSharedData.js +5 -1
  152. package/Materials/Node/nodeMaterialBuildStateSharedData.js.map +1 -1
  153. package/Materials/Node/nodeMaterialDecorator.d.ts +4 -2
  154. package/Materials/Node/nodeMaterialDecorator.js +4 -2
  155. package/Materials/Node/nodeMaterialDecorator.js.map +1 -1
  156. package/Materials/PBR/pbrBaseMaterial.d.ts +4 -2
  157. package/Materials/PBR/pbrBaseMaterial.js +23 -9
  158. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  159. package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
  160. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  161. package/Materials/PBR/pbrSheenConfiguration.js +1 -1
  162. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  163. package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
  164. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  165. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +3 -3
  166. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  167. package/Materials/Textures/baseTexture.d.ts +2 -0
  168. package/Materials/Textures/baseTexture.js +2 -0
  169. package/Materials/Textures/baseTexture.js.map +1 -1
  170. package/Materials/Textures/multiRenderTarget.d.ts +6 -4
  171. package/Materials/Textures/multiRenderTarget.js +28 -12
  172. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  173. package/Materials/Textures/renderTargetTexture.d.ts +29 -3
  174. package/Materials/Textures/renderTargetTexture.js +127 -14
  175. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  176. package/Materials/Textures/texture.js +11 -4
  177. package/Materials/Textures/texture.js.map +1 -1
  178. package/Materials/Textures/textureCreationOptions.d.ts +57 -0
  179. package/Materials/Textures/textureCreationOptions.js +2 -0
  180. package/Materials/Textures/textureCreationOptions.js.map +1 -0
  181. package/Materials/Textures/thinRenderTargetTexture.d.ts +3 -4
  182. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  183. package/Materials/Textures/videoTexture.d.ts +10 -7
  184. package/Materials/Textures/videoTexture.js +17 -11
  185. package/Materials/Textures/videoTexture.js.map +1 -1
  186. package/Materials/drawWrapper.d.ts +2 -1
  187. package/Materials/drawWrapper.js +10 -1
  188. package/Materials/drawWrapper.js.map +1 -1
  189. package/Materials/effectRenderer.js +1 -1
  190. package/Materials/effectRenderer.js.map +1 -1
  191. package/Materials/material.d.ts +3 -1
  192. package/Materials/material.detailMapConfiguration.d.ts +1 -1
  193. package/Materials/material.detailMapConfiguration.js +2 -2
  194. package/Materials/material.detailMapConfiguration.js.map +1 -1
  195. package/Materials/material.js +18 -9
  196. package/Materials/material.js.map +1 -1
  197. package/Materials/materialHelper.d.ts +7 -0
  198. package/Materials/materialHelper.js +17 -2
  199. package/Materials/materialHelper.js.map +1 -1
  200. package/Materials/pushMaterial.js +1 -1
  201. package/Materials/pushMaterial.js.map +1 -1
  202. package/Materials/shaderMaterial.d.ts +1 -1
  203. package/Materials/shaderMaterial.js +5 -5
  204. package/Materials/shaderMaterial.js.map +1 -1
  205. package/Materials/shadowDepthWrapper.d.ts +4 -4
  206. package/Materials/shadowDepthWrapper.js +16 -15
  207. package/Materials/shadowDepthWrapper.js.map +1 -1
  208. package/Materials/standardMaterial.d.ts +4 -2
  209. package/Materials/standardMaterial.js +23 -9
  210. package/Materials/standardMaterial.js.map +1 -1
  211. package/Materials/uniformBuffer.d.ts +10 -2
  212. package/Materials/uniformBuffer.js +17 -11
  213. package/Materials/uniformBuffer.js.map +1 -1
  214. package/Meshes/Builders/capsuleBuilder.d.ts +5 -5
  215. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  216. package/Meshes/abstractMesh.d.ts +13 -0
  217. package/Meshes/abstractMesh.js +22 -2
  218. package/Meshes/abstractMesh.js.map +1 -1
  219. package/Meshes/buffer.d.ts +5 -0
  220. package/Meshes/buffer.js +6 -0
  221. package/Meshes/buffer.js.map +1 -0
  222. package/Meshes/geometry.d.ts +7 -0
  223. package/Meshes/geometry.js +16 -0
  224. package/Meshes/geometry.js.map +1 -1
  225. package/Meshes/linesMesh.js +1 -1
  226. package/Meshes/linesMesh.js.map +1 -1
  227. package/Meshes/mesh.js +16 -1
  228. package/Meshes/mesh.js.map +1 -1
  229. package/Meshes/mesh.lts.d.ts +5 -1
  230. package/Meshes/mesh.lts.js +1 -2
  231. package/Meshes/mesh.lts.js.map +1 -1
  232. package/Meshes/subMesh.d.ts +10 -9
  233. package/Meshes/subMesh.js +44 -43
  234. package/Meshes/subMesh.js.map +1 -1
  235. package/Misc/environmentTextureTools.js +1 -0
  236. package/Misc/environmentTextureTools.js.map +1 -1
  237. package/Misc/fileTools.d.ts +1 -3
  238. package/Misc/fileTools.js +12 -13
  239. package/Misc/fileTools.js.map +1 -1
  240. package/Misc/fileTools.lts.d.ts +16 -1
  241. package/Misc/fileTools.lts.js +1 -2
  242. package/Misc/fileTools.lts.js.map +1 -1
  243. package/Misc/rgbdTextureTools.js +1 -0
  244. package/Misc/rgbdTextureTools.js.map +1 -1
  245. package/Misc/sceneSerializer.js +17 -17
  246. package/Misc/sceneSerializer.js.map +1 -1
  247. package/Misc/textureTools.js +2 -0
  248. package/Misc/textureTools.js.map +1 -1
  249. package/Particles/gpuParticleSystem.d.ts +5 -1
  250. package/Particles/gpuParticleSystem.js +31 -5
  251. package/Particles/gpuParticleSystem.js.map +1 -1
  252. package/Particles/particleSystem.d.ts +5 -1
  253. package/Particles/particleSystem.js +35 -5
  254. package/Particles/particleSystem.js.map +1 -1
  255. package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
  256. package/Physics/Plugins/ammoJSPlugin.js +10 -0
  257. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  258. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
  259. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  260. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  261. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  262. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  263. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  264. package/PostProcesses/bloomMergePostProcess.js +1 -0
  265. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  266. package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
  267. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  268. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
  269. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  270. package/PostProcesses/extractHighlightsPostProcess.js +1 -0
  271. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  272. package/PostProcesses/postProcess.d.ts +6 -0
  273. package/PostProcesses/postProcess.js +9 -1
  274. package/PostProcesses/postProcess.js.map +1 -1
  275. package/PostProcesses/screenSpaceReflectionPostProcess.js +2 -2
  276. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  277. package/PostProcesses/tonemapPostProcess.d.ts +2 -1
  278. package/PostProcesses/tonemapPostProcess.js +3 -2
  279. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  280. package/Rendering/boundingBoxRenderer.d.ts +5 -3
  281. package/Rendering/boundingBoxRenderer.js +46 -14
  282. package/Rendering/boundingBoxRenderer.js.map +1 -1
  283. package/Rendering/depthPeelingRenderer.d.ts +85 -0
  284. package/Rendering/depthPeelingRenderer.js +390 -0
  285. package/Rendering/depthPeelingRenderer.js.map +1 -0
  286. package/Rendering/depthPeelingSceneComponent.d.ts +51 -0
  287. package/Rendering/depthPeelingSceneComponent.js +73 -0
  288. package/Rendering/depthPeelingSceneComponent.js.map +1 -0
  289. package/Rendering/depthRenderer.d.ts +9 -2
  290. package/Rendering/depthRenderer.js +77 -43
  291. package/Rendering/depthRenderer.js.map +1 -1
  292. package/Rendering/depthRendererSceneComponent.js +0 -1
  293. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  294. package/Rendering/edgesRenderer.d.ts +2 -0
  295. package/Rendering/edgesRenderer.js +11 -0
  296. package/Rendering/edgesRenderer.js.map +1 -1
  297. package/Rendering/geometryBufferRenderer.js +4 -4
  298. package/Rendering/geometryBufferRenderer.js.map +1 -1
  299. package/Rendering/index.d.ts +2 -0
  300. package/Rendering/index.js +2 -0
  301. package/Rendering/index.js.map +1 -1
  302. package/Rendering/outlineRenderer.d.ts +5 -4
  303. package/Rendering/outlineRenderer.js +24 -19
  304. package/Rendering/outlineRenderer.js.map +1 -1
  305. package/Rendering/prePassRenderer.js +7 -2
  306. package/Rendering/prePassRenderer.js.map +1 -1
  307. package/Rendering/renderingGroup.js +7 -2
  308. package/Rendering/renderingGroup.js.map +1 -1
  309. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
  310. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
  311. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
  312. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
  313. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
  314. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
  315. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
  316. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
  317. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
  318. package/Shaders/ShadersInclude/oitDeclaration.d.ts +5 -0
  319. package/Shaders/ShadersInclude/oitDeclaration.js +7 -0
  320. package/Shaders/ShadersInclude/oitDeclaration.js.map +1 -0
  321. package/Shaders/ShadersInclude/oitFragment.d.ts +5 -0
  322. package/Shaders/ShadersInclude/oitFragment.js +7 -0
  323. package/Shaders/ShadersInclude/oitFragment.js.map +1 -0
  324. package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
  325. package/Shaders/boundingBoxRenderer.fragment.js +9 -0
  326. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
  327. package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
  328. package/Shaders/boundingBoxRenderer.vertex.js +9 -0
  329. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
  330. package/Shaders/default.fragment.d.ts +2 -0
  331. package/Shaders/default.fragment.js +3 -1
  332. package/Shaders/default.fragment.js.map +1 -1
  333. package/Shaders/oitBackBlend.fragment.d.ts +5 -0
  334. package/Shaders/oitBackBlend.fragment.js +7 -0
  335. package/Shaders/oitBackBlend.fragment.js.map +1 -0
  336. package/Shaders/oitFinal.fragment.d.ts +5 -0
  337. package/Shaders/oitFinal.fragment.js +7 -0
  338. package/Shaders/oitFinal.fragment.js.map +1 -0
  339. package/Shaders/pbr.fragment.d.ts +2 -0
  340. package/Shaders/pbr.fragment.js +3 -1
  341. package/Shaders/pbr.fragment.js.map +1 -1
  342. package/Shaders/screenSpaceReflection.fragment.js +1 -1
  343. package/Shaders/screenSpaceReflection.fragment.js.map +1 -1
  344. package/Sprites/spriteManager.d.ts +3 -1
  345. package/Sprites/spriteManager.js +16 -5
  346. package/Sprites/spriteManager.js.map +1 -1
  347. package/Sprites/spriteRenderer.d.ts +1 -0
  348. package/Sprites/spriteRenderer.js +14 -0
  349. package/Sprites/spriteRenderer.js.map +1 -1
  350. package/States/alphaCullingState.js +1 -1
  351. package/States/alphaCullingState.js.map +1 -1
  352. package/XR/features/WebXRControllerPointerSelection.d.ts +4 -0
  353. package/XR/features/WebXRControllerPointerSelection.js +23 -1
  354. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  355. package/XR/features/WebXRNearInteraction.d.ts +5 -4
  356. package/XR/features/WebXRNearInteraction.js +15 -13
  357. package/XR/features/WebXRNearInteraction.js.map +1 -1
  358. package/XR/features/WebXRWalkingLocomotion.js +28 -13
  359. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  360. package/XR/webXRSessionManager.js +1 -3
  361. package/XR/webXRSessionManager.js.map +1 -1
  362. package/package.json +43 -7
  363. package/scene.d.ts +18 -4
  364. package/scene.js +101 -42
  365. package/scene.js.map +1 -1
  366. package/scene.lts.d.ts +6 -1
  367. package/scene.lts.js +1 -2
  368. package/scene.lts.js.map +1 -1
  369. package/sceneComponent.d.ts +1 -0
  370. package/sceneComponent.js +1 -0
  371. package/sceneComponent.js.map +1 -1
  372. package/Engines/depthTextureCreationOptions.d.ts +0 -17
  373. package/Engines/depthTextureCreationOptions.js +0 -10
  374. package/Engines/depthTextureCreationOptions.js.map +0 -1
  375. package/Materials/Textures/renderTargetCreationOptions.d.ts +0 -27
  376. package/Materials/Textures/renderTargetCreationOptions.js +0 -10
  377. package/Materials/Textures/renderTargetCreationOptions.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webXRSessionManager.js","sourceRoot":"","sources":["../../../sourceES6/core/XR/webXRSessionManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { IDisposable, Scene } from \"../scene\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { WebXRRenderTarget } from \"./webXRTypes\";\r\nimport { WebXRManagedOutputCanvas, WebXRManagedOutputCanvasOptions } from \"./webXRManagedOutputCanvas\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { WebGLRenderTargetWrapper } from \"../Engines/WebGL/webGLRenderTargetWrapper\";\r\n\r\ninterface IRenderTargetProvider {\r\n getRenderTargetForEye(eye: XREye): Nullable<RenderTargetTexture>;\r\n}\r\n\r\n/**\r\n * Manages an XRSession to work with Babylon's engine\r\n * @see https://doc.babylonjs.com/how_to/webxr_session_manager\r\n */\r\nexport class WebXRSessionManager implements IDisposable {\r\n private _engine: Nullable<Engine>;\r\n private _referenceSpace: XRReferenceSpace;\r\n private _rttProvider: Nullable<IRenderTargetProvider>;\r\n private _sessionEnded: boolean = false;\r\n private _xrNavigator: any;\r\n private _baseLayer: Nullable<XRWebGLLayer> = null;\r\n private _renderTargetTextures: Array<RenderTargetTexture> = [];\r\n private _sessionMode: XRSessionMode;\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 * 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 /**\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._engine.onDisposeObservable.addOnce(() => {\r\n this._engine = null;\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._sessionEnded) {\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 }\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 exitXRAsync() {\r\n if (this.session && !this._sessionEnded) {\r\n this._sessionEnded = true;\r\n return this.session.end().catch((e) => {\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 * 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._rttProvider!.getRenderTargetForEye(eye);\r\n }\r\n\r\n /**\r\n * Creates a WebXRRenderTarget object for the XR session\r\n * @param onStateChangedObservable optional, mechanism for enabling/disabling XR rendering canvas, used only on Web\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 this._xrNavigator.xr.getWebXRRenderTarget(engine);\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.onXRSessionInit.notifyObservers(session);\r\n this._sessionEnded = false;\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._sessionEnded = true;\r\n\r\n // Notify frame observers\r\n this.onXRSessionEnded.notifyObservers(null);\r\n // Remove render target texture\r\n this._rttProvider = 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 if (this.isNative) {\r\n this._renderTargetTextures.forEach((rtt) => rtt.dispose());\r\n this._renderTargetTextures.length = 0;\r\n }\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._sessionEnded || !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: this.session.requestAnimationFrame.bind(this.session),\r\n renderFunction: (timestamp: number, xrFrame: Nullable<XRFrame>) => {\r\n if (this._sessionEnded || !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._engine.framebufferDimensionsObject = this._baseLayer!;\r\n this.onXRFrameObservable.notifyObservers(xrFrame);\r\n this._engine._renderLoop();\r\n this._engine.framebufferDimensionsObject = null;\r\n }\r\n },\r\n };\r\n\r\n if (this._xrNavigator.xr.native) {\r\n this._rttProvider = this._xrNavigator.xr.getNativeRenderTargetProvider(this.session, this._createRenderTargetTexture.bind(this), this._destroyRenderTargetTexture.bind(this));\r\n } else {\r\n // Create render target texture from xr's webgl render target\r\n let rtt: RenderTargetTexture, framebufferWidth: number, framebufferHeight: number, framebuffer: WebGLFramebuffer;\r\n this._rttProvider = {\r\n getRenderTargetForEye: () => {\r\n const baseLayer = this._baseLayer!;\r\n if (baseLayer.framebufferWidth !== framebufferWidth || baseLayer.framebufferHeight !== framebufferHeight || baseLayer.framebuffer !== framebuffer) {\r\n rtt = this._createRenderTargetTexture(baseLayer.framebufferWidth, baseLayer.framebufferHeight, baseLayer.framebuffer);\r\n framebufferWidth = baseLayer.framebufferWidth;\r\n framebufferHeight = baseLayer.framebufferHeight;\r\n framebuffer = baseLayer.framebuffer;\r\n }\r\n return rtt;\r\n },\r\n };\r\n this._engine.framebufferDimensionsObject = this._baseLayer;\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 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 return this.referenceSpace;\r\n });\r\n }\r\n\r\n /**\r\n * Updates the render state of the session\r\n * @param state state to set\r\n * @returns a promise that resolves once the render state has been updated\r\n */\r\n public updateRenderStateAsync(state: XRRenderState) {\r\n if (state.baseLayer) {\r\n this._baseLayer = state.baseLayer;\r\n }\r\n return 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 * Check if fixed foveation is supported on this device\r\n */\r\n public get isFixedFoveationSupported(): boolean {\r\n return !!this._baseLayer?.fixedFoveation !== null;\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._baseLayer?.fixedFoveation !== undefined ? this._baseLayer.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._baseLayer?.fixedFoveation !== undefined) {\r\n this._baseLayer.fixedFoveation = val;\r\n }\r\n }\r\n\r\n private _createRenderTargetTexture(width: number, height: number, framebuffer: WebGLFramebuffer): RenderTargetTexture {\r\n if (!this._engine) {\r\n throw new Error(\"Engine is disposed\");\r\n }\r\n\r\n // Create internal texture\r\n const internalTexture = new InternalTexture(this._engine, InternalTextureSource.Unknown, true);\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n\r\n // Create render target texture from the internal texture\r\n const renderTargetTexture = new RenderTargetTexture(\"XR renderTargetTexture\", { width: width, height: height }, this.scene);\r\n const webglRTWrapper = renderTargetTexture.renderTarget as WebGLRenderTargetWrapper;\r\n webglRTWrapper.setTexture(internalTexture, 0);\r\n webglRTWrapper._framebuffer = framebuffer;\r\n renderTargetTexture._texture = internalTexture;\r\n renderTargetTexture.disableRescaling();\r\n if (this._sessionMode === 'immersive-ar') {\r\n renderTargetTexture.skipInitialClear = true;\r\n }\r\n\r\n // Store the render target texture for cleanup when the session ends.\r\n this._renderTargetTextures.push(renderTargetTexture);\r\n\r\n return renderTargetTexture;\r\n }\r\n\r\n private _destroyRenderTargetTexture(renderTargetTexture: RenderTargetTexture): void {\r\n this._renderTargetTextures.splice(this._renderTargetTextures.indexOf(renderTargetTexture), 1);\r\n renderTargetTexture.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRSessionManager.js","sourceRoot":"","sources":["../../../sourceES6/core/XR/webXRSessionManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger } from \"../Misc/logger\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Nullable } from \"../types\";\r\nimport { IDisposable, Scene } from \"../scene\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport { WebXRRenderTarget } from \"./webXRTypes\";\r\nimport { WebXRManagedOutputCanvas, WebXRManagedOutputCanvasOptions } from \"./webXRManagedOutputCanvas\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport { WebGLRenderTargetWrapper } from \"../Engines/WebGL/webGLRenderTargetWrapper\";\r\n\r\ninterface IRenderTargetProvider {\r\n getRenderTargetForEye(eye: XREye): Nullable<RenderTargetTexture>;\r\n}\r\n\r\n/**\r\n * Manages an XRSession to work with Babylon's engine\r\n * @see https://doc.babylonjs.com/how_to/webxr_session_manager\r\n */\r\nexport class WebXRSessionManager implements IDisposable {\r\n private _engine: Nullable<Engine>;\r\n private _referenceSpace: XRReferenceSpace;\r\n private _rttProvider: Nullable<IRenderTargetProvider>;\r\n private _sessionEnded: boolean = false;\r\n private _xrNavigator: any;\r\n private _baseLayer: Nullable<XRWebGLLayer> = null;\r\n private _renderTargetTextures: Array<RenderTargetTexture> = [];\r\n private _sessionMode: XRSessionMode;\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 * 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 /**\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._engine.onDisposeObservable.addOnce(() => {\r\n this._engine = null;\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._sessionEnded) {\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 }\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 exitXRAsync() {\r\n if (this.session && !this._sessionEnded) {\r\n this._sessionEnded = true;\r\n return this.session.end().catch((e) => {\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 * 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._rttProvider!.getRenderTargetForEye(eye);\r\n }\r\n\r\n /**\r\n * Creates a WebXRRenderTarget object for the XR session\r\n * @param onStateChangedObservable optional, mechanism for enabling/disabling XR rendering canvas, used only on Web\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 this._xrNavigator.xr.getWebXRRenderTarget(engine);\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.onXRSessionInit.notifyObservers(session);\r\n this._sessionEnded = false;\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._sessionEnded = true;\r\n\r\n // Notify frame observers\r\n this.onXRSessionEnded.notifyObservers(null);\r\n // Remove render target texture\r\n this._rttProvider = 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 if (this.isNative) {\r\n this._renderTargetTextures.forEach((rtt) => rtt.dispose());\r\n this._renderTargetTextures.length = 0;\r\n }\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._sessionEnded || !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: this.session.requestAnimationFrame.bind(this.session),\r\n renderFunction: (timestamp: number, xrFrame: Nullable<XRFrame>) => {\r\n if (this._sessionEnded || !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._engine.framebufferDimensionsObject = this._baseLayer!;\r\n this.onXRFrameObservable.notifyObservers(xrFrame);\r\n this._engine._renderLoop();\r\n this._engine.framebufferDimensionsObject = null;\r\n }\r\n },\r\n };\r\n\r\n if (this._xrNavigator.xr.native) {\r\n this._rttProvider = this._xrNavigator.xr.getNativeRenderTargetProvider(this.session, this._createRenderTargetTexture.bind(this), this._destroyRenderTargetTexture.bind(this));\r\n } else {\r\n // Create render target texture from xr's webgl render target\r\n let rtt: RenderTargetTexture, framebufferWidth: number, framebufferHeight: number, framebuffer: WebGLFramebuffer;\r\n this._rttProvider = {\r\n getRenderTargetForEye: () => {\r\n const baseLayer = this._baseLayer!;\r\n if (baseLayer.framebufferWidth !== framebufferWidth || baseLayer.framebufferHeight !== framebufferHeight || baseLayer.framebuffer !== framebuffer) {\r\n rtt = this._createRenderTargetTexture(baseLayer.framebufferWidth, baseLayer.framebufferHeight, baseLayer.framebuffer);\r\n framebufferWidth = baseLayer.framebufferWidth;\r\n framebufferHeight = baseLayer.framebufferHeight;\r\n framebuffer = baseLayer.framebuffer;\r\n }\r\n return rtt;\r\n },\r\n };\r\n this._engine.framebufferDimensionsObject = this._baseLayer;\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 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 return this.referenceSpace;\r\n });\r\n }\r\n\r\n /**\r\n * Updates the render state of the session\r\n * @param state state to set\r\n * @returns a promise that resolves once the render state has been updated\r\n */\r\n public updateRenderStateAsync(state: XRRenderState) {\r\n if (state.baseLayer) {\r\n this._baseLayer = state.baseLayer;\r\n }\r\n return 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 * Check if fixed foveation is supported on this device\r\n */\r\n public get isFixedFoveationSupported(): boolean {\r\n return !!this._baseLayer?.fixedFoveation !== null;\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._baseLayer?.fixedFoveation !== undefined ? this._baseLayer.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._baseLayer?.fixedFoveation !== undefined) {\r\n this._baseLayer.fixedFoveation = val;\r\n }\r\n }\r\n\r\n private _createRenderTargetTexture(width: number, height: number, framebuffer: WebGLFramebuffer): RenderTargetTexture {\r\n if (!this._engine) {\r\n throw new Error(\"Engine is disposed\");\r\n }\r\n\r\n // Create internal texture\r\n const internalTexture = new InternalTexture(this._engine, InternalTextureSource.Unknown, true);\r\n internalTexture.width = width;\r\n internalTexture.height = height;\r\n\r\n // Create render target texture from the internal texture\r\n const renderTargetTexture = new RenderTargetTexture(\"XR renderTargetTexture\", { width: width, height: height }, this.scene);\r\n const webglRTWrapper = renderTargetTexture.renderTarget as WebGLRenderTargetWrapper;\r\n webglRTWrapper.setTexture(internalTexture, 0);\r\n webglRTWrapper._framebuffer = framebuffer;\r\n renderTargetTexture._texture = internalTexture;\r\n renderTargetTexture.disableRescaling();\r\n renderTargetTexture.skipInitialClear = true;\r\n\r\n // Store the render target texture for cleanup when the session ends.\r\n this._renderTargetTextures.push(renderTargetTexture);\r\n\r\n return renderTargetTexture;\r\n }\r\n\r\n private _destroyRenderTargetTexture(renderTargetTexture: RenderTargetTexture): void {\r\n this._renderTargetTextures.splice(this._renderTargetTextures.indexOf(renderTargetTexture), 1);\r\n renderTargetTexture.dispose();\r\n }\r\n}\r\n"]}
package/package.json CHANGED
@@ -7,7 +7,7 @@
7
7
  ],
8
8
  "name": "@babylonjs/core",
9
9
  "description": "Babylon.js is a JavaScript 3D engine based on webgl.",
10
- "version": "5.0.0-alpha.55",
10
+ "version": "5.0.0-alpha.59",
11
11
  "repository": {
12
12
  "type": "git",
13
13
  "url": "https://github.com/BabylonJS/Babylon.js.git"
@@ -482,9 +482,6 @@
482
482
  "Engines/constants.d.ts",
483
483
  "Engines/constants.js",
484
484
  "Engines/constants.js.map",
485
- "Engines/depthTextureCreationOptions.d.ts",
486
- "Engines/depthTextureCreationOptions.js",
487
- "Engines/depthTextureCreationOptions.js.map",
488
485
  "Engines/engine.d.ts",
489
486
  "Engines/engine.js",
490
487
  "Engines/engine.js.map",
@@ -1110,6 +1107,9 @@
1110
1107
  "Materials/Node/Blocks/clampBlock.d.ts",
1111
1108
  "Materials/Node/Blocks/clampBlock.js",
1112
1109
  "Materials/Node/Blocks/clampBlock.js.map",
1110
+ "Materials/Node/Blocks/cloudBlock.d.ts",
1111
+ "Materials/Node/Blocks/cloudBlock.js",
1112
+ "Materials/Node/Blocks/cloudBlock.js.map",
1113
1113
  "Materials/Node/Blocks/colorMergerBlock.d.ts",
1114
1114
  "Materials/Node/Blocks/colorMergerBlock.js",
1115
1115
  "Materials/Node/Blocks/colorMergerBlock.js.map",
@@ -1578,15 +1578,15 @@
1578
1578
  "Materials/Textures/refractionTexture.d.ts",
1579
1579
  "Materials/Textures/refractionTexture.js",
1580
1580
  "Materials/Textures/refractionTexture.js.map",
1581
- "Materials/Textures/renderTargetCreationOptions.d.ts",
1582
- "Materials/Textures/renderTargetCreationOptions.js",
1583
- "Materials/Textures/renderTargetCreationOptions.js.map",
1584
1581
  "Materials/Textures/renderTargetTexture.d.ts",
1585
1582
  "Materials/Textures/renderTargetTexture.js",
1586
1583
  "Materials/Textures/renderTargetTexture.js.map",
1587
1584
  "Materials/Textures/texture.d.ts",
1588
1585
  "Materials/Textures/texture.js",
1589
1586
  "Materials/Textures/texture.js.map",
1587
+ "Materials/Textures/textureCreationOptions.d.ts",
1588
+ "Materials/Textures/textureCreationOptions.js",
1589
+ "Materials/Textures/textureCreationOptions.js.map",
1590
1590
  "Materials/Textures/textureSampler.d.ts",
1591
1591
  "Materials/Textures/textureSampler.js",
1592
1592
  "Materials/Textures/textureSampler.js.map",
@@ -1662,6 +1662,9 @@
1662
1662
  "Meshes/abstractMesh.d.ts",
1663
1663
  "Meshes/abstractMesh.js",
1664
1664
  "Meshes/abstractMesh.js.map",
1665
+ "Meshes/buffer.d.ts",
1666
+ "Meshes/buffer.js",
1667
+ "Meshes/buffer.js.map",
1665
1668
  "Meshes/Builders/boxBuilder.d.ts",
1666
1669
  "Meshes/Builders/boxBuilder.js",
1667
1670
  "Meshes/Builders/boxBuilder.js.map",
@@ -2341,6 +2344,12 @@
2341
2344
  "Rendering/boundingBoxRenderer.d.ts",
2342
2345
  "Rendering/boundingBoxRenderer.js",
2343
2346
  "Rendering/boundingBoxRenderer.js.map",
2347
+ "Rendering/depthPeelingRenderer.d.ts",
2348
+ "Rendering/depthPeelingRenderer.js",
2349
+ "Rendering/depthPeelingRenderer.js.map",
2350
+ "Rendering/depthPeelingSceneComponent.d.ts",
2351
+ "Rendering/depthPeelingSceneComponent.js",
2352
+ "Rendering/depthPeelingSceneComponent.js.map",
2344
2353
  "Rendering/depthRenderer.d.ts",
2345
2354
  "Rendering/depthRenderer.js",
2346
2355
  "Rendering/depthRenderer.js.map",
@@ -2422,6 +2431,12 @@
2422
2431
  "Shaders/blur.fragment.d.ts",
2423
2432
  "Shaders/blur.fragment.js",
2424
2433
  "Shaders/blur.fragment.js.map",
2434
+ "Shaders/boundingBoxRenderer.fragment.d.ts",
2435
+ "Shaders/boundingBoxRenderer.fragment.js",
2436
+ "Shaders/boundingBoxRenderer.fragment.js.map",
2437
+ "Shaders/boundingBoxRenderer.vertex.d.ts",
2438
+ "Shaders/boundingBoxRenderer.vertex.js",
2439
+ "Shaders/boundingBoxRenderer.vertex.js.map",
2425
2440
  "Shaders/chromaticAberration.fragment.d.ts",
2426
2441
  "Shaders/chromaticAberration.fragment.js",
2427
2442
  "Shaders/chromaticAberration.fragment.js.map",
@@ -2566,6 +2581,12 @@
2566
2581
  "Shaders/noise.fragment.d.ts",
2567
2582
  "Shaders/noise.fragment.js",
2568
2583
  "Shaders/noise.fragment.js.map",
2584
+ "Shaders/oitBackBlend.fragment.d.ts",
2585
+ "Shaders/oitBackBlend.fragment.js",
2586
+ "Shaders/oitBackBlend.fragment.js.map",
2587
+ "Shaders/oitFinal.fragment.d.ts",
2588
+ "Shaders/oitFinal.fragment.js",
2589
+ "Shaders/oitFinal.fragment.js.map",
2569
2590
  "Shaders/outline.fragment.d.ts",
2570
2591
  "Shaders/outline.fragment.js",
2571
2592
  "Shaders/outline.fragment.js.map",
@@ -2629,6 +2650,15 @@
2629
2650
  "Shaders/ShadersInclude/bonesVertex.d.ts",
2630
2651
  "Shaders/ShadersInclude/bonesVertex.js",
2631
2652
  "Shaders/ShadersInclude/bonesVertex.js.map",
2653
+ "Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts",
2654
+ "Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js",
2655
+ "Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map",
2656
+ "Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts",
2657
+ "Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js",
2658
+ "Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map",
2659
+ "Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts",
2660
+ "Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js",
2661
+ "Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map",
2632
2662
  "Shaders/ShadersInclude/bumpFragment.d.ts",
2633
2663
  "Shaders/ShadersInclude/bumpFragment.js",
2634
2664
  "Shaders/ShadersInclude/bumpFragment.js.map",
@@ -2794,6 +2824,12 @@
2794
2824
  "Shaders/ShadersInclude/mrtFragmentDeclaration.d.ts",
2795
2825
  "Shaders/ShadersInclude/mrtFragmentDeclaration.js",
2796
2826
  "Shaders/ShadersInclude/mrtFragmentDeclaration.js.map",
2827
+ "Shaders/ShadersInclude/oitDeclaration.d.ts",
2828
+ "Shaders/ShadersInclude/oitDeclaration.js",
2829
+ "Shaders/ShadersInclude/oitDeclaration.js.map",
2830
+ "Shaders/ShadersInclude/oitFragment.d.ts",
2831
+ "Shaders/ShadersInclude/oitFragment.js",
2832
+ "Shaders/ShadersInclude/oitFragment.js.map",
2797
2833
  "Shaders/ShadersInclude/packingFunctions.d.ts",
2798
2834
  "Shaders/ShadersInclude/packingFunctions.js",
2799
2835
  "Shaders/ShadersInclude/packingFunctions.js.map",
package/scene.d.ts CHANGED
@@ -1164,9 +1164,10 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
1164
1164
  /**
1165
1165
  * This function will check if the scene can be rendered (textures are loaded, shaders are compiled)
1166
1166
  * Delay loaded resources are not taking in account
1167
+ * @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: true)
1167
1168
  * @return true if all required resources are ready
1168
1169
  */
1169
- isReady(): boolean;
1170
+ isReady(checkRenderTargets?: boolean): boolean;
1170
1171
  /** Resets all cached information relative to material (including effect and visibility) */
1171
1172
  resetCachedMaterial(): void;
1172
1173
  /**
@@ -1214,15 +1215,17 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
1214
1215
  /**
1215
1216
  * Registers a function to be executed when the scene is ready
1216
1217
  * @param {Function} func - the function to be executed
1218
+ * @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: false)
1217
1219
  */
1218
- executeWhenReady(func: () => void): void;
1220
+ executeWhenReady(func: () => void, checkRenderTargets?: boolean): void;
1219
1221
  /**
1220
1222
  * Returns a promise that resolves when the scene is ready
1223
+ * @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: false)
1221
1224
  * @returns A promise that resolves when the scene is ready
1222
1225
  */
1223
- whenReadyAsync(): Promise<void>;
1226
+ whenReadyAsync(checkRenderTargets?: boolean): Promise<void>;
1224
1227
  /** @hidden */
1225
- _checkIsReady(): void;
1228
+ _checkIsReady(checkRenderTargets?: boolean): void;
1226
1229
  /**
1227
1230
  * Gets all animatable attached to the scene
1228
1231
  */
@@ -1260,6 +1263,17 @@ export declare class Scene extends AbstractScene implements IAnimatable, IClipPl
1260
1263
  * @returns a UniformBuffer
1261
1264
  */
1262
1265
  getSceneUniformBuffer(): UniformBuffer;
1266
+ /**
1267
+ * Creates a scene UBO
1268
+ * @param name name of the uniform buffer (optional, for debugging purpose only)
1269
+ * @returns a new ubo
1270
+ */
1271
+ createSceneUniformBuffer(name?: string): UniformBuffer;
1272
+ /**
1273
+ * Sets the scene ubo
1274
+ * @param ubo the ubo to set for the scene
1275
+ */
1276
+ setSceneUniformBuffer(ubo: UniformBuffer): void;
1263
1277
  /**
1264
1278
  * Gets an unique (relatively to the current scene) Id
1265
1279
  * @returns an unique number for the scene
package/scene.js CHANGED
@@ -1460,11 +1460,7 @@ var Scene = /** @class */ (function (_super) {
1460
1460
  this._renderId++;
1461
1461
  };
1462
1462
  Scene.prototype._createUbo = function () {
1463
- this._sceneUbo = new UniformBuffer(this._engine, undefined, false, "scene");
1464
- this._sceneUbo.addUniform("viewProjection", 16);
1465
- this._sceneUbo.addUniform("view", 16);
1466
- this._sceneUbo.addUniform("projection", 16);
1467
- this._sceneUbo.addUniform("vEyePosition", 4);
1463
+ this.setSceneUniformBuffer(this.createSceneUniformBuffer());
1468
1464
  };
1469
1465
  /**
1470
1466
  * Use this method to simulate a pointer move on a mesh
@@ -1528,9 +1524,11 @@ var Scene = /** @class */ (function (_super) {
1528
1524
  /**
1529
1525
  * This function will check if the scene can be rendered (textures are loaded, shaders are compiled)
1530
1526
  * Delay loaded resources are not taking in account
1527
+ * @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: true)
1531
1528
  * @return true if all required resources are ready
1532
1529
  */
1533
- Scene.prototype.isReady = function () {
1530
+ Scene.prototype.isReady = function (checkRenderTargets) {
1531
+ if (checkRenderTargets === void 0) { checkRenderTargets = true; }
1534
1532
  if (this._isDisposed) {
1535
1533
  return false;
1536
1534
  }
@@ -1545,6 +1543,10 @@ var Scene = /** @class */ (function (_super) {
1545
1543
  return false;
1546
1544
  }
1547
1545
  // Meshes
1546
+ if (checkRenderTargets) {
1547
+ this._processedMaterials.reset();
1548
+ this._renderTargets.reset();
1549
+ }
1548
1550
  for (index = 0; index < this.meshes.length; index++) {
1549
1551
  var mesh = this.meshes[index];
1550
1552
  if (!mesh.isEnabled()) {
@@ -1564,6 +1566,41 @@ var Scene = /** @class */ (function (_super) {
1564
1566
  return false;
1565
1567
  }
1566
1568
  }
1569
+ if (!checkRenderTargets) {
1570
+ continue;
1571
+ }
1572
+ var mat = mesh.material || this.defaultMaterial;
1573
+ if (mat) {
1574
+ if (mat._storeEffectOnSubMeshes) {
1575
+ for (var _b = 0, _c = mesh.subMeshes; _b < _c.length; _b++) {
1576
+ var subMesh = _c[_b];
1577
+ var material = subMesh.getMaterial();
1578
+ if (material && material.hasRenderTargetTextures && material.getRenderTargetTextures != null) {
1579
+ if (this._processedMaterials.indexOf(material) === -1) {
1580
+ this._processedMaterials.push(material);
1581
+ this._renderTargets.concatWithNoDuplicate(material.getRenderTargetTextures());
1582
+ }
1583
+ }
1584
+ }
1585
+ }
1586
+ else {
1587
+ if (mat.hasRenderTargetTextures && mat.getRenderTargetTextures != null) {
1588
+ if (this._processedMaterials.indexOf(mat) === -1) {
1589
+ this._processedMaterials.push(mat);
1590
+ this._renderTargets.concatWithNoDuplicate(mat.getRenderTargetTextures());
1591
+ }
1592
+ }
1593
+ }
1594
+ }
1595
+ }
1596
+ // Render targets
1597
+ if (checkRenderTargets) {
1598
+ for (index = 0; index < this._renderTargets.length; ++index) {
1599
+ var rtt = this._renderTargets.data[index];
1600
+ if (!rtt.isReadyForRendering()) {
1601
+ return false;
1602
+ }
1603
+ }
1567
1604
  }
1568
1605
  // Geometries
1569
1606
  for (index = 0; index < this.geometries.length; index++) {
@@ -1574,8 +1611,8 @@ var Scene = /** @class */ (function (_super) {
1574
1611
  }
1575
1612
  // Post-processes
1576
1613
  if (this.activeCameras && this.activeCameras.length > 0) {
1577
- for (var _b = 0, _c = this.activeCameras; _b < _c.length; _b++) {
1578
- var camera = _c[_b];
1614
+ for (var _d = 0, _e = this.activeCameras; _d < _e.length; _d++) {
1615
+ var camera = _e[_d];
1579
1616
  if (!camera.isReady(true)) {
1580
1617
  return false;
1581
1618
  }
@@ -1587,8 +1624,8 @@ var Scene = /** @class */ (function (_super) {
1587
1624
  }
1588
1625
  }
1589
1626
  // Particles
1590
- for (var _d = 0, _e = this.particleSystems; _d < _e.length; _d++) {
1591
- var particleSystem = _e[_d];
1627
+ for (var _f = 0, _g = this.particleSystems; _f < _g.length; _f++) {
1628
+ var particleSystem = _g[_f];
1592
1629
  if (!particleSystem.isReady()) {
1593
1630
  return false;
1594
1631
  }
@@ -1692,34 +1729,39 @@ var Scene = /** @class */ (function (_super) {
1692
1729
  /**
1693
1730
  * Registers a function to be executed when the scene is ready
1694
1731
  * @param {Function} func - the function to be executed
1732
+ * @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: false)
1695
1733
  */
1696
- Scene.prototype.executeWhenReady = function (func) {
1734
+ Scene.prototype.executeWhenReady = function (func, checkRenderTargets) {
1697
1735
  var _this = this;
1736
+ if (checkRenderTargets === void 0) { checkRenderTargets = false; }
1698
1737
  this.onReadyObservable.add(func);
1699
1738
  if (this._executeWhenReadyTimeoutId !== -1) {
1700
1739
  return;
1701
1740
  }
1702
1741
  this._executeWhenReadyTimeoutId = setTimeout(function () {
1703
- _this._checkIsReady();
1742
+ _this._checkIsReady(checkRenderTargets);
1704
1743
  }, 150);
1705
1744
  };
1706
1745
  /**
1707
1746
  * Returns a promise that resolves when the scene is ready
1747
+ * @param checkRenderTargets true to also check that the meshes rendered as part of a render target are ready (default: false)
1708
1748
  * @returns A promise that resolves when the scene is ready
1709
1749
  */
1710
- Scene.prototype.whenReadyAsync = function () {
1750
+ Scene.prototype.whenReadyAsync = function (checkRenderTargets) {
1711
1751
  var _this = this;
1752
+ if (checkRenderTargets === void 0) { checkRenderTargets = false; }
1712
1753
  return new Promise(function (resolve) {
1713
1754
  _this.executeWhenReady(function () {
1714
1755
  resolve();
1715
- });
1756
+ }, checkRenderTargets);
1716
1757
  });
1717
1758
  };
1718
1759
  /** @hidden */
1719
- Scene.prototype._checkIsReady = function () {
1760
+ Scene.prototype._checkIsReady = function (checkRenderTargets) {
1720
1761
  var _this = this;
1762
+ if (checkRenderTargets === void 0) { checkRenderTargets = false; }
1721
1763
  this._registerTransientComponents();
1722
- if (this.isReady()) {
1764
+ if (this.isReady(checkRenderTargets)) {
1723
1765
  this.onReadyObservable.notifyObservers(this);
1724
1766
  this.onReadyObservable.clear();
1725
1767
  this._executeWhenReadyTimeoutId = -1;
@@ -1731,7 +1773,7 @@ var Scene = /** @class */ (function (_super) {
1731
1773
  return;
1732
1774
  }
1733
1775
  this._executeWhenReadyTimeoutId = setTimeout(function () {
1734
- _this._checkIsReady();
1776
+ _this._checkIsReady(checkRenderTargets);
1735
1777
  }, 150);
1736
1778
  };
1737
1779
  Object.defineProperty(Scene.prototype, "animatables", {
@@ -1812,6 +1854,26 @@ var Scene = /** @class */ (function (_super) {
1812
1854
  Scene.prototype.getSceneUniformBuffer = function () {
1813
1855
  return this._multiviewSceneUbo ? this._multiviewSceneUbo : this._sceneUbo;
1814
1856
  };
1857
+ /**
1858
+ * Creates a scene UBO
1859
+ * @param name name of the uniform buffer (optional, for debugging purpose only)
1860
+ * @returns a new ubo
1861
+ */
1862
+ Scene.prototype.createSceneUniformBuffer = function (name) {
1863
+ var sceneUbo = new UniformBuffer(this._engine, undefined, false, name !== null && name !== void 0 ? name : "scene");
1864
+ sceneUbo.addUniform("viewProjection", 16);
1865
+ sceneUbo.addUniform("view", 16);
1866
+ sceneUbo.addUniform("projection", 16);
1867
+ sceneUbo.addUniform("vEyePosition", 4);
1868
+ return sceneUbo;
1869
+ };
1870
+ /**
1871
+ * Sets the scene ubo
1872
+ * @param ubo the ubo to set for the scene
1873
+ */
1874
+ Scene.prototype.setSceneUniformBuffer = function (ubo) {
1875
+ this._sceneUbo = ubo;
1876
+ };
1815
1877
  /**
1816
1878
  * Gets an unique (relatively to the current scene) Id
1817
1879
  * @returns an unique number for the scene
@@ -3279,6 +3341,7 @@ var Scene = /** @class */ (function (_super) {
3279
3341
  };
3280
3342
  /** @hidden */
3281
3343
  Scene.prototype._renderForCamera = function (camera, rigParent, bindFrameBuffer) {
3344
+ var _a, _b, _c;
3282
3345
  if (bindFrameBuffer === void 0) { bindFrameBuffer = true; }
3283
3346
  if (camera && camera._skipRendering) {
3284
3347
  return;
@@ -3324,8 +3387,8 @@ var Scene = /** @class */ (function (_super) {
3324
3387
  this._renderTargets.pushNoDuplicate(this.environmentTexture);
3325
3388
  }
3326
3389
  // Collects render targets from external components.
3327
- for (var _i = 0, _a = this._gatherActiveCameraRenderTargetsStage; _i < _a.length; _i++) {
3328
- var step = _a[_i];
3390
+ for (var _i = 0, _d = this._gatherActiveCameraRenderTargetsStage; _i < _d.length; _i++) {
3391
+ var step = _d[_i];
3329
3392
  step.action(this._renderTargets);
3330
3393
  }
3331
3394
  var needRebind = false;
@@ -3345,12 +3408,13 @@ var Scene = /** @class */ (function (_super) {
3345
3408
  Tools.EndPerformanceCounter("Render targets", this._renderTargets.length > 0);
3346
3409
  this._renderId++;
3347
3410
  }
3348
- for (var _b = 0, _c = this._cameraDrawRenderTargetStage; _b < _c.length; _b++) {
3349
- var step = _c[_b];
3411
+ for (var _e = 0, _f = this._cameraDrawRenderTargetStage; _e < _f.length; _e++) {
3412
+ var step = _f[_e];
3350
3413
  needRebind = step.action(this.activeCamera) || needRebind;
3351
3414
  }
3352
3415
  this._intermediateRendering = false;
3353
3416
  }
3417
+ this._engine.currentRenderPassId = (_c = (_b = (_a = camera.outputRenderTarget) === null || _a === void 0 ? void 0 : _a.renderPassId) !== null && _b !== void 0 ? _b : camera.renderPassId) !== null && _c !== void 0 ? _c : 0;
3354
3418
  // Restore framebuffer after rendering to targets
3355
3419
  if (needRebind && !this.prePass) {
3356
3420
  this._bindFrameBuffer(this._activeCamera, false);
@@ -3361,8 +3425,8 @@ var Scene = /** @class */ (function (_super) {
3361
3425
  this.postProcessManager._prepareFrame();
3362
3426
  }
3363
3427
  // Before Camera Draw
3364
- for (var _d = 0, _e = this._beforeCameraDrawStage; _d < _e.length; _d++) {
3365
- var step = _e[_d];
3428
+ for (var _g = 0, _h = this._beforeCameraDrawStage; _g < _h.length; _g++) {
3429
+ var step = _h[_g];
3366
3430
  step.action(this.activeCamera);
3367
3431
  }
3368
3432
  // Render
@@ -3373,8 +3437,8 @@ var Scene = /** @class */ (function (_super) {
3373
3437
  this._renderingManager.render(null, null, true, true);
3374
3438
  this.onAfterDrawPhaseObservable.notifyObservers(this);
3375
3439
  // After Camera Draw
3376
- for (var _f = 0, _g = this._afterCameraDrawStage; _f < _g.length; _f++) {
3377
- var step = _g[_f];
3440
+ for (var _j = 0, _k = this._afterCameraDrawStage; _j < _k.length; _j++) {
3441
+ var step = _k[_j];
3378
3442
  step.action(this.activeCamera);
3379
3443
  }
3380
3444
  // Finalize frame
@@ -3521,7 +3585,7 @@ var Scene = /** @class */ (function (_super) {
3521
3585
  * @param ignoreAnimations defines a boolean indicating if animations should not be executed (false by default)
3522
3586
  */
3523
3587
  Scene.prototype.render = function (updateCameras, ignoreAnimations) {
3524
- var _a, _b;
3588
+ var _a, _b, _c;
3525
3589
  if (updateCameras === void 0) { updateCameras = true; }
3526
3590
  if (ignoreAnimations === void 0) { ignoreAnimations = false; }
3527
3591
  if (this.isDisposed) {
@@ -3554,8 +3618,8 @@ var Scene = /** @class */ (function (_super) {
3554
3618
  this.animate();
3555
3619
  }
3556
3620
  // Before camera update steps
3557
- for (var _i = 0, _c = this._beforeCameraUpdateStage; _i < _c.length; _i++) {
3558
- var step = _c[_i];
3621
+ for (var _i = 0, _d = this._beforeCameraUpdateStage; _i < _d.length; _i++) {
3622
+ var step = _d[_i];
3559
3623
  step.action();
3560
3624
  }
3561
3625
  // Update Cameras
@@ -3610,21 +3674,22 @@ var Scene = /** @class */ (function (_super) {
3610
3674
  this._intermediateRendering = false;
3611
3675
  this._renderId++;
3612
3676
  }
3677
+ this._engine.currentRenderPassId = (_c = currentActiveCamera === null || currentActiveCamera === void 0 ? void 0 : currentActiveCamera.renderPassId) !== null && _c !== void 0 ? _c : 0;
3613
3678
  // Restore back buffer
3614
3679
  this.activeCamera = currentActiveCamera;
3615
3680
  if (this._activeCamera && this._activeCamera.cameraRigMode !== 22 && !this.prePass) {
3616
3681
  this._bindFrameBuffer(this._activeCamera, false);
3617
3682
  }
3618
3683
  this.onAfterRenderTargetsRenderObservable.notifyObservers(this);
3619
- for (var _d = 0, _e = this._beforeClearStage; _d < _e.length; _d++) {
3620
- var step = _e[_d];
3684
+ for (var _e = 0, _f = this._beforeClearStage; _e < _f.length; _e++) {
3685
+ var step = _f[_e];
3621
3686
  step.action();
3622
3687
  }
3623
3688
  // Clear
3624
3689
  this._clearFrameBuffer(this.activeCamera);
3625
3690
  // Collects render targets from external components.
3626
- for (var _f = 0, _g = this._gatherRenderTargetsStage; _f < _g.length; _f++) {
3627
- var step = _g[_f];
3691
+ for (var _g = 0, _h = this._gatherRenderTargetsStage; _g < _h.length; _g++) {
3692
+ var step = _h[_g];
3628
3693
  step.action(this._renderTargets);
3629
3694
  }
3630
3695
  // Multi-cameras?
@@ -3642,8 +3707,8 @@ var Scene = /** @class */ (function (_super) {
3642
3707
  // Intersection checks
3643
3708
  this._checkIntersections();
3644
3709
  // Executes the after render stage actions.
3645
- for (var _h = 0, _j = this._afterRenderStage; _h < _j.length; _h++) {
3646
- var step = _j[_h];
3710
+ for (var _j = 0, _k = this._afterRenderStage; _j < _k.length; _j++) {
3711
+ var step = _k[_j];
3647
3712
  step.action();
3648
3713
  }
3649
3714
  // After render
@@ -3901,13 +3966,7 @@ var Scene = /** @class */ (function (_super) {
3901
3966
  var mesh = this.meshes[meshIndex];
3902
3967
  var geometry = mesh.geometry;
3903
3968
  if (geometry) {
3904
- geometry._indices = [];
3905
- for (var vbName in geometry._vertexBuffers) {
3906
- if (!geometry._vertexBuffers.hasOwnProperty(vbName)) {
3907
- continue;
3908
- }
3909
- geometry._vertexBuffers[vbName]._buffer._data = null;
3910
- }
3969
+ geometry.clearCachedData();
3911
3970
  }
3912
3971
  }
3913
3972
  };
@@ -4339,5 +4398,5 @@ var Scene = /** @class */ (function (_super) {
4339
4398
  export { Scene };
4340
4399
  // LTS version
4341
4400
  import { _injectLTSScene } from "./scene.lts.js";
4342
- _injectLTSScene();
4401
+ _injectLTSScene(Scene);
4343
4402
  //# sourceMappingURL=scene.js.map