@babylonjs/core 7.11.4 → 7.13.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 (513) hide show
  1. package/Actions/abstractActionManager.d.ts +1 -1
  2. package/Actions/abstractActionManager.js +1 -1
  3. package/Actions/abstractActionManager.js.map +1 -1
  4. package/Animations/animation.js +1 -2
  5. package/Animations/animation.js.map +1 -1
  6. package/Animations/animationGroupMask.d.ts +1 -1
  7. package/Animations/animationGroupMask.js +2 -2
  8. package/Animations/animationGroupMask.js.map +1 -1
  9. package/Animations/animationKey.d.ts +1 -1
  10. package/Animations/animationKey.js.map +1 -1
  11. package/Behaviors/Meshes/handConstraintBehavior.d.ts +3 -3
  12. package/Behaviors/Meshes/handConstraintBehavior.js +16 -17
  13. package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
  14. package/Behaviors/Meshes/sixDofDragBehavior.js +2 -3
  15. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  16. package/Bones/bone.js +31 -32
  17. package/Bones/bone.js.map +1 -1
  18. package/Bones/boneIKController.js +5 -6
  19. package/Bones/boneIKController.js.map +1 -1
  20. package/Bones/boneLookController.js +13 -13
  21. package/Bones/boneLookController.js.map +1 -1
  22. package/Cameras/Inputs/freeCameraMouseWheelInput.js +5 -6
  23. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  24. package/Cameras/Inputs/freeCameraVirtualJoystickInput.js +5 -5
  25. package/Cameras/Inputs/freeCameraVirtualJoystickInput.js.map +1 -1
  26. package/Cameras/VR/vrExperienceHelper.js +8 -10
  27. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  28. package/Compute/computeEffect.js +2 -3
  29. package/Compute/computeEffect.js.map +1 -1
  30. package/Compute/computeShader.js +19 -20
  31. package/Compute/computeShader.js.map +1 -1
  32. package/Culling/Helper/IBoundingInfoHelperPlatform.d.ts +4 -0
  33. package/Culling/Helper/IBoundingInfoHelperPlatform.js.map +1 -1
  34. package/Culling/Helper/boundingInfoHelper.d.ts +26 -4
  35. package/Culling/Helper/boundingInfoHelper.js +41 -10
  36. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  37. package/Culling/Helper/computeShaderBoundingHelper.d.ts +12 -3
  38. package/Culling/Helper/computeShaderBoundingHelper.js +164 -76
  39. package/Culling/Helper/computeShaderBoundingHelper.js.map +1 -1
  40. package/Culling/Helper/transformFeedbackBoundingHelper.d.ts +11 -0
  41. package/Culling/Helper/transformFeedbackBoundingHelper.js +46 -14
  42. package/Culling/Helper/transformFeedbackBoundingHelper.js.map +1 -1
  43. package/Debug/debugLayer.d.ts +1 -1
  44. package/Debug/debugLayer.js.map +1 -1
  45. package/Decorators/nodeDecorator.d.ts +1 -1
  46. package/Decorators/nodeDecorator.js +1 -1
  47. package/Decorators/nodeDecorator.js.map +1 -1
  48. package/DeviceInput/InputDevices/deviceEnums.d.ts +5 -5
  49. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  50. package/DeviceInput/eventFactory.js +3 -3
  51. package/DeviceInput/eventFactory.js.map +1 -1
  52. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +2 -2
  53. package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
  54. package/Engines/Extensions/engine.computeShader.d.ts +1 -1
  55. package/Engines/Extensions/engine.computeShader.js.map +1 -1
  56. package/Engines/Extensions/engine.cubeTexture.js +2 -2
  57. package/Engines/Extensions/engine.cubeTexture.js.map +1 -1
  58. package/Engines/Extensions/engine.dynamicTexture.js +2 -2
  59. package/Engines/Extensions/engine.dynamicTexture.js.map +1 -1
  60. package/Engines/Extensions/engine.multiRender.js +3 -3
  61. package/Engines/Extensions/engine.multiRender.js.map +1 -1
  62. package/Engines/Extensions/engine.multiview.js +2 -2
  63. package/Engines/Extensions/engine.multiview.js.map +1 -1
  64. package/Engines/Extensions/engine.prefilteredCubeTexture.js +3 -3
  65. package/Engines/Extensions/engine.prefilteredCubeTexture.js.map +1 -1
  66. package/Engines/Extensions/engine.rawTexture.js +4 -4
  67. package/Engines/Extensions/engine.rawTexture.js.map +1 -1
  68. package/Engines/Extensions/engine.renderTarget.js +3 -3
  69. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  70. package/Engines/Extensions/engine.renderTargetCube.js +2 -2
  71. package/Engines/Extensions/engine.renderTargetCube.js.map +1 -1
  72. package/Engines/Native/nativeShaderProcessors.js +1 -2
  73. package/Engines/Native/nativeShaderProcessors.js.map +1 -1
  74. package/Engines/Processors/shaderProcessor.js +2 -3
  75. package/Engines/Processors/shaderProcessor.js.map +1 -1
  76. package/Engines/WebGL/webGL2ShaderProcessors.js +1 -2
  77. package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
  78. package/Engines/WebGL/webGLShaderProcessors.js +1 -2
  79. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  80. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -2
  81. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  82. package/Engines/WebGPU/Extensions/engine.cubeTexture.js +2 -2
  83. package/Engines/WebGPU/Extensions/engine.cubeTexture.js.map +1 -1
  84. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js +2 -2
  85. package/Engines/WebGPU/Extensions/engine.dynamicTexture.js.map +1 -1
  86. package/Engines/WebGPU/Extensions/engine.multiRender.js +2 -2
  87. package/Engines/WebGPU/Extensions/engine.multiRender.js.map +1 -1
  88. package/Engines/WebGPU/Extensions/engine.rawTexture.js +5 -5
  89. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  90. package/Engines/WebGPU/Extensions/engine.renderTarget.js +3 -3
  91. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  92. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js +2 -2
  93. package/Engines/WebGPU/Extensions/engine.renderTargetCube.js.map +1 -1
  94. package/Engines/WebGPU/webgpuBufferManager.js +1 -1
  95. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  96. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +81 -82
  97. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  98. package/Engines/WebGPU/webgpuCacheSampler.js +60 -64
  99. package/Engines/WebGPU/webgpuCacheSampler.js.map +1 -1
  100. package/Engines/WebGPU/webgpuClearQuad.js +1 -2
  101. package/Engines/WebGPU/webgpuClearQuad.js.map +1 -1
  102. package/Engines/WebGPU/webgpuComputeContext.js +13 -15
  103. package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
  104. package/Engines/WebGPU/webgpuConstants.d.ts +39 -39
  105. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  106. package/Engines/WebGPU/webgpuHardwareTexture.js +6 -8
  107. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  108. package/Engines/WebGPU/webgpuOcclusionQuery.js +1 -2
  109. package/Engines/WebGPU/webgpuOcclusionQuery.js.map +1 -1
  110. package/Engines/WebGPU/webgpuQuerySet.js +3 -3
  111. package/Engines/WebGPU/webgpuQuerySet.js.map +1 -1
  112. package/Engines/WebGPU/webgpuShaderProcessor.js +15 -19
  113. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  114. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +8 -10
  115. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  116. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +26 -28
  117. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  118. package/Engines/WebGPU/webgpuTextureHelper.js +413 -416
  119. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  120. package/Engines/WebGPU/webgpuTextureManager.js +50 -51
  121. package/Engines/WebGPU/webgpuTextureManager.js.map +1 -1
  122. package/Engines/WebGPU/webgpuTimestampQuery.js +1 -2
  123. package/Engines/WebGPU/webgpuTimestampQuery.js.map +1 -1
  124. package/Engines/abstractEngine.js +4 -4
  125. package/Engines/abstractEngine.js.map +1 -1
  126. package/Engines/engine.js +2 -2
  127. package/Engines/engine.js.map +1 -1
  128. package/Engines/nativeEngine.js +9 -9
  129. package/Engines/nativeEngine.js.map +1 -1
  130. package/Engines/nullEngine.js +5 -5
  131. package/Engines/nullEngine.js.map +1 -1
  132. package/Engines/renderTargetWrapper.js +1 -2
  133. package/Engines/renderTargetWrapper.js.map +1 -1
  134. package/Engines/shaderStore.js +6 -7
  135. package/Engines/shaderStore.js.map +1 -1
  136. package/Engines/thinEngine.js +4 -5
  137. package/Engines/thinEngine.js.map +1 -1
  138. package/Engines/webgpuEngine.d.ts +11 -0
  139. package/Engines/webgpuEngine.js +91 -72
  140. package/Engines/webgpuEngine.js.map +1 -1
  141. package/Events/deviceInputEvents.d.ts +1 -1
  142. package/Events/deviceInputEvents.js.map +1 -1
  143. package/FlowGraph/flowGraph.d.ts +1 -1
  144. package/FlowGraph/flowGraph.js +5 -5
  145. package/FlowGraph/flowGraph.js.map +1 -1
  146. package/FlowGraph/flowGraphBlock.js +2 -3
  147. package/FlowGraph/flowGraphBlock.js.map +1 -1
  148. package/FlowGraph/flowGraphConnection.d.ts +1 -1
  149. package/FlowGraph/flowGraphConnection.js.map +1 -1
  150. package/FlowGraph/flowGraphDataConnection.js +3 -3
  151. package/FlowGraph/flowGraphDataConnection.js.map +1 -1
  152. package/FlowGraph/flowGraphExecutionBlock.js +2 -3
  153. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  154. package/FlowGraph/flowGraphSignalConnection.js +3 -3
  155. package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
  156. package/Gamepads/dualShockGamepad.d.ts +2 -2
  157. package/Gamepads/dualShockGamepad.js +14 -14
  158. package/Gamepads/dualShockGamepad.js.map +1 -1
  159. package/Gamepads/xboxGamepad.d.ts +2 -2
  160. package/Gamepads/xboxGamepad.js +14 -14
  161. package/Gamepads/xboxGamepad.js.map +1 -1
  162. package/Gizmos/gizmo.d.ts +2 -2
  163. package/Gizmos/gizmo.js +4 -4
  164. package/Gizmos/gizmo.js.map +1 -1
  165. package/Gizmos/gizmoManager.js +2 -2
  166. package/Gizmos/gizmoManager.js.map +1 -1
  167. package/Gizmos/scaleGizmo.js +3 -3
  168. package/Gizmos/scaleGizmo.js.map +1 -1
  169. package/Loading/sceneLoader.d.ts +1 -1
  170. package/Loading/sceneLoader.js +6 -6
  171. package/Loading/sceneLoader.js.map +1 -1
  172. package/Materials/GreasedLine/greasedLineMaterialInterfaces.d.ts +3 -3
  173. package/Materials/GreasedLine/greasedLineMaterialInterfaces.js.map +1 -1
  174. package/Materials/GreasedLine/greasedLinePluginMaterial.js +10 -11
  175. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  176. package/Materials/GreasedLine/greasedLineSimpleMaterial.js +8 -9
  177. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  178. package/Materials/Node/Blocks/Dual/currentScreenBlock.js +3 -4
  179. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  180. package/Materials/Node/Blocks/Dual/fogBlock.js +2 -3
  181. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  182. package/Materials/Node/Blocks/Dual/imageSourceBlock.js +1 -2
  183. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  184. package/Materials/Node/Blocks/Dual/lightBlock.js +5 -6
  185. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  186. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js +4 -5
  187. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  188. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js +7 -8
  189. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  190. package/Materials/Node/Blocks/Dual/textureBlock.js +4 -6
  191. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/Fragment/TBNBlock.js +2 -4
  193. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  194. package/Materials/Node/Blocks/Fragment/derivativeBlock.js +1 -2
  195. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  196. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js +1 -2
  197. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  198. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js +1 -2
  199. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
  200. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js +5 -6
  201. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  202. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js +1 -2
  203. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
  204. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js +5 -6
  205. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  206. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js +3 -4
  207. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  208. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js +7 -9
  209. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  210. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js +1 -2
  211. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  212. package/Materials/Node/Blocks/Input/inputBlock.js +19 -21
  213. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  214. package/Materials/Node/Blocks/Input/prePassTextureBlock.js +3 -4
  215. package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/PBR/anisotropyBlock.js +2 -3
  217. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  218. package/Materials/Node/Blocks/PBR/clearCoatBlock.js +4 -5
  219. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  220. package/Materials/Node/Blocks/PBR/iridescenceBlock.js +1 -2
  221. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js +28 -29
  223. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  224. package/Materials/Node/Blocks/PBR/reflectionBlock.js +4 -5
  225. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  226. package/Materials/Node/Blocks/PBR/refractionBlock.js +5 -6
  227. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  228. package/Materials/Node/Blocks/PBR/sheenBlock.js +4 -5
  229. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  230. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js +2 -3
  231. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  232. package/Materials/Node/Blocks/Vertex/instancesBlock.js +1 -2
  233. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  234. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js +1 -2
  235. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  236. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js +1 -2
  237. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  238. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js +1 -2
  239. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/arcTan2Block.js +1 -2
  241. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  242. package/Materials/Node/Blocks/biPlanarBlock.js +3 -4
  243. package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
  244. package/Materials/Node/Blocks/clampBlock.js +4 -5
  245. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  246. package/Materials/Node/Blocks/cloudBlock.js +3 -4
  247. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  248. package/Materials/Node/Blocks/curveBlock.js +1 -2
  249. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  250. package/Materials/Node/Blocks/customBlock.js +1 -2
  251. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  252. package/Materials/Node/Blocks/matrixBuilderBlock.js +1 -2
  253. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  254. package/Materials/Node/Blocks/meshAttributeExistsBlock.d.ts +1 -1
  255. package/Materials/Node/Blocks/meshAttributeExistsBlock.js +35 -35
  256. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  257. package/Materials/Node/Blocks/modBlock.js +1 -2
  258. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  259. package/Materials/Node/Blocks/remapBlock.js +3 -3
  260. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  261. package/Materials/Node/Blocks/simplexPerlin3DBlock.js +1 -2
  262. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  263. package/Materials/Node/Blocks/transformBlock.js +1 -2
  264. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  265. package/Materials/Node/Blocks/triPlanarBlock.js +10 -12
  266. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  267. package/Materials/Node/Blocks/voronoiNoiseBlock.js +3 -4
  268. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  269. package/Materials/Node/Blocks/waveBlock.d.ts +1 -1
  270. package/Materials/Node/Blocks/waveBlock.js +4 -4
  271. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  272. package/Materials/Node/Blocks/worleyNoise3DBlock.js +3 -4
  273. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  274. package/Materials/Node/Enums/nodeMaterialBlockConnectionPointMode.d.ts +1 -1
  275. package/Materials/Node/Enums/nodeMaterialBlockConnectionPointMode.js.map +1 -1
  276. package/Materials/Node/nodeMaterial.js +3 -4
  277. package/Materials/Node/nodeMaterial.js.map +1 -1
  278. package/Materials/Node/nodeMaterialBlock.js +5 -6
  279. package/Materials/Node/nodeMaterialBlock.js.map +1 -1
  280. package/Materials/Node/nodeMaterialBlockConnectionPoint.d.ts +2 -2
  281. package/Materials/Node/nodeMaterialBlockConnectionPoint.js +10 -10
  282. package/Materials/Node/nodeMaterialBlockConnectionPoint.js.map +1 -1
  283. package/Materials/Node/nodeMaterialBuildState.js +18 -19
  284. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  285. package/Materials/Node/nodeMaterialConnectionPointCustomObject.js +3 -3
  286. package/Materials/Node/nodeMaterialConnectionPointCustomObject.js.map +1 -1
  287. package/Materials/PBR/pbrBaseMaterial.js +3 -4
  288. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  289. package/Materials/Textures/internalTexture.d.ts +1 -1
  290. package/Materials/Textures/internalTexture.js +13 -13
  291. package/Materials/Textures/internalTexture.js.map +1 -1
  292. package/Materials/Textures/ktx2decoderTypes.d.ts +1 -1
  293. package/Materials/Textures/ktx2decoderTypes.js.map +1 -1
  294. package/Materials/Textures/rawCubeTexture.js +1 -2
  295. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  296. package/Materials/effect.functions.js +2 -3
  297. package/Materials/effect.functions.js.map +1 -1
  298. package/Materials/effect.js +3 -4
  299. package/Materials/effect.js.map +1 -1
  300. package/Materials/effect.webgl.functions.js +1 -2
  301. package/Materials/effect.webgl.functions.js.map +1 -1
  302. package/Materials/material.js +7 -9
  303. package/Materials/material.js.map +1 -1
  304. package/Materials/materialPluginEvent.d.ts +1 -1
  305. package/Materials/materialPluginEvent.js.map +1 -1
  306. package/Materials/materialPluginManager.js +9 -11
  307. package/Materials/materialPluginManager.js.map +1 -1
  308. package/Materials/meshDebugPluginMaterial.d.ts +1 -1
  309. package/Materials/meshDebugPluginMaterial.js +2 -2
  310. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  311. package/Materials/shaderLanguage.d.ts +1 -1
  312. package/Materials/shaderLanguage.js.map +1 -1
  313. package/Materials/shadowDepthWrapper.js +1 -2
  314. package/Materials/shadowDepthWrapper.js.map +1 -1
  315. package/Materials/standardMaterial.js +2 -3
  316. package/Materials/standardMaterial.js.map +1 -1
  317. package/Maths/math.axis.d.ts +2 -2
  318. package/Maths/math.axis.js.map +1 -1
  319. package/Maths/math.path.d.ts +1 -1
  320. package/Maths/math.path.js +3 -3
  321. package/Maths/math.path.js.map +1 -1
  322. package/Meshes/Builders/greasedLineBuilder.d.ts +2 -2
  323. package/Meshes/Builders/greasedLineBuilder.js +21 -23
  324. package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
  325. package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +3 -3
  326. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  327. package/Meshes/GreasedLine/greasedLineRibbonMesh.js +14 -14
  328. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  329. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js +2 -2
  330. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  331. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js +2 -2
  332. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  333. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js +3 -3
  334. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  335. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js +3 -3
  336. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  337. package/Meshes/Node/Blocks/Set/setColorsBlock.js +2 -2
  338. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
  339. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js +2 -2
  340. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
  341. package/Meshes/Node/Blocks/Set/setNormalsBlock.js +2 -2
  342. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
  343. package/Meshes/Node/Blocks/Set/setPositionsBlock.js +2 -2
  344. package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
  345. package/Meshes/Node/Blocks/Set/setTangentsBlock.js +2 -2
  346. package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
  347. package/Meshes/Node/Blocks/Set/setUVsBlock.js +3 -3
  348. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
  349. package/Meshes/Node/Blocks/Sources/boxBlock.js +2 -2
  350. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  351. package/Meshes/Node/Blocks/Sources/capsuleBlock.js +2 -2
  352. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  353. package/Meshes/Node/Blocks/Sources/cylinderBlock.js +2 -2
  354. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  355. package/Meshes/Node/Blocks/Sources/discBlock.js +2 -2
  356. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  357. package/Meshes/Node/Blocks/Sources/gridBlock.js +2 -2
  358. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  359. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js +2 -2
  360. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  361. package/Meshes/Node/Blocks/Sources/meshBlock.js +2 -2
  362. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
  363. package/Meshes/Node/Blocks/Sources/planeBlock.js +2 -2
  364. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  365. package/Meshes/Node/Blocks/Sources/sphereBlock.js +2 -2
  366. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  367. package/Meshes/Node/Blocks/Sources/torusBlock.js +2 -2
  368. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  369. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js +2 -2
  370. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  371. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js +2 -2
  372. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
  373. package/Meshes/Node/Blocks/booleanGeometryBlock.js +3 -3
  374. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  375. package/Meshes/Node/Blocks/conditionBlock.js +2 -2
  376. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
  377. package/Meshes/Node/Blocks/geometryClampBlock.js +3 -3
  378. package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
  379. package/Meshes/Node/Blocks/geometryCollectionBlock.js +2 -2
  380. package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
  381. package/Meshes/Node/Blocks/geometryCurveBlock.js +2 -2
  382. package/Meshes/Node/Blocks/geometryCurveBlock.js.map +1 -1
  383. package/Meshes/Node/Blocks/geometryOptimizeBlock.js +3 -3
  384. package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
  385. package/Meshes/Node/Blocks/geometryTransformBlock.js +2 -2
  386. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  387. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js +2 -2
  388. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  389. package/Meshes/Node/Blocks/mappingBlock.js +2 -2
  390. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  391. package/Meshes/Node/Blocks/mathBlock.js +2 -2
  392. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  393. package/Meshes/Node/Blocks/mergeGeometryBlock.js +2 -2
  394. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  395. package/Meshes/Node/Blocks/randomBlock.js +2 -2
  396. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  397. package/Meshes/Node/nodeGeometryBlock.js +3 -3
  398. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  399. package/Meshes/Node/nodeGeometryBlockConnectionPoint.d.ts +2 -2
  400. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js +7 -7
  401. package/Meshes/Node/nodeGeometryBlockConnectionPoint.js.map +1 -1
  402. package/Meshes/abstractMesh.js +4 -5
  403. package/Meshes/abstractMesh.js.map +1 -1
  404. package/Meshes/mesh.js +1 -2
  405. package/Meshes/mesh.js.map +1 -1
  406. package/Meshes/meshSimplification.d.ts +1 -1
  407. package/Meshes/meshSimplification.js +1 -1
  408. package/Meshes/meshSimplification.js.map +1 -1
  409. package/Meshes/meshSimplificationSceneComponent.js +2 -2
  410. package/Meshes/meshSimplificationSceneComponent.js.map +1 -1
  411. package/Meshes/transformNode.js +7 -8
  412. package/Meshes/transformNode.js.map +1 -1
  413. package/Misc/assetsManager.d.ts +1 -1
  414. package/Misc/assetsManager.js +9 -9
  415. package/Misc/assetsManager.js.map +1 -1
  416. package/Misc/basis.js +2 -2
  417. package/Misc/basis.js.map +1 -1
  418. package/Misc/copyTextureToTexture.d.ts +1 -1
  419. package/Misc/copyTextureToTexture.js +1 -1
  420. package/Misc/copyTextureToTexture.js.map +1 -1
  421. package/Misc/environmentTextureTools.js +3 -3
  422. package/Misc/environmentTextureTools.js.map +1 -1
  423. package/Misc/iInspectable.d.ts +1 -1
  424. package/Misc/iInspectable.js.map +1 -1
  425. package/Misc/khronosTextureContainer2.js +2 -2
  426. package/Misc/khronosTextureContainer2.js.map +1 -1
  427. package/Misc/timer.d.ts +1 -1
  428. package/Misc/timer.js +5 -5
  429. package/Misc/timer.js.map +1 -1
  430. package/Misc/virtualJoystick.d.ts +1 -1
  431. package/Misc/virtualJoystick.js +16 -16
  432. package/Misc/virtualJoystick.js.map +1 -1
  433. package/Particles/particleSystem.js +3 -3
  434. package/Particles/particleSystem.js.map +1 -1
  435. package/Particles/particleSystemComponent.js +1 -2
  436. package/Particles/particleSystemComponent.js.map +1 -1
  437. package/Particles/pointsCloudSystem.d.ts +1 -1
  438. package/Particles/pointsCloudSystem.js +14 -14
  439. package/Particles/pointsCloudSystem.js.map +1 -1
  440. package/Particles/subEmitter.d.ts +1 -1
  441. package/Particles/subEmitter.js +1 -1
  442. package/Particles/subEmitter.js.map +1 -1
  443. package/Physics/physicsHelper.d.ts +2 -2
  444. package/Physics/physicsHelper.js +6 -7
  445. package/Physics/physicsHelper.js.map +1 -1
  446. package/Physics/v1/physicsImpostor.js +4 -5
  447. package/Physics/v1/physicsImpostor.js.map +1 -1
  448. package/Physics/v2/IPhysicsEnginePlugin.d.ts +16 -8
  449. package/Physics/v2/IPhysicsEnginePlugin.js +9 -0
  450. package/Physics/v2/IPhysicsEnginePlugin.js.map +1 -1
  451. package/Physics/v2/Plugins/havokPlugin.js +96 -79
  452. package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
  453. package/Physics/v2/physicsAggregate.js +8 -9
  454. package/Physics/v2/physicsAggregate.js.map +1 -1
  455. package/Physics/v2/physicsBody.d.ts +14 -2
  456. package/Physics/v2/physicsBody.js +30 -11
  457. package/Physics/v2/physicsBody.js.map +1 -1
  458. package/Physics/v2/physicsConstraint.js +8 -9
  459. package/Physics/v2/physicsConstraint.js.map +1 -1
  460. package/Physics/v2/physicsMaterial.d.ts +1 -1
  461. package/Physics/v2/physicsMaterial.js.map +1 -1
  462. package/Physics/v2/physicsShape.js +9 -10
  463. package/Physics/v2/physicsShape.js.map +1 -1
  464. package/Physics/v2/ragdoll.js +11 -12
  465. package/Physics/v2/ragdoll.js.map +1 -1
  466. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js +2 -2
  467. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  468. package/PostProcesses/depthOfFieldEffect.d.ts +1 -1
  469. package/PostProcesses/depthOfFieldEffect.js +3 -3
  470. package/PostProcesses/depthOfFieldEffect.js.map +1 -1
  471. package/PostProcesses/postProcess.js +2 -3
  472. package/PostProcesses/postProcess.js.map +1 -1
  473. package/PostProcesses/tonemapPostProcess.d.ts +1 -1
  474. package/PostProcesses/tonemapPostProcess.js +4 -4
  475. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  476. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +1 -1
  477. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +10 -10
  478. package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
  479. package/Shaders/spriteMap.fragment.js +3 -2
  480. package/Shaders/spriteMap.fragment.js.map +1 -1
  481. package/ShadersWGSL/boundingInfo.compute.js +8 -8
  482. package/ShadersWGSL/boundingInfo.compute.js.map +1 -1
  483. package/XR/features/WebXRDepthSensing.js +2 -2
  484. package/XR/features/WebXRDepthSensing.js.map +1 -1
  485. package/XR/features/WebXRHandTracking.d.ts +2 -2
  486. package/XR/features/WebXRHandTracking.js +76 -76
  487. package/XR/features/WebXRHandTracking.js.map +1 -1
  488. package/XR/features/WebXRLightEstimation.js +2 -2
  489. package/XR/features/WebXRLightEstimation.js.map +1 -1
  490. package/XR/features/WebXRNearInteraction.d.ts +1 -1
  491. package/XR/features/WebXRNearInteraction.js +5 -5
  492. package/XR/features/WebXRNearInteraction.js.map +1 -1
  493. package/XR/features/WebXRRawCameraAccess.js +2 -2
  494. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  495. package/XR/motionController/webXRProfiledMotionController.js +2 -2
  496. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  497. package/XR/webXRCamera.js +3 -4
  498. package/XR/webXRCamera.js.map +1 -1
  499. package/XR/webXREnterExitUI.js +3 -4
  500. package/XR/webXREnterExitUI.js.map +1 -1
  501. package/XR/webXRExperienceHelper.js +12 -13
  502. package/XR/webXRExperienceHelper.js.map +1 -1
  503. package/XR/webXRManagedOutputCanvas.d.ts +1 -1
  504. package/XR/webXRManagedOutputCanvas.js +15 -6
  505. package/XR/webXRManagedOutputCanvas.js.map +1 -1
  506. package/XR/webXRRenderTargetTextureProvider.js +2 -2
  507. package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
  508. package/XR/webXRTypes.d.ts +2 -2
  509. package/XR/webXRTypes.js.map +1 -1
  510. package/package.json +1 -1
  511. package/scene.d.ts +1 -1
  512. package/scene.js +4 -4
  513. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"webXRExperienceHelper.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRExperienceHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { WebXRSessionManager } from \"./webXRSessionManager\";\r\nimport { WebXRCamera } from \"./webXRCamera\";\r\nimport type { WebXRRenderTarget } from \"./webXRTypes\";\r\nimport { WebXRState } from \"./webXRTypes\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"./webXRFeaturesManager\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { UniversalCamera } from \"../Cameras/universalCamera\";\r\nimport { Quaternion, Vector3 } from \"../Maths/math.vector\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\n\r\n/**\r\n * Options for setting up XR spectator camera.\r\n */\r\nexport interface WebXRSpectatorModeOption {\r\n /**\r\n * Expected refresh rate (frames per sec) for a spectator camera.\r\n */\r\n fps?: number;\r\n /**\r\n * The index of rigCameras array in a WebXR camera.\r\n */\r\n preferredCameraIndex?: number;\r\n}\r\n\r\n/**\r\n * Base set of functionality needed to create an XR experience (WebXRSessionManager, Camera, StateManagement, etc.)\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/webXR/webXRExperienceHelpers\r\n */\r\nexport class WebXRExperienceHelper implements IDisposable {\r\n private _nonVRCamera: Nullable<Camera> = null;\r\n private _attachedToElement: boolean = false;\r\n private _spectatorCamera: Nullable<UniversalCamera> = null;\r\n private _originalSceneAutoClear = true;\r\n private _supported = false;\r\n private _spectatorMode = false;\r\n private _lastTimestamp = 0;\r\n\r\n /**\r\n * Camera used to render xr content\r\n */\r\n public camera: WebXRCamera;\r\n /** A features manager for this xr session */\r\n public featuresManager: WebXRFeaturesManager;\r\n /**\r\n * Observers registered here will be triggered after the camera's initial transformation is set\r\n * This can be used to set a different ground level or an extra rotation.\r\n *\r\n * Note that ground level is considered to be at 0. The height defined by the XR camera will be added\r\n * to the position set after this observable is done executing.\r\n */\r\n public onInitialXRPoseSetObservable = new Observable<WebXRCamera>();\r\n /**\r\n * Fires when the state of the experience helper has changed\r\n */\r\n public onStateChangedObservable = new Observable<WebXRState>();\r\n /** Session manager used to keep track of xr session */\r\n public sessionManager: WebXRSessionManager;\r\n /**\r\n * The current state of the XR experience (eg. transitioning, in XR or not in XR)\r\n */\r\n public state: WebXRState = WebXRState.NOT_IN_XR;\r\n\r\n /**\r\n * Creates a WebXRExperienceHelper\r\n * @param _scene The scene the helper should be created in\r\n */\r\n private constructor(private _scene: Scene) {\r\n this.sessionManager = new WebXRSessionManager(_scene);\r\n this.camera = new WebXRCamera(\"webxr\", _scene, this.sessionManager);\r\n this.featuresManager = new WebXRFeaturesManager(this.sessionManager);\r\n\r\n _scene.onDisposeObservable.addOnce(() => {\r\n this.dispose();\r\n });\r\n }\r\n\r\n /**\r\n * Creates the experience helper\r\n * @param scene the scene to attach the experience helper to\r\n * @returns a promise for the experience helper\r\n */\r\n public static CreateAsync(scene: Scene): Promise<WebXRExperienceHelper> {\r\n const helper = new WebXRExperienceHelper(scene);\r\n return helper.sessionManager\r\n .initializeAsync()\r\n .then(() => {\r\n helper._supported = true;\r\n return helper;\r\n })\r\n .catch((e) => {\r\n helper._setState(WebXRState.NOT_IN_XR);\r\n helper.dispose();\r\n throw e;\r\n });\r\n }\r\n\r\n /**\r\n * Disposes of the experience helper\r\n */\r\n public dispose() {\r\n this.exitXRAsync();\r\n this.camera.dispose();\r\n this.onStateChangedObservable.clear();\r\n this.onInitialXRPoseSetObservable.clear();\r\n this.sessionManager.dispose();\r\n this._spectatorCamera?.dispose();\r\n if (this._nonVRCamera) {\r\n this._scene.activeCamera = this._nonVRCamera;\r\n }\r\n }\r\n\r\n /**\r\n * Enters XR mode (This must be done within a user interaction in most browsers eg. button click)\r\n * @param sessionMode options for the XR session\r\n * @param referenceSpaceType frame of reference of the XR session\r\n * @param renderTarget the output canvas that will be used to enter XR mode\r\n * @param sessionCreationOptions optional XRSessionInit object to init the session with\r\n * @returns promise that resolves after xr mode has entered\r\n */\r\n public async enterXRAsync(\r\n sessionMode: XRSessionMode,\r\n referenceSpaceType: XRReferenceSpaceType,\r\n renderTarget: WebXRRenderTarget = this.sessionManager.getWebXRRenderTarget(),\r\n sessionCreationOptions: XRSessionInit = {}\r\n ): Promise<WebXRSessionManager> {\r\n if (!this._supported) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"WebXR not supported in this browser or environment\";\r\n }\r\n this._setState(WebXRState.ENTERING_XR);\r\n if (referenceSpaceType !== \"viewer\" && referenceSpaceType !== \"local\") {\r\n sessionCreationOptions.optionalFeatures = sessionCreationOptions.optionalFeatures || [];\r\n sessionCreationOptions.optionalFeatures.push(referenceSpaceType);\r\n }\r\n sessionCreationOptions = await this.featuresManager._extendXRSessionInitObject(sessionCreationOptions);\r\n // we currently recommend \"unbounded\" space in AR (#7959)\r\n if (sessionMode === \"immersive-ar\" && referenceSpaceType !== \"unbounded\") {\r\n Logger.Warn(\"We recommend using 'unbounded' reference space type when using 'immersive-ar' session mode\");\r\n }\r\n // make sure that the session mode is supported\r\n try {\r\n await this.sessionManager.initializeSessionAsync(sessionMode, sessionCreationOptions);\r\n await this.sessionManager.setReferenceSpaceTypeAsync(referenceSpaceType);\r\n\r\n const xrRenderState: XRRenderStateInit = {\r\n // if maxZ is 0 it should be \"Infinity\", but it doesn't work with the WebXR API. Setting to a large number.\r\n depthFar: this.camera.maxZ || 10000,\r\n depthNear: this.camera.minZ,\r\n };\r\n\r\n // The layers feature will have already initialized the xr session's layers on session init.\r\n if (!this.featuresManager.getEnabledFeature(WebXRFeatureName.LAYERS)) {\r\n const baseLayer = await renderTarget.initializeXRLayerAsync(this.sessionManager.session);\r\n xrRenderState.baseLayer = baseLayer;\r\n }\r\n\r\n this.sessionManager.updateRenderState(xrRenderState);\r\n // run the render loop\r\n this.sessionManager.runXRRenderLoop();\r\n // Cache pre xr scene settings\r\n this._originalSceneAutoClear = this._scene.autoClear;\r\n this._nonVRCamera = this._scene.activeCamera;\r\n this._attachedToElement = !!this._nonVRCamera?.inputs?.attachedToElement;\r\n this._nonVRCamera?.detachControl();\r\n\r\n this._scene.activeCamera = this.camera;\r\n // do not compensate when AR session is used\r\n if (sessionMode !== \"immersive-ar\") {\r\n this._nonXRToXRCamera();\r\n } else {\r\n // Kept here, TODO - check if needed\r\n this._scene.autoClear = false;\r\n this.camera.compensateOnFirstFrame = false;\r\n // reset the camera's position to the origin\r\n this.camera.position.set(0, 0, 0);\r\n this.camera.rotationQuaternion.set(0, 0, 0, 1);\r\n this.onInitialXRPoseSetObservable.notifyObservers(this.camera);\r\n }\r\n\r\n // Vision Pro suspends the audio context when entering XR, so we resume it here if needed.\r\n Engine.audioEngine?._resumeAudioContextOnStateChange();\r\n\r\n this.sessionManager.onXRSessionEnded.addOnce(() => {\r\n // when using the back button and not the exit button (default on mobile), the session is ending but the EXITING state was not set\r\n if (this.state !== WebXRState.EXITING_XR) {\r\n this._setState(WebXRState.EXITING_XR);\r\n }\r\n // Reset camera rigs output render target to ensure sessions render target is not drawn after it ends\r\n this.camera.rigCameras.forEach((c) => {\r\n c.outputRenderTarget = null;\r\n });\r\n\r\n // Restore scene settings\r\n this._scene.autoClear = this._originalSceneAutoClear;\r\n this._scene.activeCamera = this._nonVRCamera;\r\n if (this._attachedToElement && this._nonVRCamera) {\r\n this._nonVRCamera.attachControl(!!this._nonVRCamera.inputs.noPreventDefault);\r\n }\r\n if (sessionMode !== \"immersive-ar\" && this.camera.compensateOnFirstFrame) {\r\n if ((<any>this._nonVRCamera).setPosition) {\r\n (<any>this._nonVRCamera).setPosition(this.camera.position);\r\n } else {\r\n this._nonVRCamera!.position.copyFrom(this.camera.position);\r\n }\r\n }\r\n\r\n this._setState(WebXRState.NOT_IN_XR);\r\n });\r\n\r\n // Wait until the first frame arrives before setting state to in xr\r\n this.sessionManager.onXRFrameObservable.addOnce(() => {\r\n this._setState(WebXRState.IN_XR);\r\n });\r\n return this.sessionManager;\r\n } catch (e) {\r\n Logger.Log(e);\r\n Logger.Log(e.message);\r\n this._setState(WebXRState.NOT_IN_XR);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Exits XR mode and returns the scene to its original state\r\n * @returns promise that resolves after xr mode has exited\r\n */\r\n public exitXRAsync() {\r\n // only exit if state is IN_XR\r\n if (this.state !== WebXRState.IN_XR) {\r\n return Promise.resolve();\r\n }\r\n this._setState(WebXRState.EXITING_XR);\r\n return this.sessionManager.exitXRAsync();\r\n }\r\n\r\n /**\r\n * Enable spectator mode for desktop VR experiences.\r\n * When spectator mode is enabled a camera will be attached to the desktop canvas and will\r\n * display the first rig camera's view on the desktop canvas.\r\n * Please note that this will degrade performance, as it requires another camera render.\r\n * It is also not recommended to enable this in devices like the quest, as it brings no benefit there.\r\n * @param options giving WebXRSpectatorModeOption for specutator camera to setup when the spectator mode is enabled.\r\n */\r\n public enableSpectatorMode(options?: WebXRSpectatorModeOption): void {\r\n if (!this._spectatorMode) {\r\n this._spectatorMode = true;\r\n this._switchSpectatorMode(options);\r\n }\r\n }\r\n\r\n /**\r\n * Disable spectator mode for desktop VR experiences.\r\n */\r\n public disableSpecatatorMode(): void {\r\n if (this._spectatorMode) {\r\n this._spectatorMode = false;\r\n this._switchSpectatorMode();\r\n }\r\n }\r\n\r\n private _switchSpectatorMode(options?: WebXRSpectatorModeOption): void {\r\n const fps = options?.fps ? options.fps : 1000.0;\r\n const refreshRate = (1.0 / fps) * 1000.0;\r\n const cameraIndex = options?.preferredCameraIndex ? options?.preferredCameraIndex : 0;\r\n\r\n const updateSpectatorCamera = () => {\r\n if (this._spectatorCamera) {\r\n const delta = this.sessionManager.currentTimestamp - this._lastTimestamp;\r\n if (delta >= refreshRate) {\r\n this._lastTimestamp = this.sessionManager.currentTimestamp;\r\n this._spectatorCamera.position.copyFrom(this.camera.rigCameras[cameraIndex].globalPosition);\r\n this._spectatorCamera.rotationQuaternion.copyFrom(this.camera.rigCameras[cameraIndex].absoluteRotation);\r\n }\r\n }\r\n };\r\n if (this._spectatorMode) {\r\n if (cameraIndex >= this.camera.rigCameras.length) {\r\n throw new Error(\"the preferred camera index is beyond the length of rig camera array.\");\r\n }\r\n const onStateChanged = () => {\r\n if (this.state === WebXRState.IN_XR) {\r\n this._spectatorCamera = new UniversalCamera(\"webxr-spectator\", Vector3.Zero(), this._scene);\r\n this._spectatorCamera.rotationQuaternion = new Quaternion();\r\n this._scene.activeCameras = [this.camera, this._spectatorCamera];\r\n this.sessionManager.onXRFrameObservable.add(updateSpectatorCamera);\r\n this._scene.onAfterRenderCameraObservable.add((camera) => {\r\n if (camera === this.camera) {\r\n // reset the dimensions object for correct resizing\r\n (this._scene.getEngine() as ThinEngine).framebufferDimensionsObject = null;\r\n }\r\n });\r\n } else if (this.state === WebXRState.EXITING_XR) {\r\n this.sessionManager.onXRFrameObservable.removeCallback(updateSpectatorCamera);\r\n this._scene.activeCameras = null;\r\n }\r\n };\r\n this.onStateChangedObservable.add(onStateChanged);\r\n onStateChanged();\r\n } else {\r\n this.sessionManager.onXRFrameObservable.removeCallback(updateSpectatorCamera);\r\n this._scene.activeCameras = [this.camera];\r\n }\r\n }\r\n\r\n private _nonXRToXRCamera() {\r\n this.camera.setTransformationFromNonVRCamera(this._nonVRCamera!);\r\n this.onInitialXRPoseSetObservable.notifyObservers(this.camera);\r\n }\r\n\r\n private _setState(val: WebXRState) {\r\n if (this.state === val) {\r\n return;\r\n }\r\n this.state = val;\r\n this.onStateChangedObservable.notifyObservers(this.state);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRExperienceHelper.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRExperienceHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { Camera } from \"../Cameras/camera\";\r\nimport { WebXRSessionManager } from \"./webXRSessionManager\";\r\nimport { WebXRCamera } from \"./webXRCamera\";\r\nimport type { WebXRRenderTarget } from \"./webXRTypes\";\r\nimport { WebXRState } from \"./webXRTypes\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"./webXRFeaturesManager\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { UniversalCamera } from \"../Cameras/universalCamera\";\r\nimport { Quaternion, Vector3 } from \"../Maths/math.vector\";\r\nimport { Engine } from \"../Engines/engine\";\r\nimport type { ThinEngine } from \"../Engines/thinEngine\";\r\n\r\n/**\r\n * Options for setting up XR spectator camera.\r\n */\r\nexport interface WebXRSpectatorModeOption {\r\n /**\r\n * Expected refresh rate (frames per sec) for a spectator camera.\r\n */\r\n fps?: number;\r\n /**\r\n * The index of rigCameras array in a WebXR camera.\r\n */\r\n preferredCameraIndex?: number;\r\n}\r\n\r\n/**\r\n * Base set of functionality needed to create an XR experience (WebXRSessionManager, Camera, StateManagement, etc.)\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/webXR/webXRExperienceHelpers\r\n */\r\nexport class WebXRExperienceHelper implements IDisposable {\r\n private _nonVRCamera: Nullable<Camera> = null;\r\n private _attachedToElement: boolean = false;\r\n private _spectatorCamera: Nullable<UniversalCamera> = null;\r\n private _originalSceneAutoClear = true;\r\n private _supported = false;\r\n private _spectatorMode = false;\r\n private _lastTimestamp = 0;\r\n\r\n /**\r\n * Camera used to render xr content\r\n */\r\n public camera: WebXRCamera;\r\n /** A features manager for this xr session */\r\n public featuresManager: WebXRFeaturesManager;\r\n /**\r\n * Observers registered here will be triggered after the camera's initial transformation is set\r\n * This can be used to set a different ground level or an extra rotation.\r\n *\r\n * Note that ground level is considered to be at 0. The height defined by the XR camera will be added\r\n * to the position set after this observable is done executing.\r\n */\r\n public onInitialXRPoseSetObservable = new Observable<WebXRCamera>();\r\n /**\r\n * Fires when the state of the experience helper has changed\r\n */\r\n public onStateChangedObservable = new Observable<WebXRState>();\r\n /** Session manager used to keep track of xr session */\r\n public sessionManager: WebXRSessionManager;\r\n /**\r\n * The current state of the XR experience (eg. transitioning, in XR or not in XR)\r\n */\r\n public state: WebXRState = WebXRState.NOT_IN_XR;\r\n\r\n /**\r\n * Creates a WebXRExperienceHelper\r\n * @param _scene The scene the helper should be created in\r\n */\r\n private constructor(private _scene: Scene) {\r\n this.sessionManager = new WebXRSessionManager(_scene);\r\n this.camera = new WebXRCamera(\"webxr\", _scene, this.sessionManager);\r\n this.featuresManager = new WebXRFeaturesManager(this.sessionManager);\r\n\r\n _scene.onDisposeObservable.addOnce(() => {\r\n this.dispose();\r\n });\r\n }\r\n\r\n /**\r\n * Creates the experience helper\r\n * @param scene the scene to attach the experience helper to\r\n * @returns a promise for the experience helper\r\n */\r\n public static CreateAsync(scene: Scene): Promise<WebXRExperienceHelper> {\r\n const helper = new WebXRExperienceHelper(scene);\r\n return helper.sessionManager\r\n .initializeAsync()\r\n .then(() => {\r\n helper._supported = true;\r\n return helper;\r\n })\r\n .catch((e) => {\r\n helper._setState(WebXRState.NOT_IN_XR);\r\n helper.dispose();\r\n throw e;\r\n });\r\n }\r\n\r\n /**\r\n * Disposes of the experience helper\r\n */\r\n public dispose() {\r\n this.exitXRAsync();\r\n this.camera.dispose();\r\n this.onStateChangedObservable.clear();\r\n this.onInitialXRPoseSetObservable.clear();\r\n this.sessionManager.dispose();\r\n this._spectatorCamera?.dispose();\r\n if (this._nonVRCamera) {\r\n this._scene.activeCamera = this._nonVRCamera;\r\n }\r\n }\r\n\r\n /**\r\n * Enters XR mode (This must be done within a user interaction in most browsers eg. button click)\r\n * @param sessionMode options for the XR session\r\n * @param referenceSpaceType frame of reference of the XR session\r\n * @param renderTarget the output canvas that will be used to enter XR mode\r\n * @param sessionCreationOptions optional XRSessionInit object to init the session with\r\n * @returns promise that resolves after xr mode has entered\r\n */\r\n public async enterXRAsync(\r\n sessionMode: XRSessionMode,\r\n referenceSpaceType: XRReferenceSpaceType,\r\n renderTarget: WebXRRenderTarget = this.sessionManager.getWebXRRenderTarget(),\r\n sessionCreationOptions: XRSessionInit = {}\r\n ): Promise<WebXRSessionManager> {\r\n if (!this._supported) {\r\n // eslint-disable-next-line no-throw-literal\r\n throw \"WebXR not supported in this browser or environment\";\r\n }\r\n this._setState(WebXRState.ENTERING_XR);\r\n if (referenceSpaceType !== \"viewer\" && referenceSpaceType !== \"local\") {\r\n sessionCreationOptions.optionalFeatures = sessionCreationOptions.optionalFeatures || [];\r\n sessionCreationOptions.optionalFeatures.push(referenceSpaceType);\r\n }\r\n sessionCreationOptions = await this.featuresManager._extendXRSessionInitObject(sessionCreationOptions);\r\n // we currently recommend \"unbounded\" space in AR (#7959)\r\n if (sessionMode === \"immersive-ar\" && referenceSpaceType !== \"unbounded\") {\r\n Logger.Warn(\"We recommend using 'unbounded' reference space type when using 'immersive-ar' session mode\");\r\n }\r\n // make sure that the session mode is supported\r\n try {\r\n await this.sessionManager.initializeSessionAsync(sessionMode, sessionCreationOptions);\r\n await this.sessionManager.setReferenceSpaceTypeAsync(referenceSpaceType);\r\n\r\n const xrRenderState: XRRenderStateInit = {\r\n // if maxZ is 0 it should be \"Infinity\", but it doesn't work with the WebXR API. Setting to a large number.\r\n depthFar: this.camera.maxZ || 10000,\r\n depthNear: this.camera.minZ,\r\n };\r\n\r\n // The layers feature will have already initialized the xr session's layers on session init.\r\n if (!this.featuresManager.getEnabledFeature(WebXRFeatureName.LAYERS)) {\r\n const baseLayer = await renderTarget.initializeXRLayerAsync(this.sessionManager.session);\r\n xrRenderState.baseLayer = baseLayer;\r\n }\r\n\r\n this.sessionManager.updateRenderState(xrRenderState);\r\n // run the render loop\r\n this.sessionManager.runXRRenderLoop();\r\n // Cache pre xr scene settings\r\n this._originalSceneAutoClear = this._scene.autoClear;\r\n this._nonVRCamera = this._scene.activeCamera;\r\n this._attachedToElement = !!this._nonVRCamera?.inputs?.attachedToElement;\r\n this._nonVRCamera?.detachControl();\r\n\r\n this._scene.activeCamera = this.camera;\r\n // do not compensate when AR session is used\r\n if (sessionMode !== \"immersive-ar\") {\r\n this._nonXRToXRCamera();\r\n } else {\r\n // Kept here, TODO - check if needed\r\n this._scene.autoClear = false;\r\n this.camera.compensateOnFirstFrame = false;\r\n // reset the camera's position to the origin\r\n this.camera.position.set(0, 0, 0);\r\n this.camera.rotationQuaternion.set(0, 0, 0, 1);\r\n this.onInitialXRPoseSetObservable.notifyObservers(this.camera);\r\n }\r\n\r\n // Vision Pro suspends the audio context when entering XR, so we resume it here if needed.\r\n Engine.audioEngine?._resumeAudioContextOnStateChange();\r\n\r\n this.sessionManager.onXRSessionEnded.addOnce(() => {\r\n // when using the back button and not the exit button (default on mobile), the session is ending but the EXITING state was not set\r\n if (this.state !== WebXRState.EXITING_XR) {\r\n this._setState(WebXRState.EXITING_XR);\r\n }\r\n // Reset camera rigs output render target to ensure sessions render target is not drawn after it ends\r\n this.camera.rigCameras.forEach((c) => {\r\n c.outputRenderTarget = null;\r\n });\r\n\r\n // Restore scene settings\r\n this._scene.autoClear = this._originalSceneAutoClear;\r\n this._scene.activeCamera = this._nonVRCamera;\r\n if (this._attachedToElement && this._nonVRCamera) {\r\n this._nonVRCamera.attachControl(!!this._nonVRCamera.inputs.noPreventDefault);\r\n }\r\n if (sessionMode !== \"immersive-ar\" && this.camera.compensateOnFirstFrame) {\r\n if ((<any>this._nonVRCamera).setPosition) {\r\n (<any>this._nonVRCamera).setPosition(this.camera.position);\r\n } else {\r\n this._nonVRCamera!.position.copyFrom(this.camera.position);\r\n }\r\n }\r\n\r\n this._setState(WebXRState.NOT_IN_XR);\r\n });\r\n\r\n // Wait until the first frame arrives before setting state to in xr\r\n this.sessionManager.onXRFrameObservable.addOnce(() => {\r\n this._setState(WebXRState.IN_XR);\r\n });\r\n return this.sessionManager;\r\n } catch (e) {\r\n Logger.Log(e);\r\n Logger.Log(e.message);\r\n this._setState(WebXRState.NOT_IN_XR);\r\n throw e;\r\n }\r\n }\r\n\r\n /**\r\n * Exits XR mode and returns the scene to its original state\r\n * @returns promise that resolves after xr mode has exited\r\n */\r\n public exitXRAsync() {\r\n // only exit if state is IN_XR\r\n if (this.state !== WebXRState.IN_XR) {\r\n return Promise.resolve();\r\n }\r\n this._setState(WebXRState.EXITING_XR);\r\n return this.sessionManager.exitXRAsync();\r\n }\r\n\r\n /**\r\n * Enable spectator mode for desktop VR experiences.\r\n * When spectator mode is enabled a camera will be attached to the desktop canvas and will\r\n * display the first rig camera's view on the desktop canvas.\r\n * Please note that this will degrade performance, as it requires another camera render.\r\n * It is also not recommended to enable this in devices like the quest, as it brings no benefit there.\r\n * @param options giving WebXRSpectatorModeOption for specutator camera to setup when the spectator mode is enabled.\r\n */\r\n public enableSpectatorMode(options?: WebXRSpectatorModeOption): void {\r\n if (!this._spectatorMode) {\r\n this._spectatorMode = true;\r\n this._switchSpectatorMode(options);\r\n }\r\n }\r\n\r\n /**\r\n * Disable spectator mode for desktop VR experiences.\r\n */\r\n public disableSpecatatorMode(): void {\r\n if (this._spectatorMode) {\r\n this._spectatorMode = false;\r\n this._switchSpectatorMode();\r\n }\r\n }\r\n\r\n private _switchSpectatorMode(options?: WebXRSpectatorModeOption): void {\r\n const fps = options?.fps ? options.fps : 1000.0;\r\n const refreshRate = (1.0 / fps) * 1000.0;\r\n const cameraIndex = options?.preferredCameraIndex ? options?.preferredCameraIndex : 0;\r\n\r\n const updateSpectatorCamera = () => {\r\n if (this._spectatorCamera) {\r\n const delta = this.sessionManager.currentTimestamp - this._lastTimestamp;\r\n if (delta >= refreshRate) {\r\n this._lastTimestamp = this.sessionManager.currentTimestamp;\r\n this._spectatorCamera.position.copyFrom(this.camera.rigCameras[cameraIndex].globalPosition);\r\n this._spectatorCamera.rotationQuaternion.copyFrom(this.camera.rigCameras[cameraIndex].absoluteRotation);\r\n }\r\n }\r\n };\r\n if (this._spectatorMode) {\r\n if (cameraIndex >= this.camera.rigCameras.length) {\r\n throw new Error(\"the preferred camera index is beyond the length of rig camera array.\");\r\n }\r\n const onStateChanged = () => {\r\n if (this.state === WebXRState.IN_XR) {\r\n this._spectatorCamera = new UniversalCamera(\"webxr-spectator\", Vector3.Zero(), this._scene);\r\n this._spectatorCamera.rotationQuaternion = new Quaternion();\r\n this._scene.activeCameras = [this.camera, this._spectatorCamera];\r\n this.sessionManager.onXRFrameObservable.add(updateSpectatorCamera);\r\n this._scene.onAfterRenderCameraObservable.add((camera) => {\r\n if (camera === this.camera) {\r\n // reset the dimensions object for correct resizing\r\n (this._scene.getEngine() as ThinEngine).framebufferDimensionsObject = null;\r\n }\r\n });\r\n } else if (this.state === WebXRState.EXITING_XR) {\r\n this.sessionManager.onXRFrameObservable.removeCallback(updateSpectatorCamera);\r\n this._scene.activeCameras = null;\r\n }\r\n };\r\n this.onStateChangedObservable.add(onStateChanged);\r\n onStateChanged();\r\n } else {\r\n this.sessionManager.onXRFrameObservable.removeCallback(updateSpectatorCamera);\r\n this._scene.activeCameras = [this.camera];\r\n }\r\n }\r\n\r\n private _nonXRToXRCamera() {\r\n this.camera.setTransformationFromNonVRCamera(this._nonVRCamera!);\r\n this.onInitialXRPoseSetObservable.notifyObservers(this.camera);\r\n }\r\n\r\n private _setState(val: WebXRState) {\r\n if (this.state === val) {\r\n return;\r\n }\r\n this.state = val;\r\n this.onStateChangedObservable.notifyObservers(this.state);\r\n }\r\n}\r\n"]}
@@ -38,7 +38,7 @@ export declare class WebXRManagedOutputCanvas implements WebXRRenderTarget {
38
38
  /**
39
39
  * Rendering context of the canvas which can be used to display/mirror xr content
40
40
  */
41
- canvasContext: WebGLRenderingContext;
41
+ canvasContext: WebGL2RenderingContext;
42
42
  /**
43
43
  * xr layer for the canvas
44
44
  */
@@ -73,14 +73,23 @@ export class WebXRManagedOutputCanvas {
73
73
  this._setManagedOutputCanvas(null);
74
74
  }
75
75
  _makeCanvasCompatibleAsync() {
76
- this._canvasCompatiblePromise = new Promise((resolve) => {
77
- if (this.canvasContext && this.canvasContext.makeXRCompatible) {
78
- this.canvasContext.makeXRCompatible().then(() => {
76
+ this._canvasCompatiblePromise = new Promise((resolve, reject) => {
77
+ // stay safe - make sure the context has the function
78
+ try {
79
+ if (this.canvasContext && this.canvasContext.makeXRCompatible) {
80
+ this.canvasContext.makeXRCompatible().then(() => {
81
+ resolve();
82
+ }, () => {
83
+ // fail silently
84
+ reject("makeXRCompatible failed");
85
+ });
86
+ }
87
+ else {
79
88
  resolve();
80
- });
89
+ }
81
90
  }
82
- else {
83
- resolve();
91
+ catch (e) {
92
+ reject(e);
84
93
  }
85
94
  });
86
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webXRManagedOutputCanvas.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRManagedOutputCanvas.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { WebXRRenderTarget } from \"./webXRTypes\";\r\nimport type { WebXRSessionManager } from \"./webXRSessionManager\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { WebXRLayerWrapper } from \"./webXRLayerWrapper\";\r\nimport { WebXRWebGLLayerWrapper } from \"./webXRWebGLLayer\";\r\n\r\n/**\r\n * Configuration object for WebXR output canvas\r\n */\r\nexport class WebXRManagedOutputCanvasOptions {\r\n /**\r\n * An optional canvas in case you wish to create it yourself and provide it here.\r\n * If not provided, a new canvas will be created\r\n */\r\n public canvasElement?: HTMLCanvasElement;\r\n /**\r\n * Options for this XR Layer output\r\n */\r\n public canvasOptions?: XRWebGLLayerInit;\r\n /**\r\n * CSS styling for a newly created canvas (if not provided)\r\n */\r\n public newCanvasCssStyle?: string;\r\n\r\n /**\r\n * Get the default values of the configuration object\r\n * @param engine defines the engine to use (can be null)\r\n * @returns default values of this configuration object\r\n */\r\n public static GetDefaults(engine?: AbstractEngine): WebXRManagedOutputCanvasOptions {\r\n const defaults = new WebXRManagedOutputCanvasOptions();\r\n defaults.canvasOptions = {\r\n antialias: true,\r\n depth: true,\r\n stencil: engine ? engine.isStencilEnable : true,\r\n alpha: true,\r\n framebufferScaleFactor: 1,\r\n };\r\n\r\n defaults.newCanvasCssStyle = \"position:absolute; bottom:0px;right:0px;z-index:10;width:90%;height:100%;background-color: #000000;\";\r\n\r\n return defaults;\r\n }\r\n}\r\n/**\r\n * Creates a canvas that is added/removed from the webpage when entering/exiting XR\r\n */\r\nexport class WebXRManagedOutputCanvas implements WebXRRenderTarget {\r\n private _canvas: Nullable<HTMLCanvasElement> = null;\r\n private _engine: Nullable<AbstractEngine> = null;\r\n private _originalCanvasSize: {\r\n width: number;\r\n height: number;\r\n };\r\n\r\n /**\r\n * Rendering context of the canvas which can be used to display/mirror xr content\r\n */\r\n public canvasContext: WebGLRenderingContext;\r\n\r\n /**\r\n * xr layer for the canvas\r\n */\r\n public xrLayer: Nullable<XRWebGLLayer> = null;\r\n\r\n private _xrLayerWrapper: Nullable<WebXRLayerWrapper> = null;\r\n\r\n /**\r\n * Observers registered here will be triggered when the xr layer was initialized\r\n */\r\n public onXRLayerInitObservable: Observable<XRWebGLLayer> = new Observable();\r\n\r\n private _canvasCompatiblePromise: Promise<void>;\r\n\r\n /**\r\n * Initializes the canvas to be added/removed upon entering/exiting xr\r\n * @param _xrSessionManager The XR Session manager\r\n * @param _options optional configuration for this canvas output. defaults will be used if not provided\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n private _options: WebXRManagedOutputCanvasOptions = WebXRManagedOutputCanvasOptions.GetDefaults()\r\n ) {\r\n this._engine = _xrSessionManager.scene.getEngine();\r\n this._engine.onDisposeObservable.addOnce(() => {\r\n this._engine = null;\r\n });\r\n\r\n if (!_options.canvasElement) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.style.cssText = this._options.newCanvasCssStyle || \"position:absolute; bottom:0px;right:0px;\";\r\n this._setManagedOutputCanvas(canvas);\r\n } else {\r\n this._setManagedOutputCanvas(_options.canvasElement);\r\n }\r\n\r\n _xrSessionManager.onXRSessionInit.add(() => {\r\n this._addCanvas();\r\n });\r\n\r\n _xrSessionManager.onXRSessionEnded.add(() => {\r\n this._removeCanvas();\r\n });\r\n\r\n this._makeCanvasCompatibleAsync();\r\n }\r\n\r\n /**\r\n * Disposes of the object\r\n */\r\n public dispose() {\r\n this._removeCanvas();\r\n this._setManagedOutputCanvas(null);\r\n }\r\n\r\n private _makeCanvasCompatibleAsync() {\r\n this._canvasCompatiblePromise = new Promise<void>((resolve) => {\r\n if (this.canvasContext && (this.canvasContext as any).makeXRCompatible) {\r\n (this.canvasContext as any).makeXRCompatible().then(() => {\r\n resolve();\r\n });\r\n } else {\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initializes a XRWebGLLayer to be used as the session's baseLayer.\r\n * @param xrSession xr session\r\n * @returns a promise that will resolve once the XR Layer has been created\r\n */\r\n public async initializeXRLayerAsync(xrSession: XRSession): Promise<XRWebGLLayer> {\r\n const createLayer = () => {\r\n this.xrLayer = new XRWebGLLayer(xrSession, this.canvasContext, this._options.canvasOptions);\r\n this._xrLayerWrapper = new WebXRWebGLLayerWrapper(this.xrLayer);\r\n this.onXRLayerInitObservable.notifyObservers(this.xrLayer);\r\n return this.xrLayer;\r\n };\r\n\r\n return this._canvasCompatiblePromise\r\n .then(\r\n // catch any error and continue. When using the emulator is throws this error for no apparent reason.\r\n () => {},\r\n () => {\r\n // log the error, continue nonetheless!\r\n Tools.Warn(\"Error executing makeXRCompatible. This does not mean that the session will work incorrectly.\");\r\n }\r\n )\r\n .then(() => {\r\n return createLayer();\r\n });\r\n }\r\n\r\n private _addCanvas() {\r\n if (this._canvas && this._engine && this._canvas !== this._engine.getRenderingCanvas()) {\r\n document.body.appendChild(this._canvas);\r\n }\r\n if (this.xrLayer) {\r\n this._setCanvasSize(true);\r\n } else {\r\n this.onXRLayerInitObservable.addOnce(() => {\r\n this._setCanvasSize(true);\r\n });\r\n }\r\n }\r\n\r\n private _removeCanvas() {\r\n if (this._canvas && this._engine && document.body.contains(this._canvas) && this._canvas !== this._engine.getRenderingCanvas()) {\r\n document.body.removeChild(this._canvas);\r\n }\r\n this._setCanvasSize(false);\r\n }\r\n\r\n private _setCanvasSize(init: boolean = true, xrLayer = this._xrLayerWrapper) {\r\n if (!this._canvas || !this._engine) {\r\n return;\r\n }\r\n if (init) {\r\n if (xrLayer) {\r\n if (this._canvas !== this._engine.getRenderingCanvas()) {\r\n this._canvas.style.width = xrLayer.getWidth() + \"px\";\r\n this._canvas.style.height = xrLayer.getHeight() + \"px\";\r\n } else {\r\n this._engine.setSize(xrLayer.getWidth(), xrLayer.getHeight());\r\n }\r\n }\r\n } else {\r\n if (this._originalCanvasSize) {\r\n if (this._canvas !== this._engine.getRenderingCanvas()) {\r\n this._canvas.style.width = this._originalCanvasSize.width + \"px\";\r\n this._canvas.style.height = this._originalCanvasSize.height + \"px\";\r\n } else {\r\n this._engine.setSize(this._originalCanvasSize.width, this._originalCanvasSize.height);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _setManagedOutputCanvas(canvas: Nullable<HTMLCanvasElement>) {\r\n this._removeCanvas();\r\n if (!canvas) {\r\n this._canvas = null;\r\n (this.canvasContext as any) = null;\r\n } else {\r\n this._originalCanvasSize = {\r\n width: canvas.offsetWidth,\r\n height: canvas.offsetHeight,\r\n };\r\n this._canvas = canvas;\r\n this.canvasContext = <any>this._canvas.getContext(\"webgl2\");\r\n if (!this.canvasContext) {\r\n this.canvasContext = <any>this._canvas.getContext(\"webgl\");\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRManagedOutputCanvas.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRManagedOutputCanvas.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport type { WebXRRenderTarget } from \"./webXRTypes\";\r\nimport type { WebXRSessionManager } from \"./webXRSessionManager\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport { Tools } from \"../Misc/tools\";\r\nimport type { WebXRLayerWrapper } from \"./webXRLayerWrapper\";\r\nimport { WebXRWebGLLayerWrapper } from \"./webXRWebGLLayer\";\r\n\r\n/**\r\n * Configuration object for WebXR output canvas\r\n */\r\nexport class WebXRManagedOutputCanvasOptions {\r\n /**\r\n * An optional canvas in case you wish to create it yourself and provide it here.\r\n * If not provided, a new canvas will be created\r\n */\r\n public canvasElement?: HTMLCanvasElement;\r\n /**\r\n * Options for this XR Layer output\r\n */\r\n public canvasOptions?: XRWebGLLayerInit;\r\n /**\r\n * CSS styling for a newly created canvas (if not provided)\r\n */\r\n public newCanvasCssStyle?: string;\r\n\r\n /**\r\n * Get the default values of the configuration object\r\n * @param engine defines the engine to use (can be null)\r\n * @returns default values of this configuration object\r\n */\r\n public static GetDefaults(engine?: AbstractEngine): WebXRManagedOutputCanvasOptions {\r\n const defaults = new WebXRManagedOutputCanvasOptions();\r\n defaults.canvasOptions = {\r\n antialias: true,\r\n depth: true,\r\n stencil: engine ? engine.isStencilEnable : true,\r\n alpha: true,\r\n framebufferScaleFactor: 1,\r\n };\r\n\r\n defaults.newCanvasCssStyle = \"position:absolute; bottom:0px;right:0px;z-index:10;width:90%;height:100%;background-color: #000000;\";\r\n\r\n return defaults;\r\n }\r\n}\r\n/**\r\n * Creates a canvas that is added/removed from the webpage when entering/exiting XR\r\n */\r\nexport class WebXRManagedOutputCanvas implements WebXRRenderTarget {\r\n private _canvas: Nullable<HTMLCanvasElement> = null;\r\n private _engine: Nullable<AbstractEngine> = null;\r\n private _originalCanvasSize: {\r\n width: number;\r\n height: number;\r\n };\r\n\r\n /**\r\n * Rendering context of the canvas which can be used to display/mirror xr content\r\n */\r\n public canvasContext: WebGL2RenderingContext;\r\n\r\n /**\r\n * xr layer for the canvas\r\n */\r\n public xrLayer: Nullable<XRWebGLLayer> = null;\r\n\r\n private _xrLayerWrapper: Nullable<WebXRLayerWrapper> = null;\r\n\r\n /**\r\n * Observers registered here will be triggered when the xr layer was initialized\r\n */\r\n public onXRLayerInitObservable: Observable<XRWebGLLayer> = new Observable();\r\n\r\n private _canvasCompatiblePromise: Promise<void>;\r\n\r\n /**\r\n * Initializes the canvas to be added/removed upon entering/exiting xr\r\n * @param _xrSessionManager The XR Session manager\r\n * @param _options optional configuration for this canvas output. defaults will be used if not provided\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n private _options: WebXRManagedOutputCanvasOptions = WebXRManagedOutputCanvasOptions.GetDefaults()\r\n ) {\r\n this._engine = _xrSessionManager.scene.getEngine();\r\n this._engine.onDisposeObservable.addOnce(() => {\r\n this._engine = null;\r\n });\r\n\r\n if (!_options.canvasElement) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.style.cssText = this._options.newCanvasCssStyle || \"position:absolute; bottom:0px;right:0px;\";\r\n this._setManagedOutputCanvas(canvas);\r\n } else {\r\n this._setManagedOutputCanvas(_options.canvasElement);\r\n }\r\n\r\n _xrSessionManager.onXRSessionInit.add(() => {\r\n this._addCanvas();\r\n });\r\n\r\n _xrSessionManager.onXRSessionEnded.add(() => {\r\n this._removeCanvas();\r\n });\r\n\r\n this._makeCanvasCompatibleAsync();\r\n }\r\n\r\n /**\r\n * Disposes of the object\r\n */\r\n public dispose() {\r\n this._removeCanvas();\r\n this._setManagedOutputCanvas(null);\r\n }\r\n\r\n private _makeCanvasCompatibleAsync() {\r\n this._canvasCompatiblePromise = new Promise<void>((resolve, reject) => {\r\n // stay safe - make sure the context has the function\r\n try {\r\n if (this.canvasContext && (this.canvasContext as any).makeXRCompatible) {\r\n this.canvasContext.makeXRCompatible().then(\r\n () => {\r\n resolve();\r\n },\r\n () => {\r\n // fail silently\r\n reject(\"makeXRCompatible failed\");\r\n }\r\n );\r\n } else {\r\n resolve();\r\n }\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Initializes a XRWebGLLayer to be used as the session's baseLayer.\r\n * @param xrSession xr session\r\n * @returns a promise that will resolve once the XR Layer has been created\r\n */\r\n public async initializeXRLayerAsync(xrSession: XRSession): Promise<XRWebGLLayer> {\r\n const createLayer = () => {\r\n this.xrLayer = new XRWebGLLayer(xrSession, this.canvasContext, this._options.canvasOptions);\r\n this._xrLayerWrapper = new WebXRWebGLLayerWrapper(this.xrLayer);\r\n this.onXRLayerInitObservable.notifyObservers(this.xrLayer);\r\n return this.xrLayer;\r\n };\r\n\r\n return this._canvasCompatiblePromise\r\n .then(\r\n // catch any error and continue. When using the emulator is throws this error for no apparent reason.\r\n () => {},\r\n () => {\r\n // log the error, continue nonetheless!\r\n Tools.Warn(\"Error executing makeXRCompatible. This does not mean that the session will work incorrectly.\");\r\n }\r\n )\r\n .then(() => {\r\n return createLayer();\r\n });\r\n }\r\n\r\n private _addCanvas() {\r\n if (this._canvas && this._engine && this._canvas !== this._engine.getRenderingCanvas()) {\r\n document.body.appendChild(this._canvas);\r\n }\r\n if (this.xrLayer) {\r\n this._setCanvasSize(true);\r\n } else {\r\n this.onXRLayerInitObservable.addOnce(() => {\r\n this._setCanvasSize(true);\r\n });\r\n }\r\n }\r\n\r\n private _removeCanvas() {\r\n if (this._canvas && this._engine && document.body.contains(this._canvas) && this._canvas !== this._engine.getRenderingCanvas()) {\r\n document.body.removeChild(this._canvas);\r\n }\r\n this._setCanvasSize(false);\r\n }\r\n\r\n private _setCanvasSize(init: boolean = true, xrLayer = this._xrLayerWrapper) {\r\n if (!this._canvas || !this._engine) {\r\n return;\r\n }\r\n if (init) {\r\n if (xrLayer) {\r\n if (this._canvas !== this._engine.getRenderingCanvas()) {\r\n this._canvas.style.width = xrLayer.getWidth() + \"px\";\r\n this._canvas.style.height = xrLayer.getHeight() + \"px\";\r\n } else {\r\n this._engine.setSize(xrLayer.getWidth(), xrLayer.getHeight());\r\n }\r\n }\r\n } else {\r\n if (this._originalCanvasSize) {\r\n if (this._canvas !== this._engine.getRenderingCanvas()) {\r\n this._canvas.style.width = this._originalCanvasSize.width + \"px\";\r\n this._canvas.style.height = this._originalCanvasSize.height + \"px\";\r\n } else {\r\n this._engine.setSize(this._originalCanvasSize.width, this._originalCanvasSize.height);\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _setManagedOutputCanvas(canvas: Nullable<HTMLCanvasElement>) {\r\n this._removeCanvas();\r\n if (!canvas) {\r\n this._canvas = null;\r\n (this.canvasContext as any) = null;\r\n } else {\r\n this._originalCanvasSize = {\r\n width: canvas.offsetWidth,\r\n height: canvas.offsetHeight,\r\n };\r\n this._canvas = canvas;\r\n this.canvasContext = <any>this._canvas.getContext(\"webgl2\");\r\n if (!this.canvasContext) {\r\n this.canvasContext = <any>this._canvas.getContext(\"webgl\");\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -1,5 +1,5 @@
1
1
  import { WebGLHardwareTexture } from "../Engines/WebGL/webGLHardwareTexture.js";
2
- import { InternalTexture, InternalTextureSource } from "../Materials/Textures/internalTexture.js";
2
+ import { InternalTexture } from "../Materials/Textures/internalTexture.js";
3
3
  import { MultiviewRenderTarget } from "../Materials/Textures/MultiviewRenderTarget.js";
4
4
  import { RenderTargetTexture } from "../Materials/Textures/renderTargetTexture.js";
5
5
  /**
@@ -14,7 +14,7 @@ export class WebXRLayerRenderTargetTextureProvider {
14
14
  this._engine = _scene.getEngine();
15
15
  }
16
16
  _createInternalTexture(textureSize, texture) {
17
- const internalTexture = new InternalTexture(this._engine, InternalTextureSource.Unknown, true);
17
+ const internalTexture = new InternalTexture(this._engine, 0 /* InternalTextureSource.Unknown */, true);
18
18
  internalTexture.width = textureSize.width;
19
19
  internalTexture.height = textureSize.height;
20
20
  internalTexture._hardwareTexture = new WebGLHardwareTexture(texture, this._engine._gl);
@@ -1 +1 @@
1
- {"version":3,"file":"webXRRenderTargetTextureProvider.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRRenderTargetTextureProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Engine } from \"../Engines/engine\";\r\nimport { WebGLHardwareTexture } from \"../Engines/WebGL/webGLHardwareTexture\";\r\nimport type { WebGLRenderTargetWrapper } from \"../Engines/WebGL/webGLRenderTargetWrapper\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { MultiviewRenderTarget } from \"../Materials/Textures/MultiviewRenderTarget\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { Viewport } from \"../Maths/math.viewport\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { WebXRLayerWrapper } from \"./webXRLayerWrapper\";\r\n\r\n/**\r\n * An interface for objects that provide render target textures for XR rendering.\r\n */\r\nexport interface IWebXRRenderTargetTextureProvider extends IDisposable {\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 trySetViewportForView(viewport: Viewport, view: XRView): boolean;\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 getRenderTargetTextureForEye(eye: XREye): Nullable<RenderTargetTexture>;\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 getRenderTargetTextureForView(view: XRView): Nullable<RenderTargetTexture>;\r\n}\r\n\r\n/**\r\n * Provides render target textures and other important rendering information for a given XRLayer.\r\n * @internal\r\n */\r\nexport abstract class WebXRLayerRenderTargetTextureProvider implements IWebXRRenderTargetTextureProvider {\r\n public abstract trySetViewportForView(viewport: Viewport, view: XRView): boolean;\r\n public abstract getRenderTargetTextureForEye(eye: XREye): Nullable<RenderTargetTexture>;\r\n public abstract getRenderTargetTextureForView(view: XRView): Nullable<RenderTargetTexture>;\r\n\r\n protected _renderTargetTextures = new Array<RenderTargetTexture>();\r\n protected _framebufferDimensions: Nullable<{ framebufferWidth: number; framebufferHeight: number }>;\r\n\r\n private _engine: Engine;\r\n\r\n constructor(\r\n private readonly _scene: Scene,\r\n public readonly layerWrapper: WebXRLayerWrapper\r\n ) {\r\n this._engine = _scene.getEngine() as Engine;\r\n }\r\n\r\n private _createInternalTexture(textureSize: { width: number; height: number }, texture: WebGLTexture): InternalTexture {\r\n const internalTexture = new InternalTexture(this._engine, InternalTextureSource.Unknown, true);\r\n internalTexture.width = textureSize.width;\r\n internalTexture.height = textureSize.height;\r\n internalTexture._hardwareTexture = new WebGLHardwareTexture(texture, this._engine._gl);\r\n internalTexture.isReady = true;\r\n return internalTexture;\r\n }\r\n\r\n protected _createRenderTargetTexture(\r\n width: number,\r\n height: number,\r\n framebuffer: Nullable<WebGLFramebuffer>,\r\n colorTexture?: WebGLTexture,\r\n depthStencilTexture?: WebGLTexture,\r\n multiview?: boolean\r\n ): RenderTargetTexture {\r\n if (!this._engine) {\r\n throw new Error(\"Engine is disposed\");\r\n }\r\n\r\n const textureSize = { width, height };\r\n\r\n // Create render target texture from the internal texture\r\n const renderTargetTexture = multiview ? new MultiviewRenderTarget(this._scene, textureSize) : new RenderTargetTexture(\"XR renderTargetTexture\", textureSize, this._scene);\r\n const renderTargetWrapper = renderTargetTexture.renderTarget as WebGLRenderTargetWrapper;\r\n renderTargetWrapper._samples = renderTargetTexture.samples;\r\n // Set the framebuffer, make sure it works in all scenarios - emulator, no layers and layers\r\n if (framebuffer || !colorTexture) {\r\n renderTargetWrapper._framebuffer = framebuffer;\r\n }\r\n\r\n // Create internal texture\r\n if (colorTexture) {\r\n if (multiview) {\r\n renderTargetWrapper._colorTextureArray = colorTexture;\r\n } else {\r\n const internalTexture = this._createInternalTexture(textureSize, colorTexture);\r\n renderTargetWrapper.setTexture(internalTexture, 0);\r\n renderTargetTexture._texture = internalTexture;\r\n }\r\n }\r\n\r\n if (depthStencilTexture) {\r\n if (multiview) {\r\n renderTargetWrapper._depthStencilTextureArray = depthStencilTexture;\r\n } else {\r\n renderTargetWrapper._depthStencilTexture = this._createInternalTexture(textureSize, depthStencilTexture);\r\n }\r\n }\r\n\r\n renderTargetTexture.disableRescaling();\r\n\r\n this._renderTargetTextures.push(renderTargetTexture);\r\n\r\n return renderTargetTexture;\r\n }\r\n\r\n protected _destroyRenderTargetTexture(renderTargetTexture: RenderTargetTexture) {\r\n this._renderTargetTextures.splice(this._renderTargetTextures.indexOf(renderTargetTexture), 1);\r\n renderTargetTexture.dispose();\r\n }\r\n\r\n public getFramebufferDimensions(): Nullable<{ framebufferWidth: number; framebufferHeight: number }> {\r\n return this._framebufferDimensions;\r\n }\r\n\r\n public dispose() {\r\n this._renderTargetTextures.forEach((rtt) => rtt.dispose());\r\n this._renderTargetTextures.length = 0;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRRenderTargetTextureProvider.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRRenderTargetTextureProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Engine } from \"../Engines/engine\";\r\nimport { WebGLHardwareTexture } from \"../Engines/WebGL/webGLHardwareTexture\";\r\nimport type { WebGLRenderTargetWrapper } from \"../Engines/WebGL/webGLRenderTargetWrapper\";\r\nimport { InternalTexture, InternalTextureSource } from \"../Materials/Textures/internalTexture\";\r\nimport { MultiviewRenderTarget } from \"../Materials/Textures/MultiviewRenderTarget\";\r\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture\";\r\nimport type { Viewport } from \"../Maths/math.viewport\";\r\nimport type { IDisposable, Scene } from \"../scene\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { WebXRLayerWrapper } from \"./webXRLayerWrapper\";\r\n\r\n/**\r\n * An interface for objects that provide render target textures for XR rendering.\r\n */\r\nexport interface IWebXRRenderTargetTextureProvider extends IDisposable {\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 trySetViewportForView(viewport: Viewport, view: XRView): boolean;\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 getRenderTargetTextureForEye(eye: XREye): Nullable<RenderTargetTexture>;\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 getRenderTargetTextureForView(view: XRView): Nullable<RenderTargetTexture>;\r\n}\r\n\r\n/**\r\n * Provides render target textures and other important rendering information for a given XRLayer.\r\n * @internal\r\n */\r\nexport abstract class WebXRLayerRenderTargetTextureProvider implements IWebXRRenderTargetTextureProvider {\r\n public abstract trySetViewportForView(viewport: Viewport, view: XRView): boolean;\r\n public abstract getRenderTargetTextureForEye(eye: XREye): Nullable<RenderTargetTexture>;\r\n public abstract getRenderTargetTextureForView(view: XRView): Nullable<RenderTargetTexture>;\r\n\r\n protected _renderTargetTextures = new Array<RenderTargetTexture>();\r\n protected _framebufferDimensions: Nullable<{ framebufferWidth: number; framebufferHeight: number }>;\r\n\r\n private _engine: Engine;\r\n\r\n constructor(\r\n private readonly _scene: Scene,\r\n public readonly layerWrapper: WebXRLayerWrapper\r\n ) {\r\n this._engine = _scene.getEngine() as Engine;\r\n }\r\n\r\n private _createInternalTexture(textureSize: { width: number; height: number }, texture: WebGLTexture): InternalTexture {\r\n const internalTexture = new InternalTexture(this._engine, InternalTextureSource.Unknown, true);\r\n internalTexture.width = textureSize.width;\r\n internalTexture.height = textureSize.height;\r\n internalTexture._hardwareTexture = new WebGLHardwareTexture(texture, this._engine._gl);\r\n internalTexture.isReady = true;\r\n return internalTexture;\r\n }\r\n\r\n protected _createRenderTargetTexture(\r\n width: number,\r\n height: number,\r\n framebuffer: Nullable<WebGLFramebuffer>,\r\n colorTexture?: WebGLTexture,\r\n depthStencilTexture?: WebGLTexture,\r\n multiview?: boolean\r\n ): RenderTargetTexture {\r\n if (!this._engine) {\r\n throw new Error(\"Engine is disposed\");\r\n }\r\n\r\n const textureSize = { width, height };\r\n\r\n // Create render target texture from the internal texture\r\n const renderTargetTexture = multiview ? new MultiviewRenderTarget(this._scene, textureSize) : new RenderTargetTexture(\"XR renderTargetTexture\", textureSize, this._scene);\r\n const renderTargetWrapper = renderTargetTexture.renderTarget as WebGLRenderTargetWrapper;\r\n renderTargetWrapper._samples = renderTargetTexture.samples;\r\n // Set the framebuffer, make sure it works in all scenarios - emulator, no layers and layers\r\n if (framebuffer || !colorTexture) {\r\n renderTargetWrapper._framebuffer = framebuffer;\r\n }\r\n\r\n // Create internal texture\r\n if (colorTexture) {\r\n if (multiview) {\r\n renderTargetWrapper._colorTextureArray = colorTexture;\r\n } else {\r\n const internalTexture = this._createInternalTexture(textureSize, colorTexture);\r\n renderTargetWrapper.setTexture(internalTexture, 0);\r\n renderTargetTexture._texture = internalTexture;\r\n }\r\n }\r\n\r\n if (depthStencilTexture) {\r\n if (multiview) {\r\n renderTargetWrapper._depthStencilTextureArray = depthStencilTexture;\r\n } else {\r\n renderTargetWrapper._depthStencilTexture = this._createInternalTexture(textureSize, depthStencilTexture);\r\n }\r\n }\r\n\r\n renderTargetTexture.disableRescaling();\r\n\r\n this._renderTargetTextures.push(renderTargetTexture);\r\n\r\n return renderTargetTexture;\r\n }\r\n\r\n protected _destroyRenderTargetTexture(renderTargetTexture: RenderTargetTexture) {\r\n this._renderTargetTextures.splice(this._renderTargetTextures.indexOf(renderTargetTexture), 1);\r\n renderTargetTexture.dispose();\r\n }\r\n\r\n public getFramebufferDimensions(): Nullable<{ framebufferWidth: number; framebufferHeight: number }> {\r\n return this._framebufferDimensions;\r\n }\r\n\r\n public dispose() {\r\n this._renderTargetTextures.forEach((rtt) => rtt.dispose());\r\n this._renderTargetTextures.length = 0;\r\n }\r\n}\r\n"]}
@@ -3,7 +3,7 @@ import type { IDisposable } from "../scene";
3
3
  /**
4
4
  * States of the webXR experience
5
5
  */
6
- export declare enum WebXRState {
6
+ export declare const enum WebXRState {
7
7
  /**
8
8
  * Transitioning to being in XR mode
9
9
  */
@@ -24,7 +24,7 @@ export declare enum WebXRState {
24
24
  /**
25
25
  * The state of the XR camera's tracking
26
26
  */
27
- export declare enum WebXRTrackingState {
27
+ export declare const enum WebXRTrackingState {
28
28
  /**
29
29
  * No transformation received, device is not being tracked
30
30
  */
@@ -1 +1 @@
1
- {"version":3,"file":"webXRTypes.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRTypes.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAN,IAAY,UAiBX;AAjBD,WAAY,UAAU;IAClB;;OAEG;IACH,yDAAW,CAAA;IACX;;OAEG;IACH,uDAAU,CAAA;IACV;;OAEG;IACH,6CAAK,CAAA;IACL;;OAEG;IACH,qDAAS,CAAA;AACb,CAAC,EAjBW,UAAU,KAAV,UAAU,QAiBrB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,kBAaX;AAbD,WAAY,kBAAkB;IAC1B;;OAEG;IACH,2EAAY,CAAA;IACZ;;OAEG;IACH,6EAAa,CAAA;IACb;;OAEG;IACH,mEAAQ,CAAA;AACZ,CAAC,EAbW,kBAAkB,KAAlB,kBAAkB,QAa7B","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { IDisposable } from \"../scene\";\r\n\r\n/**\r\n * States of the webXR experience\r\n */\r\nexport enum WebXRState {\r\n /**\r\n * Transitioning to being in XR mode\r\n */\r\n ENTERING_XR,\r\n /**\r\n * Transitioning to non XR mode\r\n */\r\n EXITING_XR,\r\n /**\r\n * In XR mode and presenting\r\n */\r\n IN_XR,\r\n /**\r\n * Not entered XR mode\r\n */\r\n NOT_IN_XR,\r\n}\r\n\r\n/**\r\n * The state of the XR camera's tracking\r\n */\r\nexport enum WebXRTrackingState {\r\n /**\r\n * No transformation received, device is not being tracked\r\n */\r\n NOT_TRACKING,\r\n /**\r\n * Tracking lost - using emulated position\r\n */\r\n TRACKING_LOST,\r\n /**\r\n * Transformation tracking works normally\r\n */\r\n TRACKING,\r\n}\r\n\r\n/**\r\n * Abstraction of the XR render target\r\n */\r\nexport interface WebXRRenderTarget extends IDisposable {\r\n /**\r\n * xrpresent context of the canvas which can be used to display/mirror xr content\r\n */\r\n canvasContext: WebGLRenderingContext;\r\n\r\n /**\r\n * xr layer for the canvas\r\n */\r\n xrLayer: Nullable<XRWebGLLayer>;\r\n\r\n /**\r\n * Initializes a XRWebGLLayer to be used as the session's baseLayer.\r\n * @param xrSession xr session\r\n * @returns a promise that will resolve once the XR Layer has been created\r\n */\r\n initializeXRLayerAsync(xrSession: XRSession): Promise<XRWebGLLayer>;\r\n}\r\n"]}
1
+ {"version":3,"file":"webXRTypes.js","sourceRoot":"","sources":["../../../../dev/core/src/XR/webXRTypes.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAN,IAAkB,UAiBjB;AAjBD,WAAkB,UAAU;IACxB;;OAEG;IACH,yDAAW,CAAA;IACX;;OAEG;IACH,uDAAU,CAAA;IACV;;OAEG;IACH,6CAAK,CAAA;IACL;;OAEG;IACH,qDAAS,CAAA;AACb,CAAC,EAjBiB,UAAU,KAAV,UAAU,QAiB3B;AAED;;GAEG;AACH,MAAM,CAAN,IAAkB,kBAajB;AAbD,WAAkB,kBAAkB;IAChC;;OAEG;IACH,2EAAY,CAAA;IACZ;;OAEG;IACH,6EAAa,CAAA;IACb;;OAEG;IACH,mEAAQ,CAAA;AACZ,CAAC,EAbiB,kBAAkB,KAAlB,kBAAkB,QAanC","sourcesContent":["import type { Nullable } from \"../types\";\r\nimport type { IDisposable } from \"../scene\";\r\n\r\n/**\r\n * States of the webXR experience\r\n */\r\nexport const enum WebXRState {\r\n /**\r\n * Transitioning to being in XR mode\r\n */\r\n ENTERING_XR,\r\n /**\r\n * Transitioning to non XR mode\r\n */\r\n EXITING_XR,\r\n /**\r\n * In XR mode and presenting\r\n */\r\n IN_XR,\r\n /**\r\n * Not entered XR mode\r\n */\r\n NOT_IN_XR,\r\n}\r\n\r\n/**\r\n * The state of the XR camera's tracking\r\n */\r\nexport const enum WebXRTrackingState {\r\n /**\r\n * No transformation received, device is not being tracked\r\n */\r\n NOT_TRACKING,\r\n /**\r\n * Tracking lost - using emulated position\r\n */\r\n TRACKING_LOST,\r\n /**\r\n * Transformation tracking works normally\r\n */\r\n TRACKING,\r\n}\r\n\r\n/**\r\n * Abstraction of the XR render target\r\n */\r\nexport interface WebXRRenderTarget extends IDisposable {\r\n /**\r\n * xrpresent context of the canvas which can be used to display/mirror xr content\r\n */\r\n canvasContext: WebGLRenderingContext;\r\n\r\n /**\r\n * xr layer for the canvas\r\n */\r\n xrLayer: Nullable<XRWebGLLayer>;\r\n\r\n /**\r\n * Initializes a XRWebGLLayer to be used as the session's baseLayer.\r\n * @param xrSession xr session\r\n * @returns a promise that will resolve once the XR Layer has been created\r\n */\r\n initializeXRLayerAsync(xrSession: XRSession): Promise<XRWebGLLayer>;\r\n}\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@babylonjs/core",
3
- "version": "7.11.4",
3
+ "version": "7.13.0",
4
4
  "main": "index.js",
5
5
  "module": "index.js",
6
6
  "types": "index.d.ts",
package/scene.d.ts CHANGED
@@ -86,7 +86,7 @@ export interface SceneOptions {
86
86
  /**
87
87
  * Define how the scene should favor performance over ease of use
88
88
  */
89
- export declare enum ScenePerformancePriority {
89
+ export declare const enum ScenePerformancePriority {
90
90
  /** Default mode. No change. Performance will be treated as less important than backward compatibility */
91
91
  BackwardCompatible = 0,
92
92
  /** Some performance options will be turned on trying to strike a balance between perf and ease of use */
package/scene.js CHANGED
@@ -105,19 +105,19 @@ export class Scene extends AbstractScene {
105
105
  }
106
106
  this._performancePriority = value;
107
107
  switch (value) {
108
- case ScenePerformancePriority.BackwardCompatible:
108
+ case 0 /* ScenePerformancePriority.BackwardCompatible */:
109
109
  this.skipFrustumClipping = false;
110
110
  this._renderingManager.maintainStateBetweenFrames = false;
111
111
  this.skipPointerMovePicking = false;
112
112
  this.autoClear = true;
113
113
  break;
114
- case ScenePerformancePriority.Intermediate:
114
+ case 1 /* ScenePerformancePriority.Intermediate */:
115
115
  this.skipFrustumClipping = false;
116
116
  this._renderingManager.maintainStateBetweenFrames = false;
117
117
  this.skipPointerMovePicking = true;
118
118
  this.autoClear = false;
119
119
  break;
120
- case ScenePerformancePriority.Aggressive:
120
+ case 2 /* ScenePerformancePriority.Aggressive */:
121
121
  this.skipFrustumClipping = true;
122
122
  this._renderingManager.maintainStateBetweenFrames = true;
123
123
  this.skipPointerMovePicking = true;
@@ -633,7 +633,7 @@ export class Scene extends AbstractScene {
633
633
  * this is easier to reference from here than from all the materials.
634
634
  */
635
635
  this.environmentIntensity = 1;
636
- this._performancePriority = ScenePerformancePriority.BackwardCompatible;
636
+ this._performancePriority = 0 /* ScenePerformancePriority.BackwardCompatible */;
637
637
  /**
638
638
  * Observable triggered when the performance priority is changed
639
639
  */