@onerjs/core 8.55.9 → 8.56.2

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 (265) hide show
  1. package/AudioV2/webAudio/webAudioEngine.d.ts +7 -0
  2. package/AudioV2/webAudio/webAudioEngine.js +6 -5
  3. package/AudioV2/webAudio/webAudioEngine.js.map +1 -1
  4. package/Cameras/arcRotateCamera.pure.js +24 -0
  5. package/Cameras/arcRotateCamera.pure.js.map +1 -1
  6. package/Culling/Helper/boundingInfoHelper.js +8 -4
  7. package/Culling/Helper/boundingInfoHelper.js.map +1 -1
  8. package/Engines/AbstractEngine/abstractEngine.textureLoaders.d.ts +5 -1
  9. package/Engines/AbstractEngine/abstractEngine.textureLoaders.js +7 -3
  10. package/Engines/AbstractEngine/abstractEngine.textureLoaders.js.map +1 -1
  11. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.d.ts +6 -0
  12. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js +16 -0
  13. package/Engines/AbstractEngine/abstractEngine.textureLoaders.pure.js.map +1 -0
  14. package/Engines/AbstractEngine/pure.d.ts +1 -0
  15. package/Engines/AbstractEngine/pure.js +1 -0
  16. package/Engines/AbstractEngine/pure.js.map +1 -1
  17. package/Engines/IDrawContext.d.ts +2 -0
  18. package/Engines/IDrawContext.js.map +1 -1
  19. package/Engines/WebGPU/webgpuDrawContext.d.ts +8 -0
  20. package/Engines/WebGPU/webgpuDrawContext.js +15 -0
  21. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  22. package/Engines/abstractEngine.pure.js +2 -2
  23. package/Engines/abstractEngine.pure.js.map +1 -1
  24. package/Engines/constants.d.ts +5 -0
  25. package/Engines/constants.js +5 -0
  26. package/Engines/constants.js.map +1 -1
  27. package/Engines/engine.d.ts +11 -3
  28. package/Engines/webgpuEngine.d.ts +1 -0
  29. package/Engines/webgpuEngine.js +1 -0
  30. package/Engines/webgpuEngine.js.map +1 -1
  31. package/Engines/webgpuEngine.pure.d.ts +10 -0
  32. package/Engines/webgpuEngine.pure.js +15 -1
  33. package/Engines/webgpuEngine.pure.js.map +1 -1
  34. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.d.ts +4 -0
  35. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js +12 -0
  36. package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.pure.js.map +1 -1
  37. package/FrameGraph/Node/Blocks/inputBlock.pure.js +2 -1
  38. package/FrameGraph/Node/Blocks/inputBlock.pure.js.map +1 -1
  39. package/FrameGraph/Node/Types/nodeRenderGraphTypes.d.ts +2 -0
  40. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js +2 -0
  41. package/FrameGraph/Node/Types/nodeRenderGraphTypes.js.map +1 -1
  42. package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +21 -0
  43. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +45 -0
  44. package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
  45. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js +2 -5
  46. package/FrameGraph/Tasks/Rendering/iblShadowsRendererTask.pure.js.map +1 -1
  47. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.d.ts +1 -0
  48. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js +18 -3
  49. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.pure.js.map +1 -1
  50. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js +2 -0
  51. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.pure.js.map +1 -1
  52. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +5 -21
  53. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
  54. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js +1 -0
  55. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.pure.js.map +1 -1
  56. package/Materials/Node/Blocks/powBlock.pure.js +2 -1
  57. package/Materials/Node/Blocks/powBlock.pure.js.map +1 -1
  58. package/Materials/Node/Blocks/triPlanarBlock.pure.js +14 -12
  59. package/Materials/Node/Blocks/triPlanarBlock.pure.js.map +1 -1
  60. package/Materials/Node/nodeMaterial.pure.d.ts +11 -0
  61. package/Materials/Node/nodeMaterial.pure.js +11 -0
  62. package/Materials/Node/nodeMaterial.pure.js.map +1 -1
  63. package/Materials/Node/nodeMaterialBuildState.d.ts +4 -3
  64. package/Materials/Node/nodeMaterialBuildState.js +7 -1
  65. package/Materials/Node/nodeMaterialBuildState.js.map +1 -1
  66. package/Materials/PBR/openpbrMaterial.pure.d.ts +4 -0
  67. package/Materials/PBR/pbrBaseMaterial.pure.d.ts +4 -0
  68. package/Materials/Textures/index.d.ts +1 -0
  69. package/Materials/Textures/index.js +1 -0
  70. package/Materials/Textures/index.js.map +1 -1
  71. package/Materials/Textures/textureProcessor.d.ts +29 -6
  72. package/Materials/Textures/textureProcessor.js +22 -16
  73. package/Materials/Textures/textureProcessor.js.map +1 -1
  74. package/Materials/drawWrapper.js +3 -0
  75. package/Materials/drawWrapper.js.map +1 -1
  76. package/Materials/imageProcessingConfiguration.defines.d.ts +3 -0
  77. package/Materials/imageProcessingConfiguration.defines.js +2 -0
  78. package/Materials/imageProcessingConfiguration.defines.js.map +1 -1
  79. package/Materials/imageProcessingConfiguration.functions.js +3 -0
  80. package/Materials/imageProcessingConfiguration.functions.js.map +1 -1
  81. package/Materials/imageProcessingConfiguration.pure.d.ts +58 -0
  82. package/Materials/imageProcessingConfiguration.pure.js +123 -2
  83. package/Materials/imageProcessingConfiguration.pure.js.map +1 -1
  84. package/Materials/materialHelper.geometryrendering.d.ts +19 -0
  85. package/Materials/materialHelper.geometryrendering.js +29 -1
  86. package/Materials/materialHelper.geometryrendering.js.map +1 -1
  87. package/Materials/prepass.defines.d.ts +3 -0
  88. package/Materials/prepass.defines.js +3 -0
  89. package/Materials/prepass.defines.js.map +1 -1
  90. package/Materials/standardMaterial.pure.d.ts +4 -0
  91. package/Materials/uniformBuffer.d.ts +29 -0
  92. package/Materials/uniformBuffer.js +146 -0
  93. package/Materials/uniformBuffer.js.map +1 -1
  94. package/Maths/colorTemperature.functions.d.ts +29 -0
  95. package/Maths/colorTemperature.functions.js +196 -0
  96. package/Maths/colorTemperature.functions.js.map +1 -0
  97. package/Maths/index.d.ts +1 -0
  98. package/Maths/index.js +1 -0
  99. package/Maths/index.js.map +1 -1
  100. package/Maths/math.vector.pure.d.ts +1 -5
  101. package/Maths/math.vector.pure.js.map +1 -1
  102. package/Maths/pure.d.ts +1 -0
  103. package/Maths/pure.js +1 -0
  104. package/Maths/pure.js.map +1 -1
  105. package/Misc/filesInput.d.ts +15 -0
  106. package/Misc/filesInput.js +156 -74
  107. package/Misc/filesInput.js.map +1 -1
  108. package/Misc/observable.pure.js +1 -3
  109. package/Misc/observable.pure.js.map +1 -1
  110. package/Misc/tools.pure.js +1 -1
  111. package/Misc/tools.pure.js.map +1 -1
  112. package/PostProcesses/imageProcessingPostProcess.d.ts +41 -1
  113. package/PostProcesses/imageProcessingPostProcess.js +41 -1
  114. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  115. package/PostProcesses/thinImageProcessingPostProcess.d.ts +50 -0
  116. package/PostProcesses/thinImageProcessingPostProcess.js +65 -0
  117. package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
  118. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.d.ts +12 -0
  119. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js +22 -0
  120. package/Rendering/IBLShadows/iblShadowsMaterialCompatibility.pure.js.map +1 -0
  121. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.d.ts +1 -0
  122. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js +39 -0
  123. package/Rendering/IBLShadows/iblShadowsPluginMaterial.pure.js.map +1 -1
  124. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +2 -4
  125. package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
  126. package/Rendering/IBLShadows/pure.d.ts +1 -0
  127. package/Rendering/IBLShadows/pure.js +1 -0
  128. package/Rendering/IBLShadows/pure.js.map +1 -1
  129. package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +11 -0
  130. package/Rendering/fluidRenderer/fluidRenderingObject.js +36 -14
  131. package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
  132. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +5 -0
  133. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +16 -3
  134. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  135. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.d.ts +5 -0
  136. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js +12 -0
  137. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  138. package/Rendering/geometryBufferRenderer.pure.d.ts +30 -0
  139. package/Rendering/geometryBufferRenderer.pure.js +84 -0
  140. package/Rendering/geometryBufferRenderer.pure.js.map +1 -1
  141. package/Rendering/iblCdfGenerator.js +10 -1
  142. package/Rendering/iblCdfGenerator.js.map +1 -1
  143. package/Shaders/ShadersInclude/hdrFilteringFunctions.js +1 -1
  144. package/Shaders/ShadersInclude/hdrFilteringFunctions.js.map +1 -1
  145. package/Shaders/ShadersInclude/helperFunctions.js +2 -2
  146. package/Shaders/ShadersInclude/helperFunctions.js.map +1 -1
  147. package/Shaders/ShadersInclude/imageProcessingDeclaration.js +3 -0
  148. package/Shaders/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  149. package/Shaders/ShadersInclude/imageProcessingFunctions.js +3 -0
  150. package/Shaders/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  151. package/Shaders/ShadersInclude/objectIdFunctions.d.ts +5 -0
  152. package/Shaders/ShadersInclude/objectIdFunctions.js +22 -0
  153. package/Shaders/ShadersInclude/objectIdFunctions.js.map +1 -0
  154. package/Shaders/ShadersInclude/openpbrBlockPrePass.js +3 -0
  155. package/Shaders/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  156. package/Shaders/ShadersInclude/openpbrDirectLighting.js +34 -4
  157. package/Shaders/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  158. package/Shaders/ShadersInclude/openpbrIblFunctions.js +8 -2
  159. package/Shaders/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  160. package/Shaders/ShadersInclude/pbrBlockPrePass.js +3 -0
  161. package/Shaders/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  162. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
  163. package/Shaders/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  164. package/Shaders/ShadersInclude/prePassDeclaration.d.ts +1 -0
  165. package/Shaders/ShadersInclude/prePassDeclaration.js +5 -0
  166. package/Shaders/ShadersInclude/prePassDeclaration.js.map +1 -1
  167. package/Shaders/default.fragment.js +5 -1
  168. package/Shaders/default.fragment.js.map +1 -1
  169. package/Shaders/fluidRenderingParticleDepth.vertex.js +7 -1
  170. package/Shaders/fluidRenderingParticleDepth.vertex.js.map +1 -1
  171. package/Shaders/fluidRenderingParticleDiffuse.vertex.js +7 -1
  172. package/Shaders/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  173. package/Shaders/fluidRenderingParticleThickness.vertex.js +7 -1
  174. package/Shaders/fluidRenderingParticleThickness.vertex.js.map +1 -1
  175. package/Shaders/geometry.fragment.js +9 -1
  176. package/Shaders/geometry.fragment.js.map +1 -1
  177. package/Shaders/openpbr.fragment.js +2 -1
  178. package/Shaders/openpbr.fragment.js.map +1 -1
  179. package/Shaders/pbr.fragment.js +2 -1
  180. package/Shaders/pbr.fragment.js.map +1 -1
  181. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js +3 -0
  182. package/ShadersWGSL/ShadersInclude/imageProcessingDeclaration.js.map +1 -1
  183. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js +3 -0
  184. package/ShadersWGSL/ShadersInclude/imageProcessingFunctions.js.map +1 -1
  185. package/ShadersWGSL/ShadersInclude/objectIdFunctions.d.ts +5 -0
  186. package/ShadersWGSL/ShadersInclude/objectIdFunctions.js +22 -0
  187. package/ShadersWGSL/ShadersInclude/objectIdFunctions.js.map +1 -0
  188. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js +3 -0
  189. package/ShadersWGSL/ShadersInclude/openpbrBlockPrePass.js.map +1 -1
  190. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js +35 -5
  191. package/ShadersWGSL/ShadersInclude/openpbrDirectLighting.js.map +1 -1
  192. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js +1 -1
  193. package/ShadersWGSL/ShadersInclude/openpbrDirectLightingInit.js.map +1 -1
  194. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js +8 -2
  195. package/ShadersWGSL/ShadersInclude/openpbrIblFunctions.js.map +1 -1
  196. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js +3 -0
  197. package/ShadersWGSL/ShadersInclude/pbrBlockPrePass.js.map +1 -1
  198. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js +5 -0
  199. package/ShadersWGSL/ShadersInclude/pbrDirectLightingFunctions.js.map +1 -1
  200. package/ShadersWGSL/ShadersInclude/prePassDeclaration.d.ts +1 -0
  201. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js +5 -0
  202. package/ShadersWGSL/ShadersInclude/prePassDeclaration.js.map +1 -1
  203. package/ShadersWGSL/default.fragment.js +5 -1
  204. package/ShadersWGSL/default.fragment.js.map +1 -1
  205. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js +16 -4
  206. package/ShadersWGSL/fluidRenderingParticleDepth.vertex.js.map +1 -1
  207. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js +15 -3
  208. package/ShadersWGSL/fluidRenderingParticleDiffuse.vertex.js.map +1 -1
  209. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js +15 -3
  210. package/ShadersWGSL/fluidRenderingParticleThickness.vertex.js.map +1 -1
  211. package/ShadersWGSL/geometry.fragment.js +9 -1
  212. package/ShadersWGSL/geometry.fragment.js.map +1 -1
  213. package/ShadersWGSL/openpbr.fragment.js +2 -1
  214. package/ShadersWGSL/openpbr.fragment.js.map +1 -1
  215. package/ShadersWGSL/pbr.fragment.js +2 -1
  216. package/ShadersWGSL/pbr.fragment.js.map +1 -1
  217. package/XR/features/Layers/WebXRCompositionLayer.d.ts +52 -0
  218. package/XR/features/Layers/WebXRCompositionLayer.js +80 -0
  219. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  220. package/XR/features/WebXRControllerPointerSelection.pure.js +2 -1
  221. package/XR/features/WebXRControllerPointerSelection.pure.js.map +1 -1
  222. package/XR/features/WebXRControllerTeleportation.pure.js +2 -1
  223. package/XR/features/WebXRControllerTeleportation.pure.js.map +1 -1
  224. package/XR/features/WebXRDepthSensing.pure.d.ts +21 -0
  225. package/XR/features/WebXRDepthSensing.pure.js +42 -0
  226. package/XR/features/WebXRDepthSensing.pure.js.map +1 -1
  227. package/XR/features/WebXRHandTracking.pure.js +2 -0
  228. package/XR/features/WebXRHandTracking.pure.js.map +1 -1
  229. package/XR/features/WebXRLayers.pure.d.ts +12 -0
  230. package/XR/features/WebXRLayers.pure.js +31 -1
  231. package/XR/features/WebXRLayers.pure.js.map +1 -1
  232. package/XR/features/WebXRTrackedSources.d.ts +5 -0
  233. package/XR/features/WebXRTrackedSources.js +8 -0
  234. package/XR/features/WebXRTrackedSources.js.map +1 -0
  235. package/XR/features/WebXRTrackedSources.pure.d.ts +70 -0
  236. package/XR/features/WebXRTrackedSources.pure.js +153 -0
  237. package/XR/features/WebXRTrackedSources.pure.js.map +1 -0
  238. package/XR/features/index.d.ts +1 -0
  239. package/XR/features/index.js +1 -0
  240. package/XR/features/index.js.map +1 -1
  241. package/XR/features/pure.d.ts +1 -0
  242. package/XR/features/pure.js +1 -0
  243. package/XR/features/pure.js.map +1 -1
  244. package/XR/motionController/webXRAbstractMotionController.d.ts +53 -1
  245. package/XR/motionController/webXRAbstractMotionController.js +61 -0
  246. package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
  247. package/XR/webXRDefaultExperience.js +8 -4
  248. package/XR/webXRDefaultExperience.js.map +1 -1
  249. package/XR/webXRExperienceHelper.js +86 -44
  250. package/XR/webXRExperienceHelper.js.map +1 -1
  251. package/XR/webXRFeaturesManager.d.ts +9 -0
  252. package/XR/webXRFeaturesManager.js +4 -0
  253. package/XR/webXRFeaturesManager.js.map +1 -1
  254. package/XR/webXRGraphicsBinding.d.ts +29 -0
  255. package/XR/webXRGraphicsBinding.js +40 -0
  256. package/XR/webXRGraphicsBinding.js.map +1 -1
  257. package/XR/webXRInputSource.js +1 -1
  258. package/XR/webXRInputSource.js.map +1 -1
  259. package/XR/webXRLayerWrapper.d.ts +7 -5
  260. package/XR/webXRLayerWrapper.js +10 -7
  261. package/XR/webXRLayerWrapper.js.map +1 -1
  262. package/XR/webXRSessionManager.d.ts +45 -0
  263. package/XR/webXRSessionManager.js +174 -29
  264. package/XR/webXRSessionManager.js.map +1 -1
  265. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"WebXRDepthSensing.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRDepthSensing.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { RawTexture } from \"../../Materials/Textures/rawTexture\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport { type WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Texture } from \"../../Materials/Textures/texture.pure\";\r\nimport { Observable } from \"../../Misc/observable.pure\";\r\nimport { type Observer } from \"../../Misc/observable\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { WebGLHardwareTexture } from \"../../Engines/WebGL/webGLHardwareTexture\";\r\nimport { type InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { type ThinEngine } from \"../../Engines/thinEngine.pure\";\r\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase.pure\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { type Material } from \"core/Materials/material.pure\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { type UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial.pure\";\r\nimport { RegisterMaterialPlugin, UnregisterMaterialPlugin } from \"core/Materials/materialPluginManager.pure\";\r\nimport { type Camera } from \"core/Cameras/camera.pure\";\r\nimport { Matrix } from \"core/Maths/math.vector.pure\";\r\nimport { type Engine } from \"core/Engines/engine.pure\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { WebXRGraphicsBindingType } from \"../webXRGraphicsBinding\";\r\n\r\nexport type WebXRDepthUsage = \"cpu\" | \"gpu\";\r\nexport type WebXRDepthDataFormat = \"ushort\" | \"float\" | \"luminance-alpha\";\r\n\r\n/**\r\n * Options for Depth Sensing feature\r\n */\r\nexport interface IWebXRDepthSensingOptions {\r\n /**\r\n * The desired depth sensing usage for the session\r\n */\r\n usagePreference: WebXRDepthUsage[];\r\n /**\r\n * The desired depth sensing data format for the session\r\n */\r\n dataFormatPreference: WebXRDepthDataFormat[];\r\n\r\n /**\r\n * Depth sensing will be enabled on all materials per default, if the GPU variant is enabled.\r\n * If you just want to use the texture or the CPU variant instead set this to true.\r\n */\r\n disableDepthSensingOnMaterials?: boolean;\r\n\r\n /**\r\n * If set to true the occluded pixels will not be discarded but the pixel color will be changed based on the occlusion factor\r\n * Enabling this will lead to worse performance but slightly better outcome.\r\n * It is possible we will change this in the future to look even better.\r\n */\r\n useToleranceFactorForDepthSensing?: boolean;\r\n\r\n /**\r\n * If set to true the texture will be set to be used for visualization.\r\n * In this case it will probably NOT work correctly on the materials.\r\n * So be aware that, for the time being, you can only use one or the other.\r\n */\r\n prepareTextureForVisualization?: boolean;\r\n}\r\n\r\ntype GetDepthInMetersType = (x: number, y: number) => number;\r\n\r\nclass DepthSensingMaterialDefines extends MaterialDefines {\r\n /**\r\n * Is the feature enabled\r\n */\r\n DEPTH_SENSING = false;\r\n\r\n /**\r\n * Is the texture type provided as a texture array\r\n */\r\n DEPTH_SENSING_TEXTURE_ARRAY = false;\r\n\r\n /**\r\n * Is the texture type provided as Alpha-Luminance (unpacked differently on the shader)\r\n */\r\n DEPTH_SENSING_TEXTURE_AL = false;\r\n\r\n /**\r\n * Should the shader discard the pixel if the depth is less than the asset depth\r\n * Will lead to better performance. the other variant is to change the color based on a tolerance factor\r\n */\r\n DEPTH_SENSING_DISCARD = true;\r\n}\r\n\r\nlet IsPluginEnabled = false;\r\nlet DepthTexture: Nullable<RawTexture> = null;\r\nlet DepthTextureRight: Nullable<RawTexture> = null;\r\nlet AlphaLuminanceTexture = false;\r\nconst ScreenSize = { width: 512, height: 512 };\r\nconst ShaderViewport = { x: 0, y: 0, width: 1, height: 1 };\r\nlet GlobalRawValueToMeters = 1;\r\nlet GlobalRawValueToMetersRight = 1;\r\nlet GlobalDepthAvailableLeft = 0;\r\nlet GlobalDepthAvailableRight = 0;\r\nlet GlobalWorldScale = 1;\r\nlet ViewIndex = 0;\r\nlet EnableDiscard = true;\r\nconst UvTransform = /*#__PURE__*/ Matrix.Identity();\r\nconst UvTransformRight = /*#__PURE__*/ Matrix.Identity();\r\nconst RightView = /*#__PURE__*/ Matrix.Identity();\r\nconst ManagedMaterialPlugins: WebXRDepthSensingMaterialPlugin[] = [];\r\nconst WebGPUGPUDepthWarning =\r\n \"WebXR Depth Sensing is unavailable with WebGPU XR when the session negotiates gpu-optimized depth because XRGPUBinding has no environment-depth equivalent; request cpu-optimized depth to use the feature.\";\r\n\r\ninterface IWebXRCPUDepthViewState {\r\n available: boolean;\r\n height: number;\r\n rawValueToMeters: number;\r\n texture: Nullable<RawTexture>;\r\n uvTransform: Matrix;\r\n visualizationDepthBuffer: Nullable<Float32Array>;\r\n width: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nclass WebXRDepthSensingMaterialPlugin extends MaterialPluginBase {\r\n private _varColorName: string;\r\n private _isEnabled = false;\r\n\r\n /** @internal */\r\n protected _markAllDefinesAsDirty(): void {\r\n this._enable(this._isEnabled);\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets whether the mesh debug plugin is enabled in the material.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the mesh debug plugin is enabled in the material.\r\n * @param value enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n this._isEnabled = value;\r\n this._markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a given shader language.\r\n * @param shaderLanguage The shader language to use.\r\n * @returns true if the plugin is compatible with the shader language\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n case ShaderLanguage.WGSL:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n constructor(material: Material) {\r\n super(material, \"DepthSensing\", 222, new DepthSensingMaterialDefines());\r\n this._varColorName = material instanceof PBRBaseMaterial ? \"finalColor\" : \"color\";\r\n this.doNotSerialize = true;\r\n ManagedMaterialPlugins.push(this);\r\n }\r\n\r\n /**\r\n * Prepare the defines\r\n * @param defines the defines\r\n */\r\n public override prepareDefines(defines: DepthSensingMaterialDefines) {\r\n defines.DEPTH_SENSING = !!DepthTexture && IsPluginEnabled;\r\n defines.DEPTH_SENSING_TEXTURE_ARRAY = DepthTexture?.is2DArray ?? false;\r\n defines.DEPTH_SENSING_TEXTURE_AL = AlphaLuminanceTexture;\r\n defines.DEPTH_SENSING_DISCARD = EnableDiscard;\r\n }\r\n\r\n public override getUniforms(shaderLanguage = ShaderLanguage.GLSL) {\r\n const ubo = [\r\n { name: \"ds_invScreenSize\", size: 2, type: \"vec2\" },\r\n { name: \"ds_rawValueToMeters\", size: 1, type: \"float\" },\r\n { name: \"ds_viewIndex\", size: 1, type: \"float\" },\r\n { name: \"ds_shaderViewport\", size: 4, type: \"vec4\" },\r\n { name: \"ds_uvTransform\", size: 16, type: \"mat4\" },\r\n ];\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n ubo.push(\r\n { name: \"ds_rawValueToMetersRight\", size: 1, type: \"float\" },\r\n { name: \"ds_depthAvailableLeft\", size: 1, type: \"float\" },\r\n { name: \"ds_depthAvailableRight\", size: 1, type: \"float\" },\r\n { name: \"ds_worldScale\", size: 1, type: \"float\" },\r\n { name: \"ds_viewDepthSign\", size: 1, type: \"float\" },\r\n { name: \"ds_uvTransformRight\", size: 16, type: \"mat4\" },\r\n { name: \"ds_viewRight\", size: 16, type: \"mat4\" }\r\n );\r\n }\r\n return {\r\n // first, define the UBO with the correct type and size.\r\n ubo,\r\n // now, on the fragment shader, add the uniform itself in case uniform buffers are not supported by the engine\r\n fragment:\r\n shaderLanguage === ShaderLanguage.GLSL\r\n ? `#ifdef DEPTH_SENSING\r\n uniform vec2 ds_invScreenSize;\r\n uniform float ds_rawValueToMeters;\r\n uniform float ds_viewIndex;\r\n uniform vec4 ds_shaderViewport;\r\n uniform mat4 ds_uvTransform;\r\n #endif\r\n `\r\n : \"\",\r\n };\r\n }\r\n\r\n public override getSamplers(samplers: string[]): void {\r\n samplers.push(\"ds_depthSampler\");\r\n samplers.push(\"ds_depthSamplerRight\");\r\n }\r\n\r\n public override bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (IsPluginEnabled && DepthTexture) {\r\n const isWGSL = this._material.shaderLanguage === ShaderLanguage.WGSL;\r\n uniformBuffer.updateFloat2(\"ds_invScreenSize\", 1 / ScreenSize.width, 1 / ScreenSize.height);\r\n uniformBuffer.updateFloat(\"ds_rawValueToMeters\", GlobalRawValueToMeters);\r\n uniformBuffer.updateFloat(\"ds_viewIndex\", ViewIndex);\r\n uniformBuffer.updateFloat4(\"ds_shaderViewport\", ShaderViewport.x, ShaderViewport.y, ShaderViewport.width, ShaderViewport.height);\r\n uniformBuffer.setTexture(\"ds_depthSampler\", DepthTexture);\r\n uniformBuffer.updateMatrix(\"ds_uvTransform\", UvTransform);\r\n if (isWGSL) {\r\n uniformBuffer.updateFloat(\"ds_rawValueToMetersRight\", GlobalRawValueToMetersRight);\r\n uniformBuffer.updateFloat(\"ds_depthAvailableLeft\", GlobalDepthAvailableLeft);\r\n uniformBuffer.updateFloat(\"ds_depthAvailableRight\", GlobalDepthAvailableRight);\r\n uniformBuffer.updateFloat(\"ds_worldScale\", GlobalWorldScale);\r\n uniformBuffer.updateFloat(\"ds_viewDepthSign\", this._material.getScene().useRightHandedSystem ? -1 : 1);\r\n uniformBuffer.setTexture(\"ds_depthSamplerRight\", DepthTextureRight);\r\n uniformBuffer.updateMatrix(\"ds_uvTransformRight\", UvTransformRight);\r\n uniformBuffer.updateMatrix(\"ds_viewRight\", RightView);\r\n }\r\n }\r\n }\r\n\r\n public override getClassName() {\r\n return \"DepthSensingMaterialPlugin\";\r\n }\r\n\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return shaderType === \"vertex\"\r\n ? {\r\n CUSTOM_VERTEX_MAIN_BEGIN: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n vertexOutputs.ds_viewIndexMultiview = f32(gl_ViewID_OVR);\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n varying ds_viewIndexMultiview: f32;\r\n #endif\r\n #endif\r\n `,\r\n }\r\n : {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n var ds_depthSampler: texture_2d_array<f32>;\r\n #else\r\n var ds_depthSampler: texture_2d<f32>;\r\n #endif\r\n var ds_depthSamplerSampler: sampler;\r\n #if defined(MULTIVIEW) && !defined(DEPTH_SENSING_TEXTURE_ARRAY)\r\n var ds_depthSamplerRight: texture_2d<f32>;\r\n var ds_depthSamplerRightSampler: sampler;\r\n #endif\r\n #ifdef MULTIVIEW\r\n varying ds_viewIndexMultiview: f32;\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_FRAGMENT_MAIN_BEGIN: `\r\n#ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n let ds_viewIndexSet: f32 = fragmentInputs.ds_viewIndexMultiview;\r\n let ds_compensation: vec2f = vec2f(0.0, 0.0);\r\n #else\r\n let ds_viewIndexSet: f32 = uniforms.ds_viewIndex;\r\n let ds_compensation: vec2f = vec2f(ds_viewIndexSet, 0.0);\r\n #endif\r\n let ds_baseUvBottomLeft: vec2f = (fragmentInputs.position.xy * uniforms.ds_invScreenSize - uniforms.ds_shaderViewport.xy) / uniforms.ds_shaderViewport.zw;\r\n let ds_baseUv: vec2f = vec2f(ds_baseUvBottomLeft.x, 1.0 - ds_baseUvBottomLeft.y);\r\n var ds_depthSample: vec4f = vec4f(0.0);\r\n var ds_rawValueToMetersSet: f32 = uniforms.ds_rawValueToMeters;\r\n #if defined(MULTIVIEW) && !defined(DEPTH_SENSING_TEXTURE_ARRAY)\r\n var ds_depthAvailable: f32 = uniforms.ds_depthAvailableLeft;\r\n if (ds_viewIndexSet < 0.5) {\r\n if (ds_depthAvailable > 0.5) {\r\n let ds_depthUv: vec2f = (uniforms.ds_uvTransform * vec4f(ds_baseUv, 0.0, 1.0)).xy;\r\n ds_depthSample = textureSampleLevel(ds_depthSampler, ds_depthSamplerSampler, ds_depthUv, 0.0);\r\n }\r\n } else {\r\n ds_depthAvailable = uniforms.ds_depthAvailableRight;\r\n if (ds_depthAvailable > 0.5) {\r\n let ds_depthUv: vec2f = (uniforms.ds_uvTransformRight * vec4f(ds_baseUv, 0.0, 1.0)).xy;\r\n ds_depthSample = textureSampleLevel(ds_depthSamplerRight, ds_depthSamplerRightSampler, ds_depthUv, 0.0);\r\n }\r\n ds_rawValueToMetersSet = uniforms.ds_rawValueToMetersRight;\r\n }\r\n #else\r\n let ds_depthAvailable: f32 = 1.0;\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n let ds_uv: vec2f = ds_baseUv - ds_compensation;\r\n let ds_depthUv: vec2f = (uniforms.ds_uvTransform * vec4f(ds_uv, 0.0, 1.0)).xy;\r\n ds_depthSample = textureSample(ds_depthSampler, ds_depthSamplerSampler, ds_depthUv, i32(ds_viewIndexSet));\r\n #else\r\n let ds_depthUv: vec2f = (uniforms.ds_uvTransform * vec4f(ds_baseUv, 0.0, 1.0)).xy;\r\n ds_depthSample = textureSample(ds_depthSampler, ds_depthSamplerSampler, ds_depthUv);\r\n #endif\r\n #endif\r\n var ds_cameraDepth: f32;\r\n #ifdef DEPTH_SENSING_TEXTURE_AL\r\n let ds_alphaLuminance: vec2f = ds_depthSample.ra;\r\n ds_cameraDepth = dot(ds_alphaLuminance, vec2f(255.0, 256.0 * 255.0));\r\n #else\r\n ds_cameraDepth = ds_depthSample.r;\r\n #endif\r\n\r\n ds_cameraDepth = ds_cameraDepth * ds_rawValueToMetersSet;\r\n\r\n var ds_viewPosition: vec4f = scene.view * vec4f(fragmentInputs.vPositionW, 1.0);\r\n #ifdef MULTIVIEW\r\n if (ds_viewIndexSet >= 0.5) {\r\n ds_viewPosition = uniforms.ds_viewRight * vec4f(fragmentInputs.vPositionW, 1.0);\r\n }\r\n #endif\r\n let ds_assetDepth: f32 = (ds_viewPosition.z * uniforms.ds_viewDepthSign) / uniforms.ds_worldScale;\r\n #ifdef DEPTH_SENSING_DISCARD\r\n if (ds_depthAvailable > 0.5 && ds_cameraDepth > 0.0 && ds_cameraDepth < ds_assetDepth) {\r\n discard;\r\n }\r\n #endif\r\n#endif\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#ifdef DEPTH_SENSING\r\n #ifndef DEPTH_SENSING_DISCARD\r\n if (ds_depthAvailable > 0.5 && ds_cameraDepth > 0.0) {\r\n let ds_depthTolerancePerM: f32 = 0.005;\r\n let ds_occlusion: f32 = clamp(1.0 - 0.5 * (ds_cameraDepth - ds_assetDepth) / (ds_depthTolerancePerM * ds_assetDepth) +\r\n 0.5, 0.0, 1.0);\r\n ${this._varColorName} *= (1.0 - ds_occlusion);\r\n }\r\n #endif\r\n#endif\r\n `,\r\n };\r\n }\r\n\r\n return shaderType === \"vertex\"\r\n ? {\r\n CUSTOM_VERTEX_MAIN_BEGIN: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n ds_viewIndexMultiview = float(gl_ViewID_OVR);\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n varying float ds_viewIndexMultiview;\r\n #endif\r\n #endif\r\n `,\r\n }\r\n : {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n uniform highp sampler2DArray ds_depthSampler;\r\n #else\r\n uniform sampler2D ds_depthSampler;\r\n #endif\r\n #ifdef MULTIVIEW\r\n varying float ds_viewIndexMultiview;\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_FRAGMENT_MAIN_BEGIN: `\r\n#ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n float ds_viewIndexSet = ds_viewIndexMultiview;\r\n vec2 ds_compensation = vec2(0.0, 0.0);\r\n #else\r\n float ds_viewIndexSet = ds_viewIndex;\r\n vec2 ds_compensation = vec2(ds_viewIndexSet, 0.0);\r\n #endif\r\n vec2 ds_baseUv = gl_FragCoord.xy * ds_invScreenSize;\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n vec2 ds_uv = ds_baseUv - ds_compensation;\r\n vec3 ds_depthUv = vec3((ds_uvTransform * vec4(ds_uv, 0.0, 1.0)).xy, ds_viewIndexSet);\r\n #else\r\n vec2 ds_depthUv = (ds_uvTransform * vec4(ds_baseUv.x, 1.0 - ds_baseUv.y, 0.0, 1.0)).xy;\r\n #endif\r\n #ifdef DEPTH_SENSING_TEXTURE_AL\r\n // from alpha-luminance - taken from the explainer\r\n vec2 ds_alphaLuminance = texture(ds_depthSampler, ds_depthUv).ra;\r\n float ds_cameraDepth = dot(ds_alphaLuminance, vec2(255.0, 256.0 * 255.0));\r\n #else\r\n float ds_cameraDepth = texture(ds_depthSampler, ds_depthUv).r;\r\n #endif\r\n\r\n ds_cameraDepth = ds_cameraDepth * ds_rawValueToMeters;\r\n\r\n float ds_assetDepth = gl_FragCoord.z;\r\n #ifdef DEPTH_SENSING_DISCARD\r\n if(ds_cameraDepth < ds_assetDepth) {\r\n discard;\r\n }\r\n #endif\r\n#endif \r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#ifdef DEPTH_SENSING\r\n #ifndef DEPTH_SENSING_DISCARD\r\n const float ds_depthTolerancePerM = 0.005;\r\n float ds_occlusion = clamp(1.0 - 0.5 * (ds_cameraDepth - ds_assetDepth) / (ds_depthTolerancePerM * ds_assetDepth) +\r\n 0.5, 0.0, 1.0);\r\n ${this._varColorName} *= (1.0 - ds_occlusion);\r\n #endif\r\n#endif \r\n `,\r\n };\r\n }\r\n\r\n public override dispose(_forceDisposeTextures?: boolean): void {\r\n const index = ManagedMaterialPlugins.indexOf(this);\r\n if (index !== -1) {\r\n ManagedMaterialPlugins.splice(index, 1);\r\n }\r\n super.dispose(_forceDisposeTextures);\r\n }\r\n}\r\n\r\n/**\r\n * WebXR Feature for WebXR Depth Sensing Module\r\n * @since 5.49.1\r\n */\r\nexport class WebXRDepthSensing extends WebXRAbstractFeature {\r\n private _width: Nullable<number> = null;\r\n private _height: Nullable<number> = null;\r\n private _rawValueToMeters: Nullable<number> = null;\r\n private _textureType: Nullable<string> = null;\r\n private _normDepthBufferFromNormView: Nullable<XRRigidTransform> = null;\r\n private _cachedDepthBuffer: Nullable<ArrayBuffer> = null;\r\n private _cachedWebGLTexture: Nullable<WebGLTexture> = null;\r\n private _cachedDepthImageTexture: Nullable<RawTexture> = null;\r\n private _cachedDepthImageTextureWrapsExternalTexture = false;\r\n private _cpuDepthViewStates: IWebXRCPUDepthViewState[] = [];\r\n private _disableAutoAttachBeforeWebGPUGPUDepth = false;\r\n private _disabledForWebGPUGPUDepth = false;\r\n private _onCameraObserver: Nullable<Observer<Camera>> = null;\r\n private _onSessionEndedObserver: Nullable<Observer<any>> = null;\r\n\r\n /**\r\n * Width of depth data. If depth data is not exist, returns null.\r\n */\r\n public get width(): Nullable<number> {\r\n return this._width;\r\n }\r\n\r\n /**\r\n * Height of depth data. If depth data is not exist, returns null.\r\n */\r\n public get height(): Nullable<number> {\r\n return this._height;\r\n }\r\n\r\n /**\r\n * Scale factor by which the raw depth values must be multiplied in order to get the depths in meters.\r\n */\r\n public get rawValueToMeters(): Nullable<number> {\r\n return this._rawValueToMeters;\r\n }\r\n\r\n /**\r\n * An XRRigidTransform that needs to be applied when indexing into the depth buffer.\r\n */\r\n public get normDepthBufferFromNormView(): Nullable<XRRigidTransform> {\r\n return this._normDepthBufferFromNormView;\r\n }\r\n\r\n /**\r\n * Describes which depth-sensing usage (\"cpu\" or \"gpu\") is used.\r\n */\r\n public get depthUsage(): WebXRDepthUsage {\r\n switch (this._xrSessionManager.session.depthUsage) {\r\n case \"cpu-optimized\":\r\n return \"cpu\";\r\n case \"gpu-optimized\":\r\n return \"gpu\";\r\n }\r\n }\r\n\r\n /**\r\n * Describes which depth sensing data format (\"ushort\" or \"float\") is used.\r\n */\r\n public get depthDataFormat(): WebXRDepthDataFormat {\r\n switch (this._xrSessionManager.session.depthDataFormat) {\r\n case \"luminance-alpha\":\r\n return \"ushort\";\r\n case \"float32\":\r\n return \"float\";\r\n case \"unsigned-short\":\r\n return \"ushort\";\r\n }\r\n }\r\n\r\n /**\r\n * Latest cached InternalTexture which containing depth buffer information.\r\n * This can be used when the depth usage is \"gpu\".\r\n * @deprecated This will be removed in the future. Use latestDepthImageTexture\r\n */\r\n public get latestInternalTexture(): Nullable<InternalTexture> {\r\n if (!this._cachedWebGLTexture) {\r\n return null;\r\n }\r\n\r\n return this._getInternalTextureFromDepthInfo();\r\n }\r\n\r\n /**\r\n * cached depth buffer\r\n */\r\n public get latestDepthBuffer(): Nullable<ArrayBufferView> {\r\n if (!this._cachedDepthBuffer) {\r\n return null;\r\n }\r\n\r\n return this.depthDataFormat === \"float\" ? new Float32Array(this._cachedDepthBuffer) : new Uint16Array(this._cachedDepthBuffer);\r\n }\r\n\r\n /**\r\n * Event that notify when `DepthInformation.getDepthInMeters` is available.\r\n * `getDepthInMeters` method needs active XRFrame (not available for cached XRFrame)\r\n */\r\n public onGetDepthInMetersAvailable: Observable<GetDepthInMetersType> = new Observable<GetDepthInMetersType>();\r\n\r\n /**\r\n * Latest cached Texture of depth image which is made from the depth buffer data.\r\n */\r\n public get latestDepthImageTexture(): Nullable<RawTexture> {\r\n return this._cachedDepthImageTexture;\r\n }\r\n\r\n /**\r\n * XRWebGLBinding which is used for acquiring WebGLDepthInformation\r\n */\r\n private _glBinding?: XRWebGLBinding;\r\n\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.DEPTH_SENSING;\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number does not correspond to the WebXR specs version\r\n */\r\n public static readonly Version = 1;\r\n\r\n /**\r\n * Creates a new instance of the depth sensing feature\r\n * @param _xrSessionManager the WebXRSessionManager\r\n * @param options options for WebXR Depth Sensing Feature\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n public readonly options: IWebXRDepthSensingOptions\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"depth-sensing\";\r\n\r\n // https://immersive-web.github.io/depth-sensing/\r\n if (!this._xrSessionManager.scene.getEngine().isWebGPU) {\r\n Logger.Warn(\"depth-sensing is an experimental and unstable feature.\");\r\n }\r\n EnableDiscard = !options.useToleranceFactorForDepthSensing;\r\n\r\n RegisterMaterialPlugin(\"WebXRDepthSensingMaterialPlugin\", (material) => new WebXRDepthSensingMaterialPlugin(material));\r\n this._onSessionEndedObserver = this._xrSessionManager.onXRSessionEnded.add(() => {\r\n if (this._disabledForWebGPUGPUDepth) {\r\n this._disabledForWebGPUGPUDepth = false;\r\n this.disableAutoAttach = this._disableAutoAttachBeforeWebGPUGPUDepth;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * attach this feature\r\n * Will usually be called by the features manager\r\n * @param force should attachment be forced (even when already attached)\r\n * @returns true if successful.\r\n */\r\n public override attach(force?: boolean): boolean {\r\n const engine = this._xrSessionManager.scene.getEngine();\r\n const depthUsage = this._xrSessionManager.session.depthUsage;\r\n const depthDataFormat = this._xrSessionManager.session.depthDataFormat;\r\n\r\n if (engine.isWebGPU && depthUsage === \"gpu-optimized\") {\r\n if (this._disabledForWebGPUGPUDepth) {\r\n this.disableAutoAttach = true;\r\n return false;\r\n }\r\n this._disableAutoAttachBeforeWebGPUGPUDepth = this._autoAttachPolicyBeforeAttach ?? this.disableAutoAttach;\r\n this._disabledForWebGPUGPUDepth = true;\r\n return this._disableAutoAttach(WebGPUGPUDepthWarning);\r\n }\r\n\r\n if (depthUsage == null || depthDataFormat == null) {\r\n return false;\r\n }\r\n\r\n if (!super.attach(force)) {\r\n return false;\r\n }\r\n\r\n if (!engine.isWebGPU) {\r\n const graphicsBinding = this._xrSessionManager._getGraphicsBinding();\r\n if (graphicsBinding.bindingType !== WebXRGraphicsBindingType.WebGL) {\r\n throw new Error(\"Expected a WebGL graphics binding for WebXR Depth Sensing.\");\r\n }\r\n this._glBinding = graphicsBinding.binding;\r\n }\r\n\r\n IsPluginEnabled = !this.options.disableDepthSensingOnMaterials;\r\n if (IsPluginEnabled) {\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.isEnabled = true;\r\n }\r\n this._onCameraObserver = this._xrSessionManager.scene.onBeforeCameraRenderObservable.add((camera) => {\r\n if (!IsPluginEnabled) {\r\n return;\r\n }\r\n // make sure this is a webxr camera\r\n if (camera.outputRenderTarget) {\r\n const viewport = camera.rigCameras.length > 0 ? camera.rigCameras[0].viewport : camera.viewport;\r\n ScreenSize.width = camera.outputRenderTarget.getRenderWidth() / (!engine.isWebGPU && camera.rigParent ? camera.rigParent.rigCameras.length || 1 : 1);\r\n ScreenSize.height = camera.outputRenderTarget.getRenderHeight();\r\n ShaderViewport.x = viewport.x;\r\n ShaderViewport.y = viewport.y;\r\n ShaderViewport.width = viewport.width;\r\n ShaderViewport.height = viewport.height;\r\n GlobalWorldScale = this._xrSessionManager.worldScalingFactor;\r\n\r\n // find the viewIndex\r\n if (camera.rigParent) {\r\n const viewIndex = camera.rigParent.rigCameras.indexOf(camera);\r\n ViewIndex = viewIndex === -1 ? 0 : viewIndex;\r\n if (engine.isWebGPU && this.depthUsage === \"cpu\") {\r\n this._bindCPUDepthView(ViewIndex, false);\r\n }\r\n } else if (camera._renderingMultiview && engine.isWebGPU && this.depthUsage === \"cpu\") {\r\n ViewIndex = 0;\r\n const rightCamera = camera.rigCameras[1];\r\n if (rightCamera) {\r\n RightView.copyFrom(rightCamera.getViewMatrix());\r\n }\r\n this._bindCPUDepthView(0, true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override detach() {\r\n IsPluginEnabled = false;\r\n DepthTexture = null;\r\n DepthTextureRight = null;\r\n this._cachedWebGLTexture = null;\r\n this._cachedDepthBuffer = null;\r\n this._width = null;\r\n this._height = null;\r\n this._rawValueToMeters = null;\r\n this._textureType = null;\r\n this._normDepthBufferFromNormView = null;\r\n let cachedTextureDisposed = false;\r\n for (const viewState of this._cpuDepthViewStates) {\r\n viewState.texture?.dispose();\r\n cachedTextureDisposed ||= viewState.texture === this._cachedDepthImageTexture;\r\n }\r\n this._cpuDepthViewStates.length = 0;\r\n if (!cachedTextureDisposed) {\r\n if (this._cachedDepthImageTextureWrapsExternalTexture && this._cachedDepthImageTexture?._texture) {\r\n this._cachedDepthImageTexture._texture._hardwareTexture = null;\r\n }\r\n this._cachedDepthImageTexture?.dispose();\r\n }\r\n this._cachedDepthImageTexture = null;\r\n this._cachedDepthImageTextureWrapsExternalTexture = false;\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.isEnabled = false;\r\n }\r\n if (this._onCameraObserver) {\r\n this._xrSessionManager.scene.onBeforeCameraRenderObservable.remove(this._onCameraObserver);\r\n this._onCameraObserver = null;\r\n }\r\n return super.detach();\r\n }\r\n\r\n /**\r\n * Dispose this feature and all of the resources attached\r\n */\r\n public override dispose(): void {\r\n if (this._onSessionEndedObserver) {\r\n this._xrSessionManager.onXRSessionEnded.remove(this._onSessionEndedObserver);\r\n this._onSessionEndedObserver = null;\r\n }\r\n super.dispose();\r\n UnregisterMaterialPlugin(\"WebXRDepthSensingMaterialPlugin\");\r\n this.onGetDepthInMetersAvailable.clear();\r\n // cleanup\r\n if (this._onCameraObserver) {\r\n this._xrSessionManager.scene.onBeforeCameraRenderObservable.remove(this._onCameraObserver);\r\n }\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.dispose();\r\n }\r\n ManagedMaterialPlugins.length = 0;\r\n }\r\n\r\n protected _onXRFrame(_xrFrame: XRFrame): void {\r\n const referenceSPace = this._xrSessionManager.referenceSpace;\r\n const depthUsage = this.depthUsage;\r\n if (depthUsage === \"cpu\") {\r\n for (const viewState of this._cpuDepthViewStates) {\r\n viewState.available = false;\r\n }\r\n }\r\n const pose = _xrFrame.getViewerPose(referenceSPace);\r\n if (pose == null) {\r\n if (depthUsage === \"cpu\") {\r\n this._clearCPUDepthBinding();\r\n }\r\n return;\r\n }\r\n for (let viewIndex = 0; viewIndex < pose.views.length; viewIndex++) {\r\n const view = pose.views[viewIndex];\r\n switch (depthUsage) {\r\n case \"cpu\":\r\n this._updateDepthInformationAndTextureCPUDepthUsage(_xrFrame, view, viewIndex, this.depthDataFormat);\r\n break;\r\n case \"gpu\":\r\n if (!this._glBinding) {\r\n break;\r\n }\r\n this._updateDepthInformationAndTextureWebGLDepthUsage(this._glBinding, view, this.depthDataFormat);\r\n break;\r\n default:\r\n Logger.Error(\"Unknown depth usage\");\r\n this.detach();\r\n break;\r\n }\r\n }\r\n if (depthUsage === \"cpu\" && !this._cpuDepthViewStates.some((viewState) => viewState.available)) {\r\n this._clearCPUDepthBinding();\r\n }\r\n }\r\n\r\n private _updateDepthInformationAndTextureCPUDepthUsage(frame: XRFrame, view: XRView, viewIndex: number, dataFormat: WebXRDepthDataFormat): void {\r\n const depthInfo = frame.getDepthInformation(view);\r\n if (depthInfo == null) {\r\n return;\r\n }\r\n\r\n const { data, width, height, rawValueToMeters, getDepthInMeters, normDepthBufferFromNormView } = depthInfo as XRCPUDepthInformation;\r\n let viewState = this._cpuDepthViewStates[viewIndex];\r\n if (!viewState) {\r\n viewState = {\r\n available: true,\r\n height,\r\n rawValueToMeters,\r\n texture: null,\r\n uvTransform: Matrix.Identity(),\r\n visualizationDepthBuffer: null,\r\n width,\r\n };\r\n this._cpuDepthViewStates[viewIndex] = viewState;\r\n }\r\n\r\n const textureSizeChanged = viewState.width !== width || viewState.height !== height;\r\n this._width = width;\r\n this._height = height;\r\n this._rawValueToMeters = rawValueToMeters;\r\n this._normDepthBufferFromNormView = normDepthBufferFromNormView;\r\n this._cachedDepthBuffer = data;\r\n AlphaLuminanceTexture = dataFormat === \"luminance-alpha\";\r\n viewState.height = height;\r\n viewState.available = true;\r\n viewState.rawValueToMeters = rawValueToMeters;\r\n viewState.uvTransform.fromArray(normDepthBufferFromNormView.matrix);\r\n viewState.width = width;\r\n\r\n // to avoid Illegal Invocation error, bind `this`\r\n this.onGetDepthInMetersAvailable.notifyObservers(getDepthInMeters.bind(depthInfo));\r\n\r\n if (!viewState.texture || textureSizeChanged) {\r\n viewState.texture?.dispose();\r\n viewState.texture = RawTexture.CreateRTexture(\r\n null,\r\n width,\r\n height,\r\n this._xrSessionManager.scene,\r\n false,\r\n false,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\r\n }\r\n this._cachedDepthImageTextureWrapsExternalTexture = false;\r\n this._cachedDepthImageTexture = viewState.texture;\r\n\r\n let depthValues: Float32Array | Uint16Array | null = null;\r\n switch (dataFormat) {\r\n case \"ushort\":\r\n case \"luminance-alpha\":\r\n depthValues = new Uint16Array(data);\r\n break;\r\n case \"float\":\r\n depthValues = new Float32Array(data);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (depthValues) {\r\n let uploadData: Float32Array;\r\n if (this.options.prepareTextureForVisualization) {\r\n if (!viewState.visualizationDepthBuffer || viewState.visualizationDepthBuffer.length !== depthValues.length) {\r\n viewState.visualizationDepthBuffer = new Float32Array(depthValues.length);\r\n }\r\n uploadData = viewState.visualizationDepthBuffer;\r\n for (let index = 0; index < depthValues.length; index++) {\r\n uploadData[index] = depthValues[index] * rawValueToMeters;\r\n }\r\n } else {\r\n uploadData = depthValues instanceof Float32Array ? depthValues : Float32Array.from(depthValues);\r\n }\r\n viewState.texture.update(uploadData);\r\n }\r\n\r\n if (!this._xrSessionManager.scene.getEngine().isWebGPU) {\r\n const hadDepthTexture = !!DepthTexture;\r\n DepthTexture = viewState.texture;\r\n DepthTextureRight = null;\r\n GlobalDepthAvailableLeft = 1;\r\n GlobalDepthAvailableRight = 0;\r\n GlobalRawValueToMeters = viewState.rawValueToMeters;\r\n UvTransform.copyFrom(viewState.uvTransform);\r\n if (!hadDepthTexture) {\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n }\r\n\r\n private _clearCPUDepthBinding(): void {\r\n if (DepthTexture) {\r\n DepthTexture = null;\r\n DepthTextureRight = null;\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n\r\n private _bindCPUDepthView(viewIndex: number, multiview: boolean): void {\r\n const leftViewState = this._cpuDepthViewStates[0];\r\n const rightViewState = multiview ? this._cpuDepthViewStates[1] : null;\r\n const viewState = multiview\r\n ? leftViewState?.available && leftViewState.texture\r\n ? leftViewState\r\n : rightViewState?.available && rightViewState.texture\r\n ? rightViewState\r\n : null\r\n : this._cpuDepthViewStates[viewIndex];\r\n if (!viewState?.available || !viewState.texture) {\r\n this._clearCPUDepthBinding();\r\n return;\r\n }\r\n\r\n const hadDepthTexture = !!DepthTexture;\r\n if (multiview && leftViewState?.available && leftViewState.texture) {\r\n GlobalDepthAvailableLeft = 1;\r\n DepthTexture = leftViewState.texture;\r\n GlobalRawValueToMeters = leftViewState.rawValueToMeters;\r\n UvTransform.copyFrom(leftViewState.uvTransform);\r\n } else {\r\n GlobalDepthAvailableLeft = multiview ? 0 : 1;\r\n DepthTexture = viewState.texture;\r\n GlobalRawValueToMeters = viewState.rawValueToMeters;\r\n UvTransform.copyFrom(viewState.uvTransform);\r\n }\r\n if (multiview && rightViewState?.available && rightViewState.texture) {\r\n GlobalDepthAvailableRight = 1;\r\n DepthTextureRight = rightViewState.texture;\r\n GlobalRawValueToMetersRight = rightViewState.rawValueToMeters;\r\n UvTransformRight.copyFrom(rightViewState.uvTransform);\r\n } else {\r\n GlobalDepthAvailableRight = 0;\r\n DepthTextureRight = viewState.texture;\r\n GlobalRawValueToMetersRight = viewState.rawValueToMeters;\r\n UvTransformRight.copyFrom(viewState.uvTransform);\r\n }\r\n\r\n if (!hadDepthTexture) {\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n\r\n private _updateDepthInformationAndTextureWebGLDepthUsage(webglBinding: XRWebGLBinding, view: XRView, dataFormat: WebXRDepthDataFormat): void {\r\n const depthInfo = webglBinding.getDepthInformation(view);\r\n if (depthInfo === null) {\r\n return;\r\n }\r\n const { texture, width, height, textureType, rawValueToMeters, normDepthBufferFromNormView } = depthInfo as XRWebGLDepthInformation;\r\n\r\n GlobalRawValueToMeters = rawValueToMeters;\r\n AlphaLuminanceTexture = dataFormat === \"luminance-alpha\";\r\n UvTransform.fromArray(normDepthBufferFromNormView.matrix);\r\n\r\n if (this._cachedWebGLTexture) {\r\n return;\r\n }\r\n\r\n this._width = width;\r\n this._height = height;\r\n this._cachedWebGLTexture = texture;\r\n this._textureType = textureType;\r\n\r\n const scene = this._xrSessionManager.scene;\r\n const internalTexture = this._getInternalTextureFromDepthInfo();\r\n\r\n if (!this._cachedDepthImageTexture) {\r\n this._cachedDepthImageTexture = RawTexture.CreateRTexture(\r\n null,\r\n width,\r\n height,\r\n scene,\r\n false,\r\n true,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n dataFormat === \"float\" ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n this._cachedDepthImageTexture._texture?.dispose();\r\n }\r\n\r\n this._cachedDepthImageTexture._texture = internalTexture;\r\n this._cachedDepthImageTextureWrapsExternalTexture = true;\r\n DepthTexture = this._cachedDepthImageTexture;\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Extends the session init object if needed\r\n * @returns augmentation object for the xr session init object.\r\n */\r\n public async getXRSessionInitExtension(): Promise<Partial<XRSessionInit>> {\r\n const isDepthUsageDeclared = this.options.usagePreference != null && this.options.usagePreference.length !== 0;\r\n const isDataFormatDeclared = this.options.dataFormatPreference != null && this.options.dataFormatPreference.length !== 0;\r\n\r\n return await new Promise((resolve) => {\r\n if (isDepthUsageDeclared && isDataFormatDeclared) {\r\n const usages: XRDepthUsage[] = this.options.usagePreference.map((usage) => {\r\n switch (usage) {\r\n case \"cpu\":\r\n return \"cpu-optimized\";\r\n case \"gpu\":\r\n return \"gpu-optimized\";\r\n }\r\n });\r\n const dataFormats: XRDepthDataFormat[] = this.options.dataFormatPreference.map((format) => {\r\n switch (format) {\r\n case \"luminance-alpha\":\r\n return \"luminance-alpha\";\r\n case \"float\":\r\n return \"float32\";\r\n case \"ushort\":\r\n return \"unsigned-short\";\r\n }\r\n });\r\n\r\n resolve({\r\n depthSensing: {\r\n usagePreference: usages,\r\n dataFormatPreference: dataFormats,\r\n },\r\n });\r\n } else {\r\n resolve({});\r\n }\r\n });\r\n }\r\n\r\n private _getInternalTextureFromDepthInfo(): InternalTexture {\r\n const engine = this._xrSessionManager.scene.getEngine();\r\n const dataFormat = this.depthDataFormat;\r\n const textureType = this._textureType;\r\n if (!this._width || !this._height || !this._cachedWebGLTexture) {\r\n throw new Error(\"Depth information is not available\");\r\n }\r\n const internalTexture = (engine as Engine).wrapWebGLTexture(\r\n this._cachedWebGLTexture,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n this._width || 256,\r\n this._height || 256\r\n );\r\n internalTexture.isCube = false;\r\n internalTexture.invertY = false;\r\n internalTexture._useSRGBBuffer = false;\r\n internalTexture.format = dataFormat === \"luminance-alpha\" ? Constants.TEXTUREFORMAT_LUMINANCE_ALPHA : Constants.TEXTUREFORMAT_RGBA;\r\n internalTexture.generateMipMaps = false;\r\n internalTexture.type =\r\n dataFormat === \"float\" ? Constants.TEXTURETYPE_FLOAT : dataFormat === \"ushort\" ? Constants.TEXTURETYPE_UNSIGNED_SHORT : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture._cachedWrapU = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n internalTexture._cachedWrapV = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n internalTexture._hardwareTexture = new WebGLHardwareTexture(this._cachedWebGLTexture, (engine as ThinEngine)._gl);\r\n internalTexture.is2DArray = textureType === \"texture-array\";\r\n\r\n return internalTexture;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for webXRDepthSensing.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterWebXRDepthSensing(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(`BABYLON.DepthSensingMaterialPlugin`, WebXRDepthSensingMaterialPlugin);\r\n\r\n WebXRFeaturesManager.AddWebXRFeature(\r\n WebXRDepthSensing.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRDepthSensing(xrSessionManager, options);\r\n },\r\n WebXRDepthSensing.Version,\r\n false\r\n );\r\n}\r\n"]}
1
+ {"version":3,"file":"WebXRDepthSensing.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRDepthSensing.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { RawTexture } from \"../../Materials/Textures/rawTexture\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport { type WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { Texture } from \"../../Materials/Textures/texture.pure\";\r\nimport { Observable } from \"../../Misc/observable.pure\";\r\nimport { type Observer } from \"../../Misc/observable\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { WebGLHardwareTexture } from \"../../Engines/WebGL/webGLHardwareTexture\";\r\nimport { type InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport { type ThinEngine } from \"../../Engines/thinEngine.pure\";\r\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase.pure\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport { type Material } from \"core/Materials/material.pure\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport { type UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial.pure\";\r\nimport { RegisterMaterialPlugin, UnregisterMaterialPlugin } from \"core/Materials/materialPluginManager.pure\";\r\nimport { type Camera } from \"core/Cameras/camera.pure\";\r\nimport { Matrix } from \"core/Maths/math.vector.pure\";\r\nimport { type Engine } from \"core/Engines/engine.pure\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\nimport { WebXRGraphicsBindingType } from \"../webXRGraphicsBinding\";\r\n\r\nexport type WebXRDepthUsage = \"cpu\" | \"gpu\";\r\nexport type WebXRDepthDataFormat = \"ushort\" | \"float\" | \"luminance-alpha\";\r\n\r\ninterface IWebXRDepthSensingSession extends XRSession {\r\n readonly depthActive?: boolean;\r\n pauseDepthSensing?: () => Promise<void>;\r\n resumeDepthSensing?: () => Promise<void>;\r\n}\r\n\r\n/**\r\n * Options for Depth Sensing feature\r\n */\r\nexport interface IWebXRDepthSensingOptions {\r\n /**\r\n * The desired depth sensing usage for the session\r\n */\r\n usagePreference: WebXRDepthUsage[];\r\n /**\r\n * The desired depth sensing data format for the session\r\n */\r\n dataFormatPreference: WebXRDepthDataFormat[];\r\n\r\n /**\r\n * Depth sensing will be enabled on all materials per default, if the GPU variant is enabled.\r\n * If you just want to use the texture or the CPU variant instead set this to true.\r\n */\r\n disableDepthSensingOnMaterials?: boolean;\r\n\r\n /**\r\n * If set to true the occluded pixels will not be discarded but the pixel color will be changed based on the occlusion factor\r\n * Enabling this will lead to worse performance but slightly better outcome.\r\n * It is possible we will change this in the future to look even better.\r\n */\r\n useToleranceFactorForDepthSensing?: boolean;\r\n\r\n /**\r\n * If set to true the texture will be set to be used for visualization.\r\n * In this case it will probably NOT work correctly on the materials.\r\n * So be aware that, for the time being, you can only use one or the other.\r\n */\r\n prepareTextureForVisualization?: boolean;\r\n}\r\n\r\ntype GetDepthInMetersType = (x: number, y: number) => number;\r\n\r\nclass DepthSensingMaterialDefines extends MaterialDefines {\r\n /**\r\n * Is the feature enabled\r\n */\r\n DEPTH_SENSING = false;\r\n\r\n /**\r\n * Is the texture type provided as a texture array\r\n */\r\n DEPTH_SENSING_TEXTURE_ARRAY = false;\r\n\r\n /**\r\n * Is the texture type provided as Alpha-Luminance (unpacked differently on the shader)\r\n */\r\n DEPTH_SENSING_TEXTURE_AL = false;\r\n\r\n /**\r\n * Should the shader discard the pixel if the depth is less than the asset depth\r\n * Will lead to better performance. the other variant is to change the color based on a tolerance factor\r\n */\r\n DEPTH_SENSING_DISCARD = true;\r\n}\r\n\r\nlet IsPluginEnabled = false;\r\nlet DepthTexture: Nullable<RawTexture> = null;\r\nlet DepthTextureRight: Nullable<RawTexture> = null;\r\nlet AlphaLuminanceTexture = false;\r\nconst ScreenSize = { width: 512, height: 512 };\r\nconst ShaderViewport = { x: 0, y: 0, width: 1, height: 1 };\r\nlet GlobalRawValueToMeters = 1;\r\nlet GlobalRawValueToMetersRight = 1;\r\nlet GlobalDepthAvailableLeft = 0;\r\nlet GlobalDepthAvailableRight = 0;\r\nlet GlobalWorldScale = 1;\r\nlet ViewIndex = 0;\r\nlet EnableDiscard = true;\r\nconst UvTransform = /*#__PURE__*/ Matrix.Identity();\r\nconst UvTransformRight = /*#__PURE__*/ Matrix.Identity();\r\nconst RightView = /*#__PURE__*/ Matrix.Identity();\r\nconst ManagedMaterialPlugins: WebXRDepthSensingMaterialPlugin[] = [];\r\nconst WebGPUGPUDepthWarning =\r\n \"WebXR Depth Sensing is unavailable with WebGPU XR when the session negotiates gpu-optimized depth because XRGPUBinding has no environment-depth equivalent; request cpu-optimized depth to use the feature.\";\r\n\r\ninterface IWebXRCPUDepthViewState {\r\n available: boolean;\r\n height: number;\r\n rawValueToMeters: number;\r\n texture: Nullable<RawTexture>;\r\n uvTransform: Matrix;\r\n visualizationDepthBuffer: Nullable<Float32Array>;\r\n width: number;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nclass WebXRDepthSensingMaterialPlugin extends MaterialPluginBase {\r\n private _varColorName: string;\r\n private _isEnabled = false;\r\n\r\n /** @internal */\r\n protected _markAllDefinesAsDirty(): void {\r\n this._enable(this._isEnabled);\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets whether the mesh debug plugin is enabled in the material.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the mesh debug plugin is enabled in the material.\r\n * @param value enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n this._isEnabled = value;\r\n this._markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a given shader language.\r\n * @param shaderLanguage The shader language to use.\r\n * @returns true if the plugin is compatible with the shader language\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n case ShaderLanguage.WGSL:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n constructor(material: Material) {\r\n super(material, \"DepthSensing\", 222, new DepthSensingMaterialDefines());\r\n this._varColorName = material instanceof PBRBaseMaterial ? \"finalColor\" : \"color\";\r\n this.doNotSerialize = true;\r\n ManagedMaterialPlugins.push(this);\r\n }\r\n\r\n /**\r\n * Prepare the defines\r\n * @param defines the defines\r\n */\r\n public override prepareDefines(defines: DepthSensingMaterialDefines) {\r\n defines.DEPTH_SENSING = !!DepthTexture && IsPluginEnabled;\r\n defines.DEPTH_SENSING_TEXTURE_ARRAY = DepthTexture?.is2DArray ?? false;\r\n defines.DEPTH_SENSING_TEXTURE_AL = AlphaLuminanceTexture;\r\n defines.DEPTH_SENSING_DISCARD = EnableDiscard;\r\n }\r\n\r\n public override getUniforms(shaderLanguage = ShaderLanguage.GLSL) {\r\n const ubo = [\r\n { name: \"ds_invScreenSize\", size: 2, type: \"vec2\" },\r\n { name: \"ds_rawValueToMeters\", size: 1, type: \"float\" },\r\n { name: \"ds_viewIndex\", size: 1, type: \"float\" },\r\n { name: \"ds_shaderViewport\", size: 4, type: \"vec4\" },\r\n { name: \"ds_uvTransform\", size: 16, type: \"mat4\" },\r\n ];\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n ubo.push(\r\n { name: \"ds_rawValueToMetersRight\", size: 1, type: \"float\" },\r\n { name: \"ds_depthAvailableLeft\", size: 1, type: \"float\" },\r\n { name: \"ds_depthAvailableRight\", size: 1, type: \"float\" },\r\n { name: \"ds_worldScale\", size: 1, type: \"float\" },\r\n { name: \"ds_viewDepthSign\", size: 1, type: \"float\" },\r\n { name: \"ds_uvTransformRight\", size: 16, type: \"mat4\" },\r\n { name: \"ds_viewRight\", size: 16, type: \"mat4\" }\r\n );\r\n }\r\n return {\r\n // first, define the UBO with the correct type and size.\r\n ubo,\r\n // now, on the fragment shader, add the uniform itself in case uniform buffers are not supported by the engine\r\n fragment:\r\n shaderLanguage === ShaderLanguage.GLSL\r\n ? `#ifdef DEPTH_SENSING\r\n uniform vec2 ds_invScreenSize;\r\n uniform float ds_rawValueToMeters;\r\n uniform float ds_viewIndex;\r\n uniform vec4 ds_shaderViewport;\r\n uniform mat4 ds_uvTransform;\r\n #endif\r\n `\r\n : \"\",\r\n };\r\n }\r\n\r\n public override getSamplers(samplers: string[]): void {\r\n samplers.push(\"ds_depthSampler\");\r\n samplers.push(\"ds_depthSamplerRight\");\r\n }\r\n\r\n public override bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (IsPluginEnabled && DepthTexture) {\r\n const isWGSL = this._material.shaderLanguage === ShaderLanguage.WGSL;\r\n uniformBuffer.updateFloat2(\"ds_invScreenSize\", 1 / ScreenSize.width, 1 / ScreenSize.height);\r\n uniformBuffer.updateFloat(\"ds_rawValueToMeters\", GlobalRawValueToMeters);\r\n uniformBuffer.updateFloat(\"ds_viewIndex\", ViewIndex);\r\n uniformBuffer.updateFloat4(\"ds_shaderViewport\", ShaderViewport.x, ShaderViewport.y, ShaderViewport.width, ShaderViewport.height);\r\n uniformBuffer.setTexture(\"ds_depthSampler\", DepthTexture);\r\n uniformBuffer.updateMatrix(\"ds_uvTransform\", UvTransform);\r\n if (isWGSL) {\r\n uniformBuffer.updateFloat(\"ds_rawValueToMetersRight\", GlobalRawValueToMetersRight);\r\n uniformBuffer.updateFloat(\"ds_depthAvailableLeft\", GlobalDepthAvailableLeft);\r\n uniformBuffer.updateFloat(\"ds_depthAvailableRight\", GlobalDepthAvailableRight);\r\n uniformBuffer.updateFloat(\"ds_worldScale\", GlobalWorldScale);\r\n uniformBuffer.updateFloat(\"ds_viewDepthSign\", this._material.getScene().useRightHandedSystem ? -1 : 1);\r\n uniformBuffer.setTexture(\"ds_depthSamplerRight\", DepthTextureRight);\r\n uniformBuffer.updateMatrix(\"ds_uvTransformRight\", UvTransformRight);\r\n uniformBuffer.updateMatrix(\"ds_viewRight\", RightView);\r\n }\r\n }\r\n }\r\n\r\n public override getClassName() {\r\n return \"DepthSensingMaterialPlugin\";\r\n }\r\n\r\n public override getCustomCode(shaderType: string, shaderLanguage = ShaderLanguage.GLSL): Nullable<{ [pointName: string]: string }> {\r\n if (shaderLanguage === ShaderLanguage.WGSL) {\r\n return shaderType === \"vertex\"\r\n ? {\r\n CUSTOM_VERTEX_MAIN_BEGIN: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n vertexOutputs.ds_viewIndexMultiview = f32(gl_ViewID_OVR);\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n varying ds_viewIndexMultiview: f32;\r\n #endif\r\n #endif\r\n `,\r\n }\r\n : {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n var ds_depthSampler: texture_2d_array<f32>;\r\n #else\r\n var ds_depthSampler: texture_2d<f32>;\r\n #endif\r\n var ds_depthSamplerSampler: sampler;\r\n #if defined(MULTIVIEW) && !defined(DEPTH_SENSING_TEXTURE_ARRAY)\r\n var ds_depthSamplerRight: texture_2d<f32>;\r\n var ds_depthSamplerRightSampler: sampler;\r\n #endif\r\n #ifdef MULTIVIEW\r\n varying ds_viewIndexMultiview: f32;\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_FRAGMENT_MAIN_BEGIN: `\r\n#ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n let ds_viewIndexSet: f32 = fragmentInputs.ds_viewIndexMultiview;\r\n let ds_compensation: vec2f = vec2f(0.0, 0.0);\r\n #else\r\n let ds_viewIndexSet: f32 = uniforms.ds_viewIndex;\r\n let ds_compensation: vec2f = vec2f(ds_viewIndexSet, 0.0);\r\n #endif\r\n let ds_baseUvBottomLeft: vec2f = (fragmentInputs.position.xy * uniforms.ds_invScreenSize - uniforms.ds_shaderViewport.xy) / uniforms.ds_shaderViewport.zw;\r\n let ds_baseUv: vec2f = vec2f(ds_baseUvBottomLeft.x, 1.0 - ds_baseUvBottomLeft.y);\r\n var ds_depthSample: vec4f = vec4f(0.0);\r\n var ds_rawValueToMetersSet: f32 = uniforms.ds_rawValueToMeters;\r\n #if defined(MULTIVIEW) && !defined(DEPTH_SENSING_TEXTURE_ARRAY)\r\n var ds_depthAvailable: f32 = uniforms.ds_depthAvailableLeft;\r\n if (ds_viewIndexSet < 0.5) {\r\n if (ds_depthAvailable > 0.5) {\r\n let ds_depthUv: vec2f = (uniforms.ds_uvTransform * vec4f(ds_baseUv, 0.0, 1.0)).xy;\r\n ds_depthSample = textureSampleLevel(ds_depthSampler, ds_depthSamplerSampler, ds_depthUv, 0.0);\r\n }\r\n } else {\r\n ds_depthAvailable = uniforms.ds_depthAvailableRight;\r\n if (ds_depthAvailable > 0.5) {\r\n let ds_depthUv: vec2f = (uniforms.ds_uvTransformRight * vec4f(ds_baseUv, 0.0, 1.0)).xy;\r\n ds_depthSample = textureSampleLevel(ds_depthSamplerRight, ds_depthSamplerRightSampler, ds_depthUv, 0.0);\r\n }\r\n ds_rawValueToMetersSet = uniforms.ds_rawValueToMetersRight;\r\n }\r\n #else\r\n let ds_depthAvailable: f32 = 1.0;\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n let ds_uv: vec2f = ds_baseUv - ds_compensation;\r\n let ds_depthUv: vec2f = (uniforms.ds_uvTransform * vec4f(ds_uv, 0.0, 1.0)).xy;\r\n ds_depthSample = textureSample(ds_depthSampler, ds_depthSamplerSampler, ds_depthUv, i32(ds_viewIndexSet));\r\n #else\r\n let ds_depthUv: vec2f = (uniforms.ds_uvTransform * vec4f(ds_baseUv, 0.0, 1.0)).xy;\r\n ds_depthSample = textureSample(ds_depthSampler, ds_depthSamplerSampler, ds_depthUv);\r\n #endif\r\n #endif\r\n var ds_cameraDepth: f32;\r\n #ifdef DEPTH_SENSING_TEXTURE_AL\r\n let ds_alphaLuminance: vec2f = ds_depthSample.ra;\r\n ds_cameraDepth = dot(ds_alphaLuminance, vec2f(255.0, 256.0 * 255.0));\r\n #else\r\n ds_cameraDepth = ds_depthSample.r;\r\n #endif\r\n\r\n ds_cameraDepth = ds_cameraDepth * ds_rawValueToMetersSet;\r\n\r\n var ds_viewPosition: vec4f = scene.view * vec4f(fragmentInputs.vPositionW, 1.0);\r\n #ifdef MULTIVIEW\r\n if (ds_viewIndexSet >= 0.5) {\r\n ds_viewPosition = uniforms.ds_viewRight * vec4f(fragmentInputs.vPositionW, 1.0);\r\n }\r\n #endif\r\n let ds_assetDepth: f32 = (ds_viewPosition.z * uniforms.ds_viewDepthSign) / uniforms.ds_worldScale;\r\n #ifdef DEPTH_SENSING_DISCARD\r\n if (ds_depthAvailable > 0.5 && ds_cameraDepth > 0.0 && ds_cameraDepth < ds_assetDepth) {\r\n discard;\r\n }\r\n #endif\r\n#endif\r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#ifdef DEPTH_SENSING\r\n #ifndef DEPTH_SENSING_DISCARD\r\n if (ds_depthAvailable > 0.5 && ds_cameraDepth > 0.0) {\r\n let ds_depthTolerancePerM: f32 = 0.005;\r\n let ds_occlusion: f32 = clamp(1.0 - 0.5 * (ds_cameraDepth - ds_assetDepth) / (ds_depthTolerancePerM * ds_assetDepth) +\r\n 0.5, 0.0, 1.0);\r\n ${this._varColorName} *= (1.0 - ds_occlusion);\r\n }\r\n #endif\r\n#endif\r\n `,\r\n };\r\n }\r\n\r\n return shaderType === \"vertex\"\r\n ? {\r\n CUSTOM_VERTEX_MAIN_BEGIN: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n ds_viewIndexMultiview = float(gl_ViewID_OVR);\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n varying float ds_viewIndexMultiview;\r\n #endif\r\n #endif\r\n `,\r\n }\r\n : {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n uniform highp sampler2DArray ds_depthSampler;\r\n #else\r\n uniform sampler2D ds_depthSampler;\r\n #endif\r\n #ifdef MULTIVIEW\r\n varying float ds_viewIndexMultiview;\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_FRAGMENT_MAIN_BEGIN: `\r\n#ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n float ds_viewIndexSet = ds_viewIndexMultiview;\r\n vec2 ds_compensation = vec2(0.0, 0.0);\r\n #else\r\n float ds_viewIndexSet = ds_viewIndex;\r\n vec2 ds_compensation = vec2(ds_viewIndexSet, 0.0);\r\n #endif\r\n vec2 ds_baseUv = gl_FragCoord.xy * ds_invScreenSize;\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n vec2 ds_uv = ds_baseUv - ds_compensation;\r\n vec3 ds_depthUv = vec3((ds_uvTransform * vec4(ds_uv, 0.0, 1.0)).xy, ds_viewIndexSet);\r\n #else\r\n vec2 ds_depthUv = (ds_uvTransform * vec4(ds_baseUv.x, 1.0 - ds_baseUv.y, 0.0, 1.0)).xy;\r\n #endif\r\n #ifdef DEPTH_SENSING_TEXTURE_AL\r\n // from alpha-luminance - taken from the explainer\r\n vec2 ds_alphaLuminance = texture(ds_depthSampler, ds_depthUv).ra;\r\n float ds_cameraDepth = dot(ds_alphaLuminance, vec2(255.0, 256.0 * 255.0));\r\n #else\r\n float ds_cameraDepth = texture(ds_depthSampler, ds_depthUv).r;\r\n #endif\r\n\r\n ds_cameraDepth = ds_cameraDepth * ds_rawValueToMeters;\r\n\r\n float ds_assetDepth = gl_FragCoord.z;\r\n #ifdef DEPTH_SENSING_DISCARD\r\n if(ds_cameraDepth < ds_assetDepth) {\r\n discard;\r\n }\r\n #endif\r\n#endif \r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#ifdef DEPTH_SENSING\r\n #ifndef DEPTH_SENSING_DISCARD\r\n const float ds_depthTolerancePerM = 0.005;\r\n float ds_occlusion = clamp(1.0 - 0.5 * (ds_cameraDepth - ds_assetDepth) / (ds_depthTolerancePerM * ds_assetDepth) +\r\n 0.5, 0.0, 1.0);\r\n ${this._varColorName} *= (1.0 - ds_occlusion);\r\n #endif\r\n#endif \r\n `,\r\n };\r\n }\r\n\r\n public override dispose(_forceDisposeTextures?: boolean): void {\r\n const index = ManagedMaterialPlugins.indexOf(this);\r\n if (index !== -1) {\r\n ManagedMaterialPlugins.splice(index, 1);\r\n }\r\n super.dispose(_forceDisposeTextures);\r\n }\r\n}\r\n\r\n/**\r\n * WebXR Feature for WebXR Depth Sensing Module\r\n * @since 5.49.1\r\n */\r\nexport class WebXRDepthSensing extends WebXRAbstractFeature {\r\n private _width: Nullable<number> = null;\r\n private _height: Nullable<number> = null;\r\n private _rawValueToMeters: Nullable<number> = null;\r\n private _textureType: Nullable<string> = null;\r\n private _normDepthBufferFromNormView: Nullable<XRRigidTransform> = null;\r\n private _cachedDepthBuffer: Nullable<ArrayBuffer> = null;\r\n private _cachedWebGLTexture: Nullable<WebGLTexture> = null;\r\n private _cachedDepthImageTexture: Nullable<RawTexture> = null;\r\n private _cachedDepthImageTextureWrapsExternalTexture = false;\r\n private _cpuDepthViewStates: IWebXRCPUDepthViewState[] = [];\r\n private _disableAutoAttachBeforeWebGPUGPUDepth = false;\r\n private _disabledForWebGPUGPUDepth = false;\r\n private _onCameraObserver: Nullable<Observer<Camera>> = null;\r\n private _onSessionEndedObserver: Nullable<Observer<any>> = null;\r\n\r\n /**\r\n * Width of depth data. If depth data is not exist, returns null.\r\n */\r\n public get width(): Nullable<number> {\r\n return this._width;\r\n }\r\n\r\n /**\r\n * Height of depth data. If depth data is not exist, returns null.\r\n */\r\n public get height(): Nullable<number> {\r\n return this._height;\r\n }\r\n\r\n /**\r\n * Scale factor by which the raw depth values must be multiplied in order to get the depths in meters.\r\n */\r\n public get rawValueToMeters(): Nullable<number> {\r\n return this._rawValueToMeters;\r\n }\r\n\r\n /**\r\n * An XRRigidTransform that needs to be applied when indexing into the depth buffer.\r\n */\r\n public get normDepthBufferFromNormView(): Nullable<XRRigidTransform> {\r\n return this._normDepthBufferFromNormView;\r\n }\r\n\r\n /**\r\n * Describes which depth-sensing usage (\"cpu\" or \"gpu\") is used.\r\n */\r\n public get depthUsage(): WebXRDepthUsage {\r\n switch (this._xrSessionManager.session.depthUsage) {\r\n case \"cpu-optimized\":\r\n return \"cpu\";\r\n case \"gpu-optimized\":\r\n return \"gpu\";\r\n }\r\n }\r\n\r\n /**\r\n * Describes which depth sensing data format (\"ushort\" or \"float\") is used.\r\n */\r\n public get depthDataFormat(): WebXRDepthDataFormat {\r\n switch (this._xrSessionManager.session.depthDataFormat) {\r\n case \"luminance-alpha\":\r\n return \"ushort\";\r\n case \"float32\":\r\n return \"float\";\r\n case \"unsigned-short\":\r\n return \"ushort\";\r\n }\r\n }\r\n\r\n /**\r\n * Whether depth sensing is currently active for the XR session.\r\n * Returns false when there is no active session or the runtime does not expose the active state.\r\n * @see https://immersive-web.github.io/depth-sensing/\r\n * @see https://playground.babylonjs.com/#SU7NUW#0\r\n */\r\n public get isDepthSensingActive(): boolean {\r\n const session: IWebXRDepthSensingSession | undefined = this._xrSessionManager.session;\r\n return this._xrSessionManager.inXRSession && session?.depthActive === true;\r\n }\r\n\r\n /**\r\n * Pauses depth sensing for the active XR session.\r\n * @returns A promise that resolves when the native pause operation completes.\r\n * @throws If there is no active XR session or pausing depth sensing is not supported by the runtime.\r\n * @see https://immersive-web.github.io/depth-sensing/\r\n */\r\n public async pauseDepthSensingAsync(): Promise<void> {\r\n const session: IWebXRDepthSensingSession | undefined = this._xrSessionManager.session;\r\n if (!this._xrSessionManager.inXRSession || !session) {\r\n throw new Error(\"Pausing WebXR depth sensing requires an active XR session.\");\r\n }\r\n if (typeof session.pauseDepthSensing !== \"function\") {\r\n throw new Error(\"XRSession.pauseDepthSensing is not supported by this XR runtime.\");\r\n }\r\n return await session.pauseDepthSensing();\r\n }\r\n\r\n /**\r\n * Resumes depth sensing for the active XR session.\r\n * @returns A promise that resolves when the native resume operation completes.\r\n * @throws If there is no active XR session or resuming depth sensing is not supported by the runtime.\r\n * @see https://immersive-web.github.io/depth-sensing/\r\n */\r\n public async resumeDepthSensingAsync(): Promise<void> {\r\n const session: IWebXRDepthSensingSession | undefined = this._xrSessionManager.session;\r\n if (!this._xrSessionManager.inXRSession || !session) {\r\n throw new Error(\"Resuming WebXR depth sensing requires an active XR session.\");\r\n }\r\n if (typeof session.resumeDepthSensing !== \"function\") {\r\n throw new Error(\"XRSession.resumeDepthSensing is not supported by this XR runtime.\");\r\n }\r\n return await session.resumeDepthSensing();\r\n }\r\n\r\n /**\r\n * Latest cached InternalTexture which containing depth buffer information.\r\n * This can be used when the depth usage is \"gpu\".\r\n * @deprecated This will be removed in the future. Use latestDepthImageTexture\r\n */\r\n public get latestInternalTexture(): Nullable<InternalTexture> {\r\n if (!this._cachedWebGLTexture) {\r\n return null;\r\n }\r\n\r\n return this._getInternalTextureFromDepthInfo();\r\n }\r\n\r\n /**\r\n * cached depth buffer\r\n */\r\n public get latestDepthBuffer(): Nullable<ArrayBufferView> {\r\n if (!this._cachedDepthBuffer) {\r\n return null;\r\n }\r\n\r\n return this.depthDataFormat === \"float\" ? new Float32Array(this._cachedDepthBuffer) : new Uint16Array(this._cachedDepthBuffer);\r\n }\r\n\r\n /**\r\n * Event that notify when `DepthInformation.getDepthInMeters` is available.\r\n * `getDepthInMeters` method needs active XRFrame (not available for cached XRFrame)\r\n */\r\n public onGetDepthInMetersAvailable: Observable<GetDepthInMetersType> = new Observable<GetDepthInMetersType>();\r\n\r\n /**\r\n * Latest cached Texture of depth image which is made from the depth buffer data.\r\n */\r\n public get latestDepthImageTexture(): Nullable<RawTexture> {\r\n return this._cachedDepthImageTexture;\r\n }\r\n\r\n /**\r\n * XRWebGLBinding which is used for acquiring WebGLDepthInformation\r\n */\r\n private _glBinding?: XRWebGLBinding;\r\n\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.DEPTH_SENSING;\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number does not correspond to the WebXR specs version\r\n */\r\n public static readonly Version = 1;\r\n\r\n /**\r\n * Creates a new instance of the depth sensing feature\r\n * @param _xrSessionManager the WebXRSessionManager\r\n * @param options options for WebXR Depth Sensing Feature\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n public readonly options: IWebXRDepthSensingOptions\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"depth-sensing\";\r\n\r\n // https://immersive-web.github.io/depth-sensing/\r\n if (!this._xrSessionManager.scene.getEngine().isWebGPU) {\r\n Logger.Warn(\"depth-sensing is an experimental and unstable feature.\");\r\n }\r\n EnableDiscard = !options.useToleranceFactorForDepthSensing;\r\n\r\n RegisterMaterialPlugin(\"WebXRDepthSensingMaterialPlugin\", (material) => new WebXRDepthSensingMaterialPlugin(material));\r\n this._onSessionEndedObserver = this._xrSessionManager.onXRSessionEnded.add(() => {\r\n if (this._disabledForWebGPUGPUDepth) {\r\n this._disabledForWebGPUGPUDepth = false;\r\n this.disableAutoAttach = this._disableAutoAttachBeforeWebGPUGPUDepth;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * attach this feature\r\n * Will usually be called by the features manager\r\n * @param force should attachment be forced (even when already attached)\r\n * @returns true if successful.\r\n */\r\n public override attach(force?: boolean): boolean {\r\n const engine = this._xrSessionManager.scene.getEngine();\r\n const depthUsage = this._xrSessionManager.session.depthUsage;\r\n const depthDataFormat = this._xrSessionManager.session.depthDataFormat;\r\n\r\n if (engine.isWebGPU && depthUsage === \"gpu-optimized\") {\r\n if (this._disabledForWebGPUGPUDepth) {\r\n this.disableAutoAttach = true;\r\n return false;\r\n }\r\n this._disableAutoAttachBeforeWebGPUGPUDepth = this._autoAttachPolicyBeforeAttach ?? this.disableAutoAttach;\r\n this._disabledForWebGPUGPUDepth = true;\r\n return this._disableAutoAttach(WebGPUGPUDepthWarning);\r\n }\r\n\r\n if (depthUsage == null || depthDataFormat == null) {\r\n return false;\r\n }\r\n\r\n if (!super.attach(force)) {\r\n return false;\r\n }\r\n\r\n if (!engine.isWebGPU) {\r\n const graphicsBinding = this._xrSessionManager._getGraphicsBinding();\r\n if (graphicsBinding.bindingType !== WebXRGraphicsBindingType.WebGL) {\r\n throw new Error(\"Expected a WebGL graphics binding for WebXR Depth Sensing.\");\r\n }\r\n this._glBinding = graphicsBinding.binding;\r\n }\r\n\r\n IsPluginEnabled = !this.options.disableDepthSensingOnMaterials;\r\n if (IsPluginEnabled) {\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.isEnabled = true;\r\n }\r\n this._onCameraObserver = this._xrSessionManager.scene.onBeforeCameraRenderObservable.add((camera) => {\r\n if (!IsPluginEnabled) {\r\n return;\r\n }\r\n // make sure this is a webxr camera\r\n if (camera.outputRenderTarget) {\r\n const viewport = camera.rigCameras.length > 0 ? camera.rigCameras[0].viewport : camera.viewport;\r\n ScreenSize.width = camera.outputRenderTarget.getRenderWidth() / (!engine.isWebGPU && camera.rigParent ? camera.rigParent.rigCameras.length || 1 : 1);\r\n ScreenSize.height = camera.outputRenderTarget.getRenderHeight();\r\n ShaderViewport.x = viewport.x;\r\n ShaderViewport.y = viewport.y;\r\n ShaderViewport.width = viewport.width;\r\n ShaderViewport.height = viewport.height;\r\n GlobalWorldScale = this._xrSessionManager.worldScalingFactor;\r\n\r\n // find the viewIndex\r\n if (camera.rigParent) {\r\n const viewIndex = camera.rigParent.rigCameras.indexOf(camera);\r\n ViewIndex = viewIndex === -1 ? 0 : viewIndex;\r\n if (engine.isWebGPU && this.depthUsage === \"cpu\") {\r\n this._bindCPUDepthView(ViewIndex, false);\r\n }\r\n } else if (camera._renderingMultiview && engine.isWebGPU && this.depthUsage === \"cpu\") {\r\n ViewIndex = 0;\r\n const rightCamera = camera.rigCameras[1];\r\n if (rightCamera) {\r\n RightView.copyFrom(rightCamera.getViewMatrix());\r\n }\r\n this._bindCPUDepthView(0, true);\r\n }\r\n }\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override detach() {\r\n IsPluginEnabled = false;\r\n DepthTexture = null;\r\n DepthTextureRight = null;\r\n this._cachedWebGLTexture = null;\r\n this._cachedDepthBuffer = null;\r\n this._width = null;\r\n this._height = null;\r\n this._rawValueToMeters = null;\r\n this._textureType = null;\r\n this._normDepthBufferFromNormView = null;\r\n let cachedTextureDisposed = false;\r\n for (const viewState of this._cpuDepthViewStates) {\r\n viewState.texture?.dispose();\r\n cachedTextureDisposed ||= viewState.texture === this._cachedDepthImageTexture;\r\n }\r\n this._cpuDepthViewStates.length = 0;\r\n if (!cachedTextureDisposed) {\r\n if (this._cachedDepthImageTextureWrapsExternalTexture && this._cachedDepthImageTexture?._texture) {\r\n this._cachedDepthImageTexture._texture._hardwareTexture = null;\r\n }\r\n this._cachedDepthImageTexture?.dispose();\r\n }\r\n this._cachedDepthImageTexture = null;\r\n this._cachedDepthImageTextureWrapsExternalTexture = false;\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.isEnabled = false;\r\n }\r\n if (this._onCameraObserver) {\r\n this._xrSessionManager.scene.onBeforeCameraRenderObservable.remove(this._onCameraObserver);\r\n this._onCameraObserver = null;\r\n }\r\n return super.detach();\r\n }\r\n\r\n /**\r\n * Dispose this feature and all of the resources attached\r\n */\r\n public override dispose(): void {\r\n if (this._onSessionEndedObserver) {\r\n this._xrSessionManager.onXRSessionEnded.remove(this._onSessionEndedObserver);\r\n this._onSessionEndedObserver = null;\r\n }\r\n super.dispose();\r\n UnregisterMaterialPlugin(\"WebXRDepthSensingMaterialPlugin\");\r\n this.onGetDepthInMetersAvailable.clear();\r\n // cleanup\r\n if (this._onCameraObserver) {\r\n this._xrSessionManager.scene.onBeforeCameraRenderObservable.remove(this._onCameraObserver);\r\n }\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.dispose();\r\n }\r\n ManagedMaterialPlugins.length = 0;\r\n }\r\n\r\n protected _onXRFrame(_xrFrame: XRFrame): void {\r\n const referenceSPace = this._xrSessionManager.referenceSpace;\r\n const depthUsage = this.depthUsage;\r\n if (depthUsage === \"cpu\") {\r\n for (const viewState of this._cpuDepthViewStates) {\r\n viewState.available = false;\r\n }\r\n }\r\n const pose = _xrFrame.getViewerPose(referenceSPace);\r\n if (pose == null) {\r\n if (depthUsage === \"cpu\") {\r\n this._clearCPUDepthBinding();\r\n }\r\n return;\r\n }\r\n for (let viewIndex = 0; viewIndex < pose.views.length; viewIndex++) {\r\n const view = pose.views[viewIndex];\r\n switch (depthUsage) {\r\n case \"cpu\":\r\n this._updateDepthInformationAndTextureCPUDepthUsage(_xrFrame, view, viewIndex, this.depthDataFormat);\r\n break;\r\n case \"gpu\":\r\n if (!this._glBinding) {\r\n break;\r\n }\r\n this._updateDepthInformationAndTextureWebGLDepthUsage(this._glBinding, view, this.depthDataFormat);\r\n break;\r\n default:\r\n Logger.Error(\"Unknown depth usage\");\r\n this.detach();\r\n break;\r\n }\r\n }\r\n if (depthUsage === \"cpu\" && !this._cpuDepthViewStates.some((viewState) => viewState.available)) {\r\n this._clearCPUDepthBinding();\r\n }\r\n }\r\n\r\n private _updateDepthInformationAndTextureCPUDepthUsage(frame: XRFrame, view: XRView, viewIndex: number, dataFormat: WebXRDepthDataFormat): void {\r\n const depthInfo = frame.getDepthInformation(view);\r\n if (depthInfo == null) {\r\n return;\r\n }\r\n\r\n const { data, width, height, rawValueToMeters, getDepthInMeters, normDepthBufferFromNormView } = depthInfo as XRCPUDepthInformation;\r\n let viewState = this._cpuDepthViewStates[viewIndex];\r\n if (!viewState) {\r\n viewState = {\r\n available: true,\r\n height,\r\n rawValueToMeters,\r\n texture: null,\r\n uvTransform: Matrix.Identity(),\r\n visualizationDepthBuffer: null,\r\n width,\r\n };\r\n this._cpuDepthViewStates[viewIndex] = viewState;\r\n }\r\n\r\n const textureSizeChanged = viewState.width !== width || viewState.height !== height;\r\n this._width = width;\r\n this._height = height;\r\n this._rawValueToMeters = rawValueToMeters;\r\n this._normDepthBufferFromNormView = normDepthBufferFromNormView;\r\n this._cachedDepthBuffer = data;\r\n AlphaLuminanceTexture = dataFormat === \"luminance-alpha\";\r\n viewState.height = height;\r\n viewState.available = true;\r\n viewState.rawValueToMeters = rawValueToMeters;\r\n viewState.uvTransform.fromArray(normDepthBufferFromNormView.matrix);\r\n viewState.width = width;\r\n\r\n // to avoid Illegal Invocation error, bind `this`\r\n this.onGetDepthInMetersAvailable.notifyObservers(getDepthInMeters.bind(depthInfo));\r\n\r\n if (!viewState.texture || textureSizeChanged) {\r\n viewState.texture?.dispose();\r\n viewState.texture = RawTexture.CreateRTexture(\r\n null,\r\n width,\r\n height,\r\n this._xrSessionManager.scene,\r\n false,\r\n false,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\r\n }\r\n this._cachedDepthImageTextureWrapsExternalTexture = false;\r\n this._cachedDepthImageTexture = viewState.texture;\r\n\r\n let depthValues: Float32Array | Uint16Array | null = null;\r\n switch (dataFormat) {\r\n case \"ushort\":\r\n case \"luminance-alpha\":\r\n depthValues = new Uint16Array(data);\r\n break;\r\n case \"float\":\r\n depthValues = new Float32Array(data);\r\n break;\r\n default:\r\n break;\r\n }\r\n if (depthValues) {\r\n let uploadData: Float32Array;\r\n if (this.options.prepareTextureForVisualization) {\r\n if (!viewState.visualizationDepthBuffer || viewState.visualizationDepthBuffer.length !== depthValues.length) {\r\n viewState.visualizationDepthBuffer = new Float32Array(depthValues.length);\r\n }\r\n uploadData = viewState.visualizationDepthBuffer;\r\n for (let index = 0; index < depthValues.length; index++) {\r\n uploadData[index] = depthValues[index] * rawValueToMeters;\r\n }\r\n } else {\r\n uploadData = depthValues instanceof Float32Array ? depthValues : Float32Array.from(depthValues);\r\n }\r\n viewState.texture.update(uploadData);\r\n }\r\n\r\n if (!this._xrSessionManager.scene.getEngine().isWebGPU) {\r\n const hadDepthTexture = !!DepthTexture;\r\n DepthTexture = viewState.texture;\r\n DepthTextureRight = null;\r\n GlobalDepthAvailableLeft = 1;\r\n GlobalDepthAvailableRight = 0;\r\n GlobalRawValueToMeters = viewState.rawValueToMeters;\r\n UvTransform.copyFrom(viewState.uvTransform);\r\n if (!hadDepthTexture) {\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n }\r\n\r\n private _clearCPUDepthBinding(): void {\r\n if (DepthTexture) {\r\n DepthTexture = null;\r\n DepthTextureRight = null;\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n\r\n private _bindCPUDepthView(viewIndex: number, multiview: boolean): void {\r\n const leftViewState = this._cpuDepthViewStates[0];\r\n const rightViewState = multiview ? this._cpuDepthViewStates[1] : null;\r\n const viewState = multiview\r\n ? leftViewState?.available && leftViewState.texture\r\n ? leftViewState\r\n : rightViewState?.available && rightViewState.texture\r\n ? rightViewState\r\n : null\r\n : this._cpuDepthViewStates[viewIndex];\r\n if (!viewState?.available || !viewState.texture) {\r\n this._clearCPUDepthBinding();\r\n return;\r\n }\r\n\r\n const hadDepthTexture = !!DepthTexture;\r\n if (multiview && leftViewState?.available && leftViewState.texture) {\r\n GlobalDepthAvailableLeft = 1;\r\n DepthTexture = leftViewState.texture;\r\n GlobalRawValueToMeters = leftViewState.rawValueToMeters;\r\n UvTransform.copyFrom(leftViewState.uvTransform);\r\n } else {\r\n GlobalDepthAvailableLeft = multiview ? 0 : 1;\r\n DepthTexture = viewState.texture;\r\n GlobalRawValueToMeters = viewState.rawValueToMeters;\r\n UvTransform.copyFrom(viewState.uvTransform);\r\n }\r\n if (multiview && rightViewState?.available && rightViewState.texture) {\r\n GlobalDepthAvailableRight = 1;\r\n DepthTextureRight = rightViewState.texture;\r\n GlobalRawValueToMetersRight = rightViewState.rawValueToMeters;\r\n UvTransformRight.copyFrom(rightViewState.uvTransform);\r\n } else {\r\n GlobalDepthAvailableRight = 0;\r\n DepthTextureRight = viewState.texture;\r\n GlobalRawValueToMetersRight = viewState.rawValueToMeters;\r\n UvTransformRight.copyFrom(viewState.uvTransform);\r\n }\r\n\r\n if (!hadDepthTexture) {\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n }\r\n\r\n private _updateDepthInformationAndTextureWebGLDepthUsage(webglBinding: XRWebGLBinding, view: XRView, dataFormat: WebXRDepthDataFormat): void {\r\n const depthInfo = webglBinding.getDepthInformation(view);\r\n if (depthInfo === null) {\r\n return;\r\n }\r\n const { texture, width, height, textureType, rawValueToMeters, normDepthBufferFromNormView } = depthInfo as XRWebGLDepthInformation;\r\n\r\n GlobalRawValueToMeters = rawValueToMeters;\r\n AlphaLuminanceTexture = dataFormat === \"luminance-alpha\";\r\n UvTransform.fromArray(normDepthBufferFromNormView.matrix);\r\n\r\n if (this._cachedWebGLTexture) {\r\n return;\r\n }\r\n\r\n this._width = width;\r\n this._height = height;\r\n this._cachedWebGLTexture = texture;\r\n this._textureType = textureType;\r\n\r\n const scene = this._xrSessionManager.scene;\r\n const internalTexture = this._getInternalTextureFromDepthInfo();\r\n\r\n if (!this._cachedDepthImageTexture) {\r\n this._cachedDepthImageTexture = RawTexture.CreateRTexture(\r\n null,\r\n width,\r\n height,\r\n scene,\r\n false,\r\n true,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n dataFormat === \"float\" ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n this._cachedDepthImageTexture._texture?.dispose();\r\n }\r\n\r\n this._cachedDepthImageTexture._texture = internalTexture;\r\n this._cachedDepthImageTextureWrapsExternalTexture = true;\r\n DepthTexture = this._cachedDepthImageTexture;\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Extends the session init object if needed\r\n * @returns augmentation object for the xr session init object.\r\n */\r\n public async getXRSessionInitExtension(): Promise<Partial<XRSessionInit>> {\r\n const isDepthUsageDeclared = this.options.usagePreference != null && this.options.usagePreference.length !== 0;\r\n const isDataFormatDeclared = this.options.dataFormatPreference != null && this.options.dataFormatPreference.length !== 0;\r\n\r\n return await new Promise((resolve) => {\r\n if (isDepthUsageDeclared && isDataFormatDeclared) {\r\n const usages: XRDepthUsage[] = this.options.usagePreference.map((usage) => {\r\n switch (usage) {\r\n case \"cpu\":\r\n return \"cpu-optimized\";\r\n case \"gpu\":\r\n return \"gpu-optimized\";\r\n }\r\n });\r\n const dataFormats: XRDepthDataFormat[] = this.options.dataFormatPreference.map((format) => {\r\n switch (format) {\r\n case \"luminance-alpha\":\r\n return \"luminance-alpha\";\r\n case \"float\":\r\n return \"float32\";\r\n case \"ushort\":\r\n return \"unsigned-short\";\r\n }\r\n });\r\n\r\n resolve({\r\n depthSensing: {\r\n usagePreference: usages,\r\n dataFormatPreference: dataFormats,\r\n },\r\n });\r\n } else {\r\n resolve({});\r\n }\r\n });\r\n }\r\n\r\n private _getInternalTextureFromDepthInfo(): InternalTexture {\r\n const engine = this._xrSessionManager.scene.getEngine();\r\n const dataFormat = this.depthDataFormat;\r\n const textureType = this._textureType;\r\n if (!this._width || !this._height || !this._cachedWebGLTexture) {\r\n throw new Error(\"Depth information is not available\");\r\n }\r\n const internalTexture = (engine as Engine).wrapWebGLTexture(\r\n this._cachedWebGLTexture,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n this._width || 256,\r\n this._height || 256\r\n );\r\n internalTexture.isCube = false;\r\n internalTexture.invertY = false;\r\n internalTexture._useSRGBBuffer = false;\r\n internalTexture.format = dataFormat === \"luminance-alpha\" ? Constants.TEXTUREFORMAT_LUMINANCE_ALPHA : Constants.TEXTUREFORMAT_RGBA;\r\n internalTexture.generateMipMaps = false;\r\n internalTexture.type =\r\n dataFormat === \"float\" ? Constants.TEXTURETYPE_FLOAT : dataFormat === \"ushort\" ? Constants.TEXTURETYPE_UNSIGNED_SHORT : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture._cachedWrapU = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n internalTexture._cachedWrapV = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n internalTexture._hardwareTexture = new WebGLHardwareTexture(this._cachedWebGLTexture, (engine as ThinEngine)._gl);\r\n internalTexture.is2DArray = textureType === \"texture-array\";\r\n\r\n return internalTexture;\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for webXRDepthSensing.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterWebXRDepthSensing(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n RegisterClass(`BABYLON.DepthSensingMaterialPlugin`, WebXRDepthSensingMaterialPlugin);\r\n\r\n WebXRFeaturesManager.AddWebXRFeature(\r\n WebXRDepthSensing.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRDepthSensing(xrSessionManager, options);\r\n },\r\n WebXRDepthSensing.Version,\r\n false\r\n );\r\n}\r\n"]}
@@ -6,6 +6,7 @@ import { Matrix, Quaternion } from "../../Maths/math.vector.pure.js";
6
6
  import { PhysicsImpostor } from "../../Physics/v1/physicsImpostor.pure.js";
7
7
  import { PhysicsAggregate } from "../../Physics/v2/physicsAggregate.js";
8
8
  import { Observable } from "../../Misc/observable.pure.js";
9
+ import { RegisterInstancedMesh } from "../../Meshes/instancedMesh.pure.js";
9
10
  import { SceneLoader } from "../../Loading/sceneLoader.js";
10
11
  import { Color3 } from "../../Maths/math.color.pure.js";
11
12
  import { NodeMaterialParseFromFileAsync } from "../../Materials/Node/nodeMaterial.pure.js";
@@ -862,6 +863,7 @@ export function RegisterWebXRHandTracking() {
862
863
  return;
863
864
  }
864
865
  _Registered = true;
866
+ RegisterInstancedMesh();
865
867
  //register the plugin
866
868
  WebXRFeaturesManager.AddWebXRFeature(WebXRHandTracking.Name, (xrSessionManager, options) => {
867
869
  return () => new WebXRHandTracking(xrSessionManager, options);