@onerjs/core 8.55.7 → 8.55.9
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.
- package/Animations/animation.pure.js +2 -2
- package/Animations/animation.pure.js.map +1 -1
- package/Animations/runtimeAnimation.js +4 -0
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js +1 -1
- package/Behaviors/Cameras/autoRotationBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -0
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js +1 -0
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/followCameraPointersInput.d.ts +15 -0
- package/Cameras/Inputs/followCameraPointersInput.js +18 -3
- package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.pure.js +1 -1
- package/Cameras/Stereoscopic/stereoscopicUniversalCamera.pure.js.map +1 -1
- package/Cameras/arcRotateCamera.pure.js +1 -1
- package/Cameras/arcRotateCamera.pure.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +1 -0
- package/Collisions/gpuPicker.js +5 -4
- package/Collisions/gpuPicker.js.map +1 -1
- package/Culling/Helper/boundingInfoHelper.js +1 -1
- package/Culling/Helper/boundingInfoHelper.js.map +1 -1
- package/Culling/boundingSphere.js +7 -4
- package/Culling/boundingSphere.js.map +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js +1 -1
- package/Engines/Extensions/engine.prefilteredCubeTexture.pure.js.map +1 -1
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js +48 -6
- package/Engines/Native/Extensions/nativeEngine.cubeTexture.pure.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +1 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/abstractEngine.pure.js +2 -2
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/engine.d.ts +10 -1
- package/Engines/thinNativeEngine.pure.d.ts +6 -1
- package/Engines/thinNativeEngine.pure.js +29 -2
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.d.ts +3 -63
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.js +5 -71
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.pure.d.ts +71 -0
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.pure.js +86 -0
- package/FlowGraph/Blocks/Data/flowGraphIsKeyPressedBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Data/pure.d.ts +1 -0
- package/FlowGraph/Blocks/Data/pure.js +1 -0
- package/FlowGraph/Blocks/Data/pure.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.d.ts +3 -37
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.js +5 -39
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.pure.d.ts +45 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.pure.js +54 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyDownEventBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.d.ts +3 -17
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.js +5 -22
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.pure.d.ts +25 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.pure.js +37 -0
- package/FlowGraph/Blocks/Event/flowGraphKeyUpEventBlock.pure.js.map +1 -0
- package/FlowGraph/Blocks/Event/pure.d.ts +2 -0
- package/FlowGraph/Blocks/Event/pure.js +2 -0
- package/FlowGraph/Blocks/Event/pure.js.map +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.d.ts +1 -1
- package/FlowGraph/Blocks/flowGraphBlockFactory.js +198 -172
- package/FlowGraph/Blocks/flowGraphBlockFactory.js.map +1 -1
- package/FrameGraph/frameGraph.js +10 -1
- package/FrameGraph/frameGraph.js.map +1 -1
- package/Gamepads/gamepadManager.d.ts +1 -0
- package/Gamepads/gamepadManager.js +5 -2
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/scaleGizmo.js +1 -0
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Lights/IES/iesLoader.js +6 -8
- package/Lights/IES/iesLoader.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +4 -6
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.js +2 -2
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/light.js +3 -5
- package/Lights/light.js.map +1 -1
- package/Lights/spotLight.pure.js +1 -1
- package/Lights/spotLight.pure.js.map +1 -1
- package/Materials/Background/backgroundMaterial.pure.d.ts +1 -1
- package/Materials/Background/backgroundMaterial.pure.js +3 -12
- package/Materials/Background/backgroundMaterial.pure.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js +2 -0
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.pure.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.pure.js +1 -1
- package/Materials/Node/Blocks/Fragment/TBNBlock.pure.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.d.ts +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js +3 -12
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.pure.d.ts +1 -1
- package/Materials/PBR/pbrBaseMaterial.pure.js +3 -12
- package/Materials/PBR/pbrBaseMaterial.pure.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.pure.js +1 -1
- package/Materials/Textures/renderTargetTexture.pure.js.map +1 -1
- package/Materials/material.pure.js +2 -2
- package/Materials/material.pure.js.map +1 -1
- package/Materials/standardMaterial.pure.d.ts +1 -1
- package/Materials/standardMaterial.pure.js +4 -13
- package/Materials/standardMaterial.pure.js.map +1 -1
- package/Maths/math.path.js +1 -1
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.polar.js +1 -1
- package/Maths/math.polar.js.map +1 -1
- package/Maths/math.vector.pure.js +4 -3
- package/Maths/math.vector.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.d.ts +72 -0
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js +164 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.d.ts +2 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +36 -18
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.pure.d.ts +5 -4
- package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.pure.js +25 -8
- package/Meshes/GaussianSplatting/gaussianSplattingPartProxyMesh.pure.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js +3 -3
- package/Meshes/GreasedLine/greasedLineRibbonMesh.pure.js.map +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js +1 -1
- package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js +2 -2
- package/Meshes/Node/Blocks/geometryOptimizeBlock.pure.js.map +1 -1
- package/Meshes/Node/Blocks/mappingBlock.pure.js +2 -2
- package/Meshes/Node/Blocks/mappingBlock.pure.js.map +1 -1
- package/Meshes/csg.js +5 -5
- package/Meshes/csg.js.map +1 -1
- package/Meshes/groundMesh.pure.js +1 -1
- package/Meshes/groundMesh.pure.js.map +1 -1
- package/Meshes/mesh.pure.js +2 -2
- package/Meshes/mesh.pure.js.map +1 -1
- package/Misc/deepMerger.js +1 -1
- package/Misc/deepMerger.js.map +1 -1
- package/Misc/dumpTools.pure.js +1 -1
- package/Misc/dumpTools.pure.js.map +1 -1
- package/Misc/index.d.ts +1 -0
- package/Misc/index.js +1 -0
- package/Misc/index.js.map +1 -1
- package/Misc/pure.d.ts +1 -0
- package/Misc/pure.js +1 -0
- package/Misc/pure.js.map +1 -1
- package/Misc/shaderImportLoader.d.ts +25 -0
- package/Misc/shaderImportLoader.js +54 -0
- package/Misc/shaderImportLoader.js.map +1 -0
- package/Misc/tools.pure.js +1 -1
- package/Misc/tools.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleClampBlock.pure.d.ts +0 -1
- package/Particles/Node/Blocks/particleClampBlock.pure.js +1 -6
- package/Particles/Node/Blocks/particleClampBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleMathBlock.pure.js +1 -1
- package/Particles/Node/Blocks/particleMathBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleNLerpBlock.pure.js +8 -3
- package/Particles/Node/Blocks/particleNLerpBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleSmoothStepBlock.pure.js +3 -2
- package/Particles/Node/Blocks/particleSmoothStepBlock.pure.js.map +1 -1
- package/Particles/Node/Blocks/particleStepBlock.pure.js +3 -2
- package/Particles/Node/Blocks/particleStepBlock.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.js +1 -1
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js +1 -1
- package/PostProcesses/screenSpaceCurvaturePostProcess.pure.js.map +1 -1
- package/PostProcesses/sharpenPostProcess.pure.js +1 -1
- package/PostProcesses/sharpenPostProcess.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.d.ts +12 -0
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js +15 -1
- package/Rendering/IBLShadows/iblShadowsRenderPipeline.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.d.ts +14 -0
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js +122 -6
- package/Rendering/IBLShadows/iblShadowsVoxelRenderer.pure.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +7 -0
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +17 -0
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/boundingBoxRenderer.pure.js +3 -3
- package/Rendering/boundingBoxRenderer.pure.js.map +1 -1
- package/Rendering/outlineRenderer.pure.js +1 -0
- package/Rendering/outlineRenderer.pure.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.js +1 -1
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/subSurfaceSceneComponent.pure.d.ts +1 -1
- package/Rendering/subSurfaceSceneComponent.pure.js +1 -1
- package/Rendering/subSurfaceSceneComponent.pure.js.map +1 -1
- package/Rendering/utilityLayerRenderer.js +1 -1
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/gaussianSplattingVoxel.fragment.js +4 -10
- package/Shaders/gaussianSplattingVoxel.fragment.js.map +1 -1
- package/Shaders/iblCombineVoxelGrids.fragment.js +1 -1
- package/Shaders/iblCombineVoxelGrids.fragment.js.map +1 -1
- package/Shaders/iblShadowVoxelTracing.fragment.js +24 -7
- package/Shaders/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/ShadersInclude/iblVoxelOpacityAtomicMax.d.ts +5 -0
- package/ShadersWGSL/ShadersInclude/iblVoxelOpacityAtomicMax.js +13 -0
- package/ShadersWGSL/ShadersInclude/iblVoxelOpacityAtomicMax.js.map +1 -0
- package/ShadersWGSL/gaussianSplattingVoxel.fragment.js +15 -9
- package/ShadersWGSL/gaussianSplattingVoxel.fragment.js.map +1 -1
- package/ShadersWGSL/iblCombineVoxelGrids.fragment.js +1 -1
- package/ShadersWGSL/iblCombineVoxelGrids.fragment.js.map +1 -1
- package/ShadersWGSL/iblCopyVoxelBufferToGrid.compute.d.ts +5 -0
- package/ShadersWGSL/iblCopyVoxelBufferToGrid.compute.js +14 -0
- package/ShadersWGSL/iblCopyVoxelBufferToGrid.compute.js.map +1 -0
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js +24 -7
- package/ShadersWGSL/iblShadowVoxelTracing.fragment.js.map +1 -1
- package/ShadersWGSL/iblVoxelGrid.fragment.js +26 -6
- package/ShadersWGSL/iblVoxelGrid.fragment.js.map +1 -1
- package/SmartAssets/smartAssetManager.pure.js +1 -1
- package/SmartAssets/smartAssetManager.pure.js.map +1 -1
- package/Sprites/thinSprite.js +1 -1
- package/Sprites/thinSprite.js.map +1 -1
- package/XR/features/Layers/WebXRCompositionLayer.d.ts +130 -12
- package/XR/features/Layers/WebXRCompositionLayer.js +192 -3
- package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
- package/XR/features/Layers/WebXRFallbackLayer.d.ts +84 -0
- package/XR/features/Layers/WebXRFallbackLayer.js +137 -0
- package/XR/features/Layers/WebXRFallbackLayer.js.map +1 -0
- package/XR/features/Layers/WebXRWebGPUCompositionLayer.d.ts +4 -4
- package/XR/features/Layers/WebXRWebGPUCompositionLayer.js.map +1 -1
- package/XR/features/WebXRAnchorSystem.pure.d.ts +45 -0
- package/XR/features/WebXRAnchorSystem.pure.js +153 -13
- package/XR/features/WebXRAnchorSystem.pure.js.map +1 -1
- package/XR/features/WebXRLayers.pure.d.ts +171 -8
- package/XR/features/WebXRLayers.pure.js +500 -98
- package/XR/features/WebXRLayers.pure.js.map +1 -1
- package/XR/features/WebXRLayersFallback.d.ts +5 -0
- package/XR/features/WebXRLayersFallback.js +8 -0
- package/XR/features/WebXRLayersFallback.js.map +1 -0
- package/XR/features/WebXRLayersFallback.pure.d.ts +6 -0
- package/XR/features/WebXRLayersFallback.pure.js +44 -0
- package/XR/features/WebXRLayersFallback.pure.js.map +1 -0
- package/XR/features/WebXRLightEstimation.pure.d.ts +3 -4
- package/XR/features/WebXRLightEstimation.pure.js +22 -21
- package/XR/features/WebXRLightEstimation.pure.js.map +1 -1
- package/XR/features/WebXRMeshDetector.pure.d.ts +5 -0
- package/XR/features/WebXRMeshDetector.pure.js +1 -0
- package/XR/features/WebXRMeshDetector.pure.js.map +1 -1
- package/XR/features/WebXRNearInteraction.pure.js +3 -3
- package/XR/features/WebXRNearInteraction.pure.js.map +1 -1
- package/XR/features/WebXRPlaneDetector.pure.d.ts +9 -5
- package/XR/features/WebXRPlaneDetector.pure.js +12 -8
- package/XR/features/WebXRPlaneDetector.pure.js.map +1 -1
- package/XR/features/pure.d.ts +1 -0
- package/XR/features/pure.js +1 -0
- package/XR/features/pure.js.map +1 -1
- package/XR/webXRCamera.d.ts +2 -0
- package/XR/webXRCamera.js +8 -2
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRLayerWrapper.d.ts +19 -5
- package/XR/webXRLayerWrapper.js +9 -0
- package/XR/webXRLayerWrapper.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +4 -4
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRWebGLRenderTargetTextureProvider.d.ts +2 -1
- package/XR/webXRWebGLRenderTargetTextureProvider.js.map +1 -1
- package/XR/webXRWebGPURenderTargetTextureProvider.d.ts +3 -3
- package/XR/webXRWebGPURenderTargetTextureProvider.js.map +1 -1
- package/package.json +1 -1
- package/scene.pure.d.ts +5 -0
- package/scene.pure.js +25 -0
- package/scene.pure.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebXRLayers.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRLayers.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport { type WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { type WebXRLayerWrapper } from \"../webXRLayerWrapper\";\r\nimport { WebXRWebGLLayerWrapper } from \"../webXRWebGLLayer\";\r\nimport { WebXRProjectionLayerWrapper, DefaultXRProjectionLayerInit } from \"./Layers/WebXRProjectionLayer\";\r\nimport { WebXRCompositionLayerRenderTargetTextureProvider, WebXRCompositionLayerWrapper } from \"./Layers/WebXRCompositionLayer\";\r\nimport { WebXRWebGPUProjectionLayerWrapper, CreateDefaultXRGPUProjectionLayerInit } from \"./Layers/WebXRWebGPUProjectionLayer\";\r\nimport { WebXRWebGPUCompositionLayerRenderTargetTextureProvider, WebXRWebGPUCompositionLayerWrapper } from \"./Layers/WebXRWebGPUCompositionLayer\";\r\nimport { WebXRGraphicsBindingType } from \"../webXRGraphicsBinding\";\r\nimport { type ThinTexture } from \"../../Materials/Textures/thinTexture\";\r\nimport { type DynamicTexture } from \"../../Materials/Textures/dynamicTexture.pure\";\r\nimport { Color4 } from \"../../Maths/math.color.pure\";\r\nimport { type LensFlareSystem } from \"../../LensFlares/lensFlareSystem\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { type Nullable } from \"../../types\";\r\n\r\nconst DefaultXRWebGLLayerInit: XRWebGLLayerInit = {};\r\nconst WebGPUQuadLayerCreateWarning =\r\n \"WebGPU XR quad layers are unavailable because XRGPUBinding.createQuadLayer is not supported; the requested quad layer was skipped and projection rendering remains active.\";\r\nconst WebGPUQuadLayerSubImageWarning =\r\n \"WebGPU XR quad layers are unavailable because XRGPUBinding.getSubImage is not supported; the requested quad layer was skipped and projection rendering remains active.\";\r\n\r\n/**\r\n * Configuration options of the layers feature\r\n */\r\nexport interface IWebXRLayersOptions {\r\n /**\r\n * Whether to try initializing the base projection layer as a multiview render target, if multiview is supported.\r\n * Defaults to false.\r\n */\r\n preferMultiviewOnInit?: boolean;\r\n\r\n /**\r\n * Optional configuration for the base projection layer.\r\n */\r\n projectionLayerInit?: Partial<XRProjectionLayerInit>;\r\n}\r\n\r\n/**\r\n * Exposes the WebXR Layers API.\r\n */\r\nexport class WebXRLayers extends WebXRAbstractFeature {\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.LAYERS;\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 * Already-created layers\r\n */\r\n private _existingLayers: WebXRLayerWrapper[] = [];\r\n\r\n private _glContext: WebGLRenderingContext | WebGL2RenderingContext;\r\n private _xrWebGLBinding: XRWebGLBinding;\r\n private _isWebGPU = false;\r\n private _xrGPUBinding?: XRGPUBinding;\r\n private _isMultiviewEnabled = false;\r\n private _projectionLayerInitialized = false;\r\n\r\n private _compositionLayerTextureMapping: WeakMap<XRCompositionLayer, ThinTexture> = new WeakMap();\r\n private _layerToRTTProviderMapping: WeakMap<XRCompositionLayer, WebXRCompositionLayerRenderTargetTextureProvider | WebXRWebGPUCompositionLayerRenderTargetTextureProvider> =\r\n new WeakMap();\r\n\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n private readonly _options: IWebXRLayersOptions = {}\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"layers\";\r\n }\r\n\r\n /**\r\n * Attach this feature.\r\n * Will usually be called by the features manager.\r\n *\r\n * @returns true if successful.\r\n */\r\n public override attach(): boolean {\r\n if (!super.attach()) {\r\n return false;\r\n }\r\n\r\n const engine = this._xrSessionManager.scene.getEngine();\r\n this._existingLayers.length = 0;\r\n this._isWebGPU = engine.isWebGPU;\r\n\r\n if (this._isWebGPU) {\r\n const binding = this._xrSessionManager._getGraphicsBinding();\r\n if (binding.bindingType !== WebXRGraphicsBindingType.WebGPU) {\r\n throw new Error(\"Expected a WebGPU graphics binding for a WebGPU engine.\");\r\n }\r\n this._xrGPUBinding = binding.binding;\r\n // Multiview is not yet supported on the WebGPU XR path; force single-view (two sub-images).\r\n this._isMultiviewEnabled = false;\r\n this._createWebGPUProjectionLayer();\r\n } else {\r\n const binding = this._xrSessionManager._getGraphicsBinding();\r\n if (binding.bindingType !== WebXRGraphicsBindingType.WebGL) {\r\n throw new Error(\"Expected a WebGL graphics binding for a WebGL engine.\");\r\n }\r\n this._glContext = binding.context;\r\n this._xrWebGLBinding = binding.binding;\r\n\r\n const projectionLayerInit = { ...DefaultXRProjectionLayerInit, ...this._options.projectionLayerInit };\r\n this._isMultiviewEnabled = this._options.preferMultiviewOnInit && engine.getCaps().multiview;\r\n this.createProjectionLayer(projectionLayerInit /*, projectionLayerMultiview*/);\r\n }\r\n this._projectionLayerInitialized = true;\r\n\r\n return true;\r\n }\r\n\r\n public override detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n for (const layer of this._existingLayers) {\r\n layer.dispose();\r\n }\r\n this._existingLayers.length = 0;\r\n this._projectionLayerInitialized = false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a new XRWebGLLayer.\r\n * @param params an object providing configuration options for the new XRWebGLLayer\r\n * @returns the XRWebGLLayer\r\n */\r\n public createXRWebGLLayer(params = DefaultXRWebGLLayerInit): WebXRWebGLLayerWrapper {\r\n const layer = new XRWebGLLayer(this._xrSessionManager.session, this._glContext, params);\r\n return new WebXRWebGLLayerWrapper(layer);\r\n }\r\n\r\n private _validateLayerInit(params: XRProjectionLayerInit | XRQuadLayerInit, multiview = this._isMultiviewEnabled): void {\r\n // check if we are in session\r\n if (!this._xrSessionManager.inXRSession) {\r\n throw new Error(\"Cannot create a layer outside of a WebXR session. Make sure the session has started before creating layers.\");\r\n }\r\n if (multiview && params.textureType !== \"texture-array\") {\r\n throw new Error(\"Projection layers can only be made multiview if they use texture arrays. Set the textureType parameter to 'texture-array'.\");\r\n }\r\n\r\n // TODO (rgerd): Support RTT's that are bound to sub-images in the texture array.\r\n if (!multiview && params.textureType === \"texture-array\") {\r\n throw new Error(\"We currently only support multiview rendering when the textureType parameter is set to 'texture-array'.\");\r\n }\r\n }\r\n\r\n private _extendXRLayerInit(params: XRProjectionLayerInit | XRQuadLayerInit, multiview = this._isMultiviewEnabled): XRProjectionLayerInit | XRQuadLayerInit {\r\n if (multiview) {\r\n params.textureType = \"texture-array\";\r\n }\r\n return params;\r\n }\r\n\r\n /**\r\n * Creates a new XRProjectionLayer.\r\n * @param params an object providing configuration options for the new XRProjectionLayer.\r\n * @param multiview whether the projection layer should render with multiview. Will be tru automatically if the extension initialized with multiview.\r\n * @returns the projection layer\r\n */\r\n public createProjectionLayer(params = DefaultXRProjectionLayerInit, multiview = this._isMultiviewEnabled): WebXRProjectionLayerWrapper {\r\n this._extendXRLayerInit(params, multiview);\r\n this._validateLayerInit(params, multiview);\r\n\r\n const projLayer = this._xrWebGLBinding.createProjectionLayer(params);\r\n const layer = new WebXRProjectionLayerWrapper(projLayer, multiview, this._xrWebGLBinding);\r\n this.addXRSessionLayer(layer);\r\n return layer;\r\n }\r\n\r\n /**\r\n * Creates the base projection layer for the WebGPU (XRGPUBinding) backend.\r\n * Single-view only for now (multiview is deferred); the color format is the binding's preferred format.\r\n * @returns the WebGPU projection layer wrapper\r\n */\r\n private _createWebGPUProjectionLayer(): WebXRWebGPUProjectionLayerWrapper {\r\n if (!this._xrSessionManager.inXRSession) {\r\n throw new Error(\"Cannot create a layer outside of a WebXR session. Make sure the session has started before creating layers.\");\r\n }\r\n const binding = this._xrGPUBinding!;\r\n const init = CreateDefaultXRGPUProjectionLayerInit(binding.getPreferredColorFormat());\r\n const projLayer = binding.createProjectionLayer(init);\r\n const layer = new WebXRWebGPUProjectionLayerWrapper(projLayer, false, binding, init.depthStencilFormat);\r\n this.addXRSessionLayer(layer);\r\n return layer;\r\n }\r\n\r\n /**\r\n * Note about making it private - this function will be exposed once I decide on a proper API to support all of the XR layers' options\r\n * @param options an object providing configuration options for the new XRQuadLayer.\r\n * @param babylonTexture the texture to display in the layer\r\n * @returns the quad layer, or null when the WebGPU binding lacks quad-layer support\r\n */\r\n private _createQuadLayer(options: { params: Partial<XRQuadLayerInit> } = { params: {} }, babylonTexture?: ThinTexture): Nullable<WebXRCompositionLayerWrapper> {\r\n this._extendXRLayerInit(options.params, false);\r\n const width = (this._existingLayers[0].layer as XRProjectionLayer).textureWidth;\r\n const height = (this._existingLayers[0].layer as XRProjectionLayer).textureHeight;\r\n const populatedParams: XRQuadLayerInit = {\r\n space: this._xrSessionManager.referenceSpace,\r\n viewPixelWidth: width,\r\n viewPixelHeight: height,\r\n clearOnAccess: true,\r\n ...options.params,\r\n };\r\n this._validateLayerInit(populatedParams, false);\r\n let quadLayer: XRQuadLayer;\r\n let wrapper: WebXRCompositionLayerWrapper;\r\n\r\n if (this._isWebGPU) {\r\n const binding = this._xrGPUBinding!;\r\n if (typeof binding.createQuadLayer !== \"function\") {\r\n Logger.Warn(WebGPUQuadLayerCreateWarning);\r\n return null;\r\n }\r\n if (typeof binding.getSubImage !== \"function\") {\r\n Logger.Warn(WebGPUQuadLayerSubImageWarning);\r\n return null;\r\n }\r\n\r\n const gpuParams: XRGPUQuadLayerInit = {\r\n colorFormat: binding.getPreferredColorFormat(),\r\n // GPUTextureUsage.RENDER_ATTACHMENT (0x10) is requested explicitly. The usage of a\r\n // compositor-owned sub-image texture is not a valid source for layer creation flags.\r\n textureUsage: 0x10,\r\n space: populatedParams.space,\r\n viewPixelWidth: populatedParams.viewPixelWidth,\r\n viewPixelHeight: populatedParams.viewPixelHeight,\r\n };\r\n if (populatedParams.layout !== undefined) {\r\n gpuParams.layout = populatedParams.layout;\r\n }\r\n if (populatedParams.mipLevels !== undefined) {\r\n gpuParams.mipLevels = populatedParams.mipLevels;\r\n }\r\n if (populatedParams.isStatic !== undefined) {\r\n gpuParams.isStatic = populatedParams.isStatic;\r\n }\r\n if (populatedParams.transform !== undefined) {\r\n gpuParams.transform = populatedParams.transform;\r\n }\r\n if (populatedParams.width !== undefined) {\r\n gpuParams.width = populatedParams.width;\r\n }\r\n if (populatedParams.height !== undefined) {\r\n gpuParams.height = populatedParams.height;\r\n }\r\n quadLayer = binding.createQuadLayer(gpuParams);\r\n wrapper = new WebXRWebGPUCompositionLayerWrapper(\r\n () => quadLayer.width,\r\n () => quadLayer.height,\r\n quadLayer,\r\n \"XRQuadLayer\",\r\n false,\r\n (sessionManager) => new WebXRWebGPUCompositionLayerRenderTargetTextureProvider(sessionManager, binding, wrapper)\r\n );\r\n } else {\r\n quadLayer = this._xrWebGLBinding.createQuadLayer(populatedParams);\r\n wrapper = new WebXRCompositionLayerWrapper(\r\n () => quadLayer.width,\r\n () => quadLayer.height,\r\n quadLayer,\r\n \"XRQuadLayer\",\r\n false,\r\n (sessionManager) => new WebXRCompositionLayerRenderTargetTextureProvider(sessionManager, this._xrWebGLBinding, wrapper)\r\n );\r\n }\r\n\r\n quadLayer.width = this._isMultiviewEnabled ? 1 : 2;\r\n quadLayer.height = 1;\r\n\r\n if (babylonTexture) {\r\n this._compositionLayerTextureMapping.set(quadLayer, babylonTexture);\r\n }\r\n const rtt = wrapper.createRenderTargetTextureProvider(this._xrSessionManager) as\r\n WebXRCompositionLayerRenderTargetTextureProvider | WebXRWebGPUCompositionLayerRenderTargetTextureProvider;\r\n this._layerToRTTProviderMapping.set(quadLayer, rtt);\r\n this.addXRSessionLayer(wrapper);\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * @experimental\r\n * This will support full screen ADT when used with WebXR Layers. This API might change in the future.\r\n * Note that no interaction will be available with the ADT when using this method\r\n * @param texture the texture to display in the layer\r\n * @param options optional parameters for the layer\r\n * @returns a composition layer containing the texture, or null when WebGPU quad layers are unavailable\r\n */\r\n public addFullscreenAdvancedDynamicTexture(\r\n texture: DynamicTexture,\r\n options: { distanceFromHeadset: number } = { distanceFromHeadset: 1.5 }\r\n ): Nullable<WebXRCompositionLayerWrapper> {\r\n const wrapper = this._createQuadLayer(\r\n {\r\n params: {\r\n space: this._xrSessionManager.viewerReferenceSpace,\r\n textureType: \"texture\",\r\n layout: \"mono\",\r\n },\r\n },\r\n texture\r\n );\r\n if (!wrapper) {\r\n return null;\r\n }\r\n\r\n const layer = wrapper.layer as XRQuadLayer;\r\n const distance = Math.max(0.1, options.distanceFromHeadset);\r\n const pos = { x: 0, y: 0, z: -distance };\r\n const orient = { x: 0, y: 0, z: 0, w: 1 };\r\n layer.transform = new XRRigidTransform(pos, orient);\r\n\r\n const rttProvider = this._layerToRTTProviderMapping.get(layer);\r\n if (!rttProvider) {\r\n throw new Error(\"Could not find the RTT provider for the layer\");\r\n }\r\n const babylonLayer = this._xrSessionManager.scene.layers.find((babylonLayer) => {\r\n return babylonLayer.texture === texture;\r\n });\r\n if (!babylonLayer) {\r\n throw new Error(\"Could not find the babylon layer for the texture\");\r\n }\r\n rttProvider.onRenderTargetTextureCreatedObservable.add((data) => {\r\n if (data.eye && data.eye === \"right\") {\r\n return;\r\n }\r\n data.texture.clearColor = new Color4(0, 0, 0, 0);\r\n babylonLayer.renderTargetTextures.push(data.texture);\r\n babylonLayer.renderOnlyInRenderTargetTextures = true;\r\n // for stereo (not for gui) it should be onBeforeCameraRenderObservable\r\n this._xrSessionManager.scene.onBeforeRenderObservable.add(() => {\r\n data.texture.render();\r\n });\r\n babylonLayer.renderTargetTextures.push(data.texture);\r\n babylonLayer.renderOnlyInRenderTargetTextures = true;\r\n // add it back when the session ends\r\n this._xrSessionManager.onXRSessionEnded.addOnce(() => {\r\n babylonLayer.renderTargetTextures.splice(babylonLayer.renderTargetTextures.indexOf(data.texture), 1);\r\n babylonLayer.renderOnlyInRenderTargetTextures = false;\r\n });\r\n });\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * @experimental\r\n * This functions allows you to add a lens flare system to the XR scene.\r\n * Note - this will remove the lens flare system from the scene and add it to the XR scene.\r\n * This feature is experimental and might change in the future.\r\n * @param flareSystem the flare system to add\r\n * @returns a composition layer containing the flare system, or null when WebGPU quad layers are unavailable\r\n */\r\n protected _addLensFlareSystem(flareSystem: LensFlareSystem): Nullable<WebXRCompositionLayerWrapper> {\r\n const wrapper = this._createQuadLayer({\r\n params: {\r\n space: this._xrSessionManager.viewerReferenceSpace,\r\n textureType: \"texture\",\r\n layout: \"mono\",\r\n },\r\n });\r\n if (!wrapper) {\r\n return null;\r\n }\r\n\r\n const layer = wrapper.layer as XRQuadLayer;\r\n layer.width = 2;\r\n layer.height = 1;\r\n const distance = 10;\r\n const pos = { x: 0, y: 0, z: -distance };\r\n const orient = { x: 0, y: 0, z: 0, w: 1 };\r\n layer.transform = new XRRigidTransform(pos, orient);\r\n\r\n // get the rtt wrapper\r\n const rttProvider = this._layerToRTTProviderMapping.get(layer);\r\n if (!rttProvider) {\r\n throw new Error(\"Could not find the RTT provider for the layer\");\r\n }\r\n // render the flare system to the rtt\r\n rttProvider.onRenderTargetTextureCreatedObservable.add((data) => {\r\n data.texture.clearColor = new Color4(0, 0, 0, 0);\r\n data.texture.customRenderFunction = () => {\r\n flareSystem.render();\r\n };\r\n\r\n // add to the scene's render targets\r\n // this._xrSessionManager.scene.onBeforeCameraRenderObservable.add(() => {\r\n // data.texture.render();\r\n // });\r\n });\r\n // remove the lens flare system from the scene\r\n this._xrSessionManager.onXRSessionInit.add(() => {\r\n this._xrSessionManager.scene.lensFlareSystems.splice(this._xrSessionManager.scene.lensFlareSystems.indexOf(flareSystem), 1);\r\n });\r\n // add it back when the session ends\r\n this._xrSessionManager.onXRSessionEnded.add(() => {\r\n this._xrSessionManager.scene.lensFlareSystems.push(flareSystem);\r\n });\r\n\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * Add a new layer to the already-existing list of layers\r\n * @param wrappedLayer the new layer to add to the existing ones\r\n */\r\n public addXRSessionLayer(wrappedLayer: WebXRLayerWrapper) {\r\n this._existingLayers.push(wrappedLayer);\r\n this.setXRSessionLayers(this._existingLayers);\r\n }\r\n\r\n /**\r\n * Sets the layers to be used by the XR session.\r\n * Note that you must call this function with any layers you wish to render to\r\n * since it adds them to the XR session's render state\r\n * (replacing any layers that were added in a previous call to setXRSessionLayers or updateRenderState).\r\n * This method also sets up the session manager's render target texture provider\r\n * as the first layer in the array, which feeds the WebXR camera(s) attached to the session.\r\n * @param wrappedLayers An array of WebXRLayerWrapper, usually returned from the WebXRLayers createLayer functions.\r\n */\r\n public setXRSessionLayers(wrappedLayers: Array<WebXRLayerWrapper> = this._existingLayers): void {\r\n // this._existingLayers = wrappedLayers;\r\n const renderStateInit: XRRenderStateInit = { ...this._xrSessionManager.session.renderState };\r\n // Clear out the layer-related fields.\r\n renderStateInit.baseLayer = undefined;\r\n renderStateInit.layers = wrappedLayers.map((wrappedLayer) => wrappedLayer.layer);\r\n this._xrSessionManager.updateRenderState(renderStateInit);\r\n if (!this._projectionLayerInitialized) {\r\n this._xrSessionManager._setBaseLayerWrapper(wrappedLayers.length > 0 ? wrappedLayers.at(0)! : null);\r\n }\r\n }\r\n\r\n public override isCompatible(): boolean {\r\n if (this._xrSessionManager.scene.getEngine().isWebGPU) {\r\n return typeof XRGPUBinding !== \"undefined\" && !!XRGPUBinding.prototype.createProjectionLayer;\r\n }\r\n // Native WebGL continues to use NativeXRRenderTarget instead of WebXR Layers.\r\n if (this._xrSessionManager.isNative) {\r\n return false;\r\n }\r\n return typeof XRWebGLBinding !== \"undefined\" && !!XRWebGLBinding.prototype.createProjectionLayer;\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 super.dispose();\r\n }\r\n\r\n protected _onXRFrame(_xrFrame: XRFrame): void {\r\n // Replace once the mapped internal texture of each available composition layer, apart from the last one, which is the projection layer that needs an RTT\r\n const layers = this._existingLayers;\r\n for (let i = 0; i < layers.length; ++i) {\r\n const layer = layers[i];\r\n if (layer.layerType !== \"XRProjectionLayer\") {\r\n // get the rtt provider\r\n const rttProvider = this._layerToRTTProviderMapping.get(layer.layer as XRCompositionLayer);\r\n if (!rttProvider) {\r\n continue;\r\n }\r\n\r\n if (rttProvider.layerWrapper.isMultiview) {\r\n // get the views, if we are in multiview\r\n const pose = _xrFrame.getViewerPose(this._xrSessionManager.referenceSpace);\r\n if (pose) {\r\n const views = pose.views;\r\n for (let j = 0; j < views.length; ++j) {\r\n const view = views[j];\r\n rttProvider.getRenderTargetTextureForView(view);\r\n }\r\n }\r\n } else {\r\n rttProvider.getRenderTargetTextureForView();\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for webXRLayers.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterWebXRLayers(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n //register the plugin\r\n WebXRFeaturesManager.AddWebXRFeature(\r\n WebXRLayers.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRLayers(xrSessionManager, options);\r\n },\r\n WebXRLayers.Version,\r\n false\r\n );\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"WebXRLayers.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRLayers.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/** This file must only contain pure code and pure imports */\r\n\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport { type WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { type WebXRLayerWrapper, type WebXRSupportedLayerType } from \"../webXRLayerWrapper\";\r\nimport { type WebXRLayerRenderTargetTextureProvider } from \"../webXRRenderTargetTextureProvider\";\r\nimport { WebXRWebGLLayerWrapper } from \"../webXRWebGLLayer\";\r\nimport { WebXRProjectionLayerWrapper, DefaultXRProjectionLayerInit } from \"./Layers/WebXRProjectionLayer\";\r\nimport {\r\n WebXRCompositionLayerRenderTargetTextureProvider,\r\n WebXRCompositionLayerWrapper,\r\n WebXRCubeLayerWrapper,\r\n WebXRMediaLayerWrapper,\r\n WebXRSpatialLayerWrapper,\r\n type WebXRSpatialLayer,\r\n type WebXRSpatialLayerType,\r\n} from \"./Layers/WebXRCompositionLayer\";\r\nimport { WebXRWebGPUProjectionLayerWrapper, CreateDefaultXRGPUProjectionLayerInit } from \"./Layers/WebXRWebGPUProjectionLayer\";\r\nimport { WebXRWebGPUCompositionLayerRenderTargetTextureProvider } from \"./Layers/WebXRWebGPUCompositionLayer\";\r\nimport { WebXRGraphicsBindingType } from \"../webXRGraphicsBinding\";\r\nimport { type ThinTexture } from \"../../Materials/Textures/thinTexture\";\r\nimport { type RenderTargetTexture } from \"../../Materials/Textures/renderTargetTexture.pure\";\r\nimport { type DynamicTexture } from \"../../Materials/Textures/dynamicTexture.pure\";\r\nimport { Color4 } from \"../../Maths/math.color.pure\";\r\nimport { type LensFlareSystem } from \"../../LensFlares/lensFlareSystem\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { type Observer } from \"../../Misc/observable.pure\";\r\nimport { type Scene } from \"../../scene.pure\";\r\nimport { TransformNode } from \"../../Meshes/transformNode.pure\";\r\nimport { Quaternion } from \"../../Maths/math.vector.pure\";\r\nimport { type BaseTexture } from \"../../Materials/Textures/baseTexture\";\r\nimport { type WebXRFallbackLayerWrapper, type IWebXRFallbackLayerDimensions } from \"./Layers/WebXRFallbackLayer\";\r\n\r\nexport { WebXRCompositionLayerWrapper, WebXRCubeLayerWrapper, WebXRMediaLayerWrapper, WebXRSpatialLayerWrapper } from \"./Layers/WebXRCompositionLayer\";\r\nexport type { WebXRSpatialLayer, WebXRSpatialLayerType } from \"./Layers/WebXRCompositionLayer\";\r\nexport type { IWebXRFallbackLayerDimensions, WebXRFallbackLayerWrapper } from \"./Layers/WebXRFallbackLayer\";\r\n\r\nconst DefaultXRWebGLLayerInit: XRWebGLLayerInit = {};\r\nconst WebGPUQuadLayerCreateWarning =\r\n \"WebGPU XR quad layers are unavailable because XRGPUBinding.createQuadLayer is not supported; the requested quad layer was skipped and projection rendering remains active.\";\r\nconst WebGPUQuadLayerSubImageWarning =\r\n \"WebGPU XR quad layers are unavailable because XRGPUBinding.getSubImage is not supported; the requested quad layer was skipped and projection rendering remains active.\";\r\n\r\ntype WebXRGraphicsLayerInit = XRLayerInit & { textureType?: XRTextureType };\r\ntype WebXRGPUGraphicsLayerInit = XRGPULayerInit;\r\n\r\n/**\r\n * Configuration options of the layers feature\r\n */\r\nexport interface IWebXRLayersOptions {\r\n /**\r\n * Whether to try initializing the base projection layer as a multiview render target, if multiview is supported.\r\n * Defaults to false.\r\n */\r\n preferMultiviewOnInit?: boolean;\r\n\r\n /**\r\n * Optional configuration for the base projection layer.\r\n */\r\n projectionLayerInit?: Partial<XRProjectionLayerInit>;\r\n}\r\n\r\n/**\r\n * Common options for creating a graphics-backed WebXR composition layer.\r\n * @typeParam TWebGLInit the WebGL layer initialization dictionary\r\n * @typeParam TWebGPUInit the WebGPU layer initialization dictionary\r\n */\r\nexport interface IWebXRCompositionLayerCreationOptions<TWebGLInit, TWebGPUInit> {\r\n /**\r\n * Initialization values shared with the WebGL Layers API.\r\n * Babylon supplies the current reference space and projection-layer pixel dimensions when omitted.\r\n */\r\n layerInit?: Partial<TWebGLInit>;\r\n /**\r\n * WebGPU-specific initialization overrides.\r\n * Shared spatial and layout values are copied from `layerInit` before these overrides are applied.\r\n */\r\n gpuLayerInit?: Partial<TWebGPUInit>;\r\n /**\r\n * A Babylon node whose world position and rotation will be synchronized with the layer.\r\n * Babylon creates and owns a node when this is omitted.\r\n */\r\n transformNode?: TransformNode;\r\n /**\r\n * Uses a Babylon mesh when the requested native layer factory is unavailable.\r\n * Import `@babylonjs/core/XR/features/WebXRLayersFallback` to enable this optional fallback.\r\n * Fallback is disabled by default.\r\n */\r\n fallbackMode?: \"none\" | \"mesh\";\r\n /**\r\n * A texture to display on the fallback mesh.\r\n * Required when `fallbackMode` is `\"mesh\"`.\r\n */\r\n fallbackTexture?: BaseTexture;\r\n}\r\n\r\n/**\r\n * Common options for creating an XRMediaBinding layer.\r\n * @typeParam InitT the media layer initialization dictionary\r\n */\r\nexport interface IWebXRMediaLayerCreationOptions<InitT> {\r\n /**\r\n * Initialization values for the media layer.\r\n * Babylon supplies the current reference space when omitted.\r\n */\r\n layerInit?: Partial<InitT>;\r\n /**\r\n * A Babylon node whose world position and rotation will be synchronized with the layer.\r\n * Babylon creates and owns a node when this is omitted.\r\n */\r\n transformNode?: TransformNode;\r\n /**\r\n * Uses a Babylon mesh and VideoTexture when XRMediaBinding is unavailable.\r\n * Import `@babylonjs/core/XR/features/WebXRLayersFallback` to enable this optional fallback.\r\n * Fallback is disabled by default.\r\n */\r\n fallbackMode?: \"none\" | \"mesh\";\r\n}\r\n\r\n/**\r\n * Selects whether a layer is created from a graphics binding or directly from a media element.\r\n */\r\nexport type WebXRLayerSource = \"graphics\" | \"media\";\r\n\r\n/**\r\n * The result of creating a spatial WebXR layer.\r\n * Native wrappers expose an XR composition layer, while fallback wrappers expose a Babylon mesh.\r\n * @typeParam LayerT the native layer type\r\n */\r\nexport type WebXRLayerCreationResult<LayerT extends WebXRSpatialLayer, LayerTypeT extends WebXRSpatialLayerType = WebXRSpatialLayerType> =\r\n WebXRSpatialLayerWrapper<LayerT, LayerTypeT> | WebXRFallbackLayerWrapper;\r\n\r\n/**\r\n * Data supplied to an optional WebXR mesh-fallback implementation.\r\n * @internal\r\n */\r\nexport interface IWebXRFallbackLayerCreationContext {\r\n scene: WebXRSessionManager[\"scene\"];\r\n isWebGPU: boolean;\r\n layerType: WebXRSpatialLayerType;\r\n transformNode: TransformNode;\r\n ownsTransformNode: boolean;\r\n dimensions: IWebXRFallbackLayerDimensions;\r\n worldScalingFactor: number;\r\n texture?: BaseTexture;\r\n video?: HTMLVideoElement;\r\n}\r\n\r\nlet _FallbackLayerFactory: Nullable<(context: IWebXRFallbackLayerCreationContext) => Nullable<WebXRFallbackLayerWrapper>> = null;\r\n\r\n/**\r\n * Registers the optional mesh-fallback implementation without making its rendering dependencies part of projection-only bundles.\r\n * @param factory creates a fallback wrapper\r\n * @internal\r\n */\r\nexport function _RegisterWebXRFallbackLayerFactory(factory: (context: IWebXRFallbackLayerCreationContext) => Nullable<WebXRFallbackLayerWrapper>): void {\r\n _FallbackLayerFactory = factory;\r\n}\r\n\r\n/**\r\n * Exposes the WebXR Layers API.\r\n */\r\nexport class WebXRLayers extends WebXRAbstractFeature {\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.LAYERS;\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 * Already-created layers\r\n */\r\n private _existingLayers: WebXRLayerWrapper<WebXRSupportedLayerType>[] = [];\r\n private _fallbackLayers: WebXRFallbackLayerWrapper[] = [];\r\n\r\n private _glContext: WebGLRenderingContext | WebGL2RenderingContext;\r\n private _xrWebGLBinding: XRWebGLBinding;\r\n private _isWebGPU = false;\r\n private _xrGPUBinding?: XRGPUBinding;\r\n private _xrMediaBinding?: XRMediaBinding;\r\n private _isMultiviewEnabled = false;\r\n private _projectionLayerInitialized = false;\r\n\r\n private _compositionLayerTextureMapping: WeakMap<XRCompositionLayer, ThinTexture> = new WeakMap();\r\n private _layerToRTTProviderMapping: WeakMap<XRCompositionLayer, WebXRLayerRenderTargetTextureProvider<WebXRSupportedLayerType>> = new WeakMap();\r\n private _layerCleanupFunctions = new WeakMap<WebXRLayerWrapper<WebXRSupportedLayerType>, () => void>();\r\n\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n private readonly _options: IWebXRLayersOptions = {}\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"layers\";\r\n }\r\n\r\n /**\r\n * Attach this feature.\r\n * Will usually be called by the features manager.\r\n *\r\n * @returns true if successful.\r\n */\r\n public override attach(): boolean {\r\n if (!super.attach()) {\r\n return false;\r\n }\r\n\r\n const engine = this._xrSessionManager.scene.getEngine();\r\n this._existingLayers.length = 0;\r\n this._isWebGPU = engine.isWebGPU;\r\n\r\n if (this._isWebGPU) {\r\n const binding = this._xrSessionManager._getGraphicsBinding();\r\n if (binding.bindingType !== WebXRGraphicsBindingType.WebGPU) {\r\n throw new Error(\"Expected a WebGPU graphics binding for a WebGPU engine.\");\r\n }\r\n this._xrGPUBinding = binding.binding;\r\n // Multiview is not yet supported on the WebGPU XR path; force single-view (two sub-images).\r\n this._isMultiviewEnabled = false;\r\n this._createWebGPUProjectionLayer();\r\n } else {\r\n const binding = this._xrSessionManager._getGraphicsBinding();\r\n if (binding.bindingType !== WebXRGraphicsBindingType.WebGL) {\r\n throw new Error(\"Expected a WebGL graphics binding for a WebGL engine.\");\r\n }\r\n this._glContext = binding.context;\r\n this._xrWebGLBinding = binding.binding;\r\n\r\n const projectionLayerInit = { ...DefaultXRProjectionLayerInit, ...this._options.projectionLayerInit };\r\n this._isMultiviewEnabled = this._options.preferMultiviewOnInit && engine.getCaps().multiview;\r\n this.createProjectionLayer(projectionLayerInit /*, projectionLayerMultiview*/);\r\n }\r\n this._projectionLayerInitialized = true;\r\n this._addNewAttachObserver(this._xrSessionManager.onXRReferenceSpaceChanged, (referenceSpace) => {\r\n for (const layer of this._existingLayers) {\r\n if (layer instanceof WebXRSpatialLayerWrapper && layer.usesSessionReferenceSpace) {\r\n layer.layer.space = referenceSpace;\r\n }\r\n }\r\n });\r\n\r\n return true;\r\n }\r\n\r\n public override detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n for (const layer of this._existingLayers) {\r\n this._layerCleanupFunctions.get(layer)?.();\r\n layer.dispose();\r\n }\r\n this._existingLayers.length = 0;\r\n for (const layer of this._fallbackLayers) {\r\n layer.dispose();\r\n }\r\n this._fallbackLayers.length = 0;\r\n this._xrMediaBinding = undefined;\r\n this._projectionLayerInitialized = false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Creates a new XRWebGLLayer.\r\n * @param params an object providing configuration options for the new XRWebGLLayer\r\n * @returns the XRWebGLLayer\r\n */\r\n public createXRWebGLLayer(params = DefaultXRWebGLLayerInit): WebXRWebGLLayerWrapper {\r\n const layer = new XRWebGLLayer(this._xrSessionManager.session, this._glContext, params);\r\n return new WebXRWebGLLayerWrapper(layer);\r\n }\r\n\r\n private _validateLayerInit(params: XRProjectionLayerInit | WebXRGraphicsLayerInit, multiview = this._isMultiviewEnabled, allowTextureArrayWithoutMultiview = false): void {\r\n // check if we are in session\r\n if (!this._xrSessionManager.inXRSession) {\r\n throw new Error(\"Cannot create a layer outside of a WebXR session. Make sure the session has started before creating layers.\");\r\n }\r\n if (multiview && params.textureType !== \"texture-array\") {\r\n throw new Error(\"Projection layers can only be made multiview if they use texture arrays. Set the textureType parameter to 'texture-array'.\");\r\n }\r\n\r\n // TODO (rgerd): Support RTT's that are bound to sub-images in the texture array.\r\n if (!multiview && params.textureType === \"texture-array\" && !allowTextureArrayWithoutMultiview) {\r\n throw new Error(\"We currently only support multiview rendering when the textureType parameter is set to 'texture-array'.\");\r\n }\r\n }\r\n\r\n private _extendXRLayerInit<T extends XRProjectionLayerInit | WebXRGraphicsLayerInit>(params: T, multiview = this._isMultiviewEnabled): T {\r\n if (multiview) {\r\n params.textureType = \"texture-array\";\r\n }\r\n return params;\r\n }\r\n\r\n private _getProjectionLayerDimensions(): { width: number; height: number } {\r\n const projectionLayer = this._existingLayers.find((layer) => layer.layerType === \"XRProjectionLayer\");\r\n if (!projectionLayer) {\r\n throw new Error(\"A projection layer must be created before adding WebXR composition layers.\");\r\n }\r\n return {\r\n width: projectionLayer.getWidth(),\r\n height: projectionLayer.getHeight(),\r\n };\r\n }\r\n\r\n private _createTransformNode(\r\n layerType: WebXRSpatialLayerType,\r\n transformNode: TransformNode | undefined,\r\n transform?: XRRigidTransform,\r\n orientation?: DOMPointReadOnly\r\n ): { node: TransformNode; ownsNode: boolean } {\r\n if (transformNode) {\r\n return { node: transformNode, ownsNode: false };\r\n }\r\n\r\n const node = new TransformNode(`WebXR ${layerType}`, this._xrSessionManager.scene);\r\n node.rotationQuaternion = new Quaternion();\r\n const sourcePosition = transform?.position;\r\n const sourceOrientation = transform?.orientation ?? orientation;\r\n if (sourcePosition) {\r\n const worldScalingFactor = this._xrSessionManager.worldScalingFactor;\r\n node.position.set(sourcePosition.x * worldScalingFactor, sourcePosition.y * worldScalingFactor, sourcePosition.z * worldScalingFactor);\r\n }\r\n if (sourceOrientation) {\r\n node.rotationQuaternion.set(sourceOrientation.x, sourceOrientation.y, sourceOrientation.z, sourceOrientation.w);\r\n }\r\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\r\n node.position.z *= -1;\r\n node.rotationQuaternion.z *= -1;\r\n node.rotationQuaternion.w *= -1;\r\n }\r\n return { node, ownsNode: true };\r\n }\r\n\r\n private _createFallbackLayer(\r\n layerType: WebXRSpatialLayerType,\r\n transformNode: TransformNode | undefined,\r\n transform: XRRigidTransform | undefined,\r\n orientation: DOMPointReadOnly | undefined,\r\n dimensions: IWebXRFallbackLayerDimensions,\r\n texture?: BaseTexture,\r\n video?: HTMLVideoElement\r\n ): Nullable<WebXRFallbackLayerWrapper> {\r\n if (!_FallbackLayerFactory) {\r\n Logger.Warn(\"WebXR mesh fallbacks require importing `@babylonjs/core/XR/features/WebXRLayersFallback`.\");\r\n return null;\r\n }\r\n\r\n const transformInfo = this._createTransformNode(layerType, transformNode, transform, orientation);\r\n const wrapper = _FallbackLayerFactory({\r\n scene: this._xrSessionManager.scene,\r\n isWebGPU: this._isWebGPU,\r\n layerType,\r\n transformNode: transformInfo.node,\r\n ownsTransformNode: transformInfo.ownsNode,\r\n dimensions,\r\n worldScalingFactor: this._xrSessionManager.worldScalingFactor,\r\n texture,\r\n video,\r\n });\r\n if (wrapper) {\r\n this._fallbackLayers.push(wrapper);\r\n } else if (transformInfo.ownsNode) {\r\n transformInfo.node.dispose();\r\n }\r\n return wrapper;\r\n }\r\n\r\n private _createGraphicsLayer<\r\n LayerT extends WebXRSpatialLayer,\r\n LayerTypeT extends WebXRSpatialLayerType,\r\n TWebGLInit extends WebXRGraphicsLayerInit,\r\n TWebGPUInit extends WebXRGPUGraphicsLayerInit,\r\n >(\r\n layerType: LayerTypeT,\r\n factoryName: string,\r\n factorySupported: boolean,\r\n options: IWebXRCompositionLayerCreationOptions<TWebGLInit, TWebGPUInit>,\r\n createWebGLLayer: (binding: XRWebGLBinding, init: TWebGLInit) => LayerT,\r\n createWebGPULayer: (binding: XRGPUBinding, init: TWebGPUInit) => LayerT,\r\n copyWebGPUSpecificInit: (webGLInit: TWebGLInit, webGPUInit: TWebGPUInit) => void\r\n ): Nullable<WebXRSpatialLayerWrapper<LayerT, LayerTypeT>> {\r\n if (!this._xrSessionManager.inXRSession) {\r\n throw new Error(\"Cannot create a layer outside of a WebXR session. Make sure the session has started before creating layers.\");\r\n }\r\n if (!factorySupported) {\r\n if (options.fallbackMode !== \"mesh\") {\r\n Logger.Warn(`${layerType} is unavailable because ${factoryName} is not supported; the requested layer was skipped and projection rendering remains active.`);\r\n }\r\n return null;\r\n }\r\n if (this._isWebGPU && typeof this._xrGPUBinding?.getSubImage !== \"function\") {\r\n if (options.fallbackMode !== \"mesh\") {\r\n Logger.Warn(\r\n `${layerType} is unavailable because XRGPUBinding.getSubImage is not supported; the requested layer was skipped and projection rendering remains active.`\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n const dimensions = this._getProjectionLayerDimensions();\r\n const defaultViewPixelWidth = layerType === \"XRCubeLayer\" ? Math.min(dimensions.width, dimensions.height) : dimensions.width;\r\n const defaultViewPixelHeight = layerType === \"XRCubeLayer\" ? defaultViewPixelWidth : dimensions.height;\r\n const populatedParams = {\r\n space: this._xrSessionManager.referenceSpace,\r\n viewPixelWidth: defaultViewPixelWidth,\r\n viewPixelHeight: defaultViewPixelHeight,\r\n clearOnAccess: true,\r\n textureType: \"texture\",\r\n layout: \"mono\",\r\n ...options.layerInit,\r\n } as TWebGLInit;\r\n if (layerType === \"XRCubeLayer\" && populatedParams.viewPixelWidth !== populatedParams.viewPixelHeight) {\r\n throw new Error(\"WebXR cube layer faces must have equal pixel width and height.\");\r\n }\r\n this._validateLayerInit(populatedParams, false, layerType === \"XRCubeLayer\");\r\n\r\n let layer: LayerT;\r\n let effectiveParams: TWebGLInit | TWebGPUInit = populatedParams;\r\n let depthStencilFormat: GPUTextureFormat | undefined;\r\n if (this._isWebGPU) {\r\n const binding = this._xrGPUBinding!;\r\n const gpuParams = {\r\n colorFormat: binding.getPreferredColorFormat(),\r\n textureUsage: 0x10,\r\n space: populatedParams.space,\r\n viewPixelWidth: populatedParams.viewPixelWidth,\r\n viewPixelHeight: populatedParams.viewPixelHeight,\r\n layout: populatedParams.layout,\r\n mipLevels: populatedParams.mipLevels,\r\n isStatic: populatedParams.isStatic,\r\n } as TWebGPUInit;\r\n copyWebGPUSpecificInit(populatedParams, gpuParams);\r\n Object.assign(gpuParams, options.gpuLayerInit);\r\n if (layerType === \"XRCubeLayer\" && gpuParams.viewPixelWidth !== gpuParams.viewPixelHeight) {\r\n throw new Error(\"WebXR cube layer faces must have equal pixel width and height.\");\r\n }\r\n effectiveParams = gpuParams;\r\n depthStencilFormat = gpuParams.depthStencilFormat;\r\n layer = createWebGPULayer(binding, gpuParams);\r\n } else {\r\n layer = createWebGLLayer(this._xrWebGLBinding, populatedParams);\r\n }\r\n\r\n const transform = \"transform\" in effectiveParams ? (effectiveParams.transform as XRRigidTransform | undefined) : undefined;\r\n const orientation = \"orientation\" in effectiveParams ? (effectiveParams.orientation as DOMPointReadOnly | undefined) : undefined;\r\n const usesSessionReferenceSpace = options.layerInit?.space === undefined && (!this._isWebGPU || options.gpuLayerInit?.space === undefined);\r\n const transformInfo = this._createTransformNode(layerType, options.transformNode, transform, orientation);\r\n let wrapper: WebXRSpatialLayerWrapper<LayerT, LayerTypeT>;\r\n if (layerType === \"XRCubeLayer\") {\r\n wrapper = new WebXRCubeLayerWrapper(\r\n () => effectiveParams.viewPixelWidth,\r\n () => effectiveParams.viewPixelHeight,\r\n layer as XRCubeLayer,\r\n !!effectiveParams.isStatic,\r\n usesSessionReferenceSpace,\r\n this._isWebGPU ? this._xrGPUBinding! : this._xrWebGLBinding,\r\n transformInfo.node,\r\n transformInfo.ownsNode\r\n ) as unknown as WebXRSpatialLayerWrapper<LayerT, LayerTypeT>;\r\n } else if (this._isWebGPU) {\r\n const binding = this._xrGPUBinding!;\r\n wrapper = new WebXRSpatialLayerWrapper(\r\n () => effectiveParams.viewPixelWidth,\r\n () => effectiveParams.viewPixelHeight,\r\n layer,\r\n layerType,\r\n false,\r\n !!effectiveParams.isStatic,\r\n usesSessionReferenceSpace,\r\n (sessionManager) => new WebXRWebGPUCompositionLayerRenderTargetTextureProvider(sessionManager, binding, wrapper, depthStencilFormat),\r\n transformInfo.node,\r\n transformInfo.ownsNode\r\n );\r\n } else {\r\n wrapper = new WebXRSpatialLayerWrapper(\r\n () => effectiveParams.viewPixelWidth,\r\n () => effectiveParams.viewPixelHeight,\r\n layer,\r\n layerType,\r\n false,\r\n !!effectiveParams.isStatic,\r\n usesSessionReferenceSpace,\r\n (sessionManager) => new WebXRCompositionLayerRenderTargetTextureProvider(sessionManager, this._xrWebGLBinding, wrapper),\r\n transformInfo.node,\r\n transformInfo.ownsNode\r\n );\r\n }\r\n\r\n if (wrapper.usesRenderTargetProvider) {\r\n const rttProvider = wrapper.createRenderTargetTextureProvider(this._xrSessionManager);\r\n this._layerToRTTProviderMapping.set(layer, rttProvider);\r\n }\r\n this.addXRSessionLayer(wrapper);\r\n return wrapper;\r\n }\r\n\r\n private _createMediaLayer<\r\n LayerT extends XRQuadLayer | XRCylinderLayer | XREquirectLayer,\r\n LayerTypeT extends Exclude<WebXRSpatialLayerType, \"XRCubeLayer\">,\r\n InitT extends XRMediaLayerInit & { transform?: XRRigidTransform },\r\n >(\r\n layerType: LayerTypeT,\r\n factoryName: string,\r\n video: HTMLVideoElement,\r\n options: IWebXRMediaLayerCreationOptions<InitT>,\r\n createLayer: (binding: XRMediaBinding, video: HTMLVideoElement, init: InitT) => LayerT\r\n ): Nullable<WebXRMediaLayerWrapper<LayerT, LayerTypeT>> {\r\n if (!this._xrSessionManager.inXRSession) {\r\n throw new Error(\"Cannot create a layer outside of a WebXR session. Make sure the session has started before creating layers.\");\r\n }\r\n if (typeof XRMediaBinding === \"undefined\") {\r\n if (options.fallbackMode !== \"mesh\") {\r\n Logger.Warn(`${layerType} media layers are unavailable because XRMediaBinding is not supported; the requested layer was skipped.`);\r\n }\r\n return null;\r\n }\r\n\r\n this._xrMediaBinding ??= new XRMediaBinding(this._xrSessionManager.session);\r\n const mediaBinding = this._xrMediaBinding;\r\n const factory = mediaBinding[factoryName as \"createQuadLayer\" | \"createCylinderLayer\" | \"createEquirectLayer\"];\r\n if (typeof factory !== \"function\") {\r\n if (options.fallbackMode !== \"mesh\") {\r\n Logger.Warn(`${layerType} media layers are unavailable because XRMediaBinding.${factoryName} is not supported; the requested layer was skipped.`);\r\n }\r\n return null;\r\n }\r\n\r\n const populatedParams = {\r\n space: this._xrSessionManager.referenceSpace,\r\n layout: \"mono\",\r\n ...options.layerInit,\r\n } as InitT;\r\n const layer = createLayer(mediaBinding, video, populatedParams);\r\n const transform = \"transform\" in populatedParams ? populatedParams.transform : undefined;\r\n const transformInfo = this._createTransformNode(layerType, options.transformNode, transform);\r\n const wrapper = new WebXRMediaLayerWrapper(\r\n () => video.videoWidth,\r\n () => video.videoHeight,\r\n layer,\r\n layerType,\r\n transformInfo.node,\r\n transformInfo.ownsNode,\r\n options.layerInit?.space === undefined\r\n );\r\n this.addXRSessionLayer(wrapper);\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * Creates a new XRProjectionLayer.\r\n * @param params an object providing configuration options for the new XRProjectionLayer.\r\n * @param multiview whether the projection layer should render with multiview. Will be tru automatically if the extension initialized with multiview.\r\n * @returns the projection layer\r\n */\r\n public createProjectionLayer(params = DefaultXRProjectionLayerInit, multiview = this._isMultiviewEnabled): WebXRProjectionLayerWrapper {\r\n const extendedParams = this._extendXRLayerInit(params, multiview);\r\n this._validateLayerInit(extendedParams, multiview);\r\n\r\n const projLayer = this._xrWebGLBinding.createProjectionLayer(extendedParams);\r\n const layer = new WebXRProjectionLayerWrapper(projLayer, multiview, this._xrWebGLBinding);\r\n this.addXRSessionLayer(layer);\r\n return layer;\r\n }\r\n\r\n /**\r\n * Creates the base projection layer for the WebGPU (XRGPUBinding) backend.\r\n * Single-view only for now (multiview is deferred); the color format is the binding's preferred format.\r\n * @returns the WebGPU projection layer wrapper\r\n */\r\n private _createWebGPUProjectionLayer(): WebXRWebGPUProjectionLayerWrapper {\r\n if (!this._xrSessionManager.inXRSession) {\r\n throw new Error(\"Cannot create a layer outside of a WebXR session. Make sure the session has started before creating layers.\");\r\n }\r\n const binding = this._xrGPUBinding!;\r\n const init = CreateDefaultXRGPUProjectionLayerInit(binding.getPreferredColorFormat());\r\n const projLayer = binding.createProjectionLayer(init);\r\n const layer = new WebXRWebGPUProjectionLayerWrapper(projLayer, false, binding, init.depthStencilFormat);\r\n this.addXRSessionLayer(layer);\r\n return layer;\r\n }\r\n\r\n /**\r\n * Creates a graphics-backed quad layer and adds it to the current XR session.\r\n * @param options initialization and transform-node options for the layer\r\n * @returns the created layer wrapper, or `null` when the active graphics binding does not support quad layers\r\n */\r\n public createQuadLayer(\r\n options: IWebXRCompositionLayerCreationOptions<XRQuadLayerInit, XRGPUQuadLayerInit> = {}\r\n ): Nullable<WebXRLayerCreationResult<XRQuadLayer, \"XRQuadLayer\">> {\r\n const factorySupported = this._isWebGPU ? typeof this._xrGPUBinding?.createQuadLayer === \"function\" : typeof this._xrWebGLBinding.createQuadLayer === \"function\";\r\n const factoryName = this._isWebGPU ? \"XRGPUBinding.createQuadLayer\" : \"XRWebGLBinding.createQuadLayer\";\r\n const nativeLayer = this._createGraphicsLayer(\r\n \"XRQuadLayer\",\r\n factoryName,\r\n factorySupported,\r\n options,\r\n (binding, init) => binding.createQuadLayer(init),\r\n (binding, init) => binding.createQuadLayer(init),\r\n (webGLInit, webGPUInit) => {\r\n webGPUInit.transform = webGLInit.transform;\r\n webGPUInit.width = webGLInit.width;\r\n webGPUInit.height = webGLInit.height;\r\n }\r\n );\r\n if (nativeLayer || options.fallbackMode !== \"mesh\") {\r\n return nativeLayer;\r\n }\r\n return this._createFallbackLayer(\r\n \"XRQuadLayer\",\r\n options.transformNode,\r\n options.layerInit?.transform,\r\n undefined,\r\n { width: options.layerInit?.width, height: options.layerInit?.height },\r\n options.fallbackTexture\r\n );\r\n }\r\n\r\n /**\r\n * Creates a graphics-backed cylinder layer and adds it to the current XR session.\r\n * @param options initialization and transform-node options for the layer\r\n * @returns the created layer wrapper, or `null` when the active graphics binding does not support cylinder layers\r\n */\r\n public createCylinderLayer(\r\n options: IWebXRCompositionLayerCreationOptions<XRCylinderLayerInit, XRGPUCylinderLayerInit> = {}\r\n ): Nullable<WebXRLayerCreationResult<XRCylinderLayer, \"XRCylinderLayer\">> {\r\n const factorySupported = this._isWebGPU ? typeof this._xrGPUBinding?.createCylinderLayer === \"function\" : typeof this._xrWebGLBinding.createCylinderLayer === \"function\";\r\n const factoryName = this._isWebGPU ? \"XRGPUBinding.createCylinderLayer\" : \"XRWebGLBinding.createCylinderLayer\";\r\n const nativeLayer = this._createGraphicsLayer(\r\n \"XRCylinderLayer\",\r\n factoryName,\r\n factorySupported,\r\n options,\r\n (binding, init) => binding.createCylinderLayer(init),\r\n (binding, init) => binding.createCylinderLayer(init),\r\n (webGLInit, webGPUInit) => {\r\n webGPUInit.transform = webGLInit.transform;\r\n webGPUInit.radius = webGLInit.radius;\r\n webGPUInit.centralAngle = webGLInit.centralAngle;\r\n webGPUInit.aspectRatio = webGLInit.aspectRatio;\r\n }\r\n );\r\n if (nativeLayer || options.fallbackMode !== \"mesh\") {\r\n return nativeLayer;\r\n }\r\n return this._createFallbackLayer(\r\n \"XRCylinderLayer\",\r\n options.transformNode,\r\n options.layerInit?.transform,\r\n undefined,\r\n {\r\n radius: options.layerInit?.radius,\r\n centralAngle: options.layerInit?.centralAngle,\r\n aspectRatio: options.layerInit?.aspectRatio,\r\n },\r\n options.fallbackTexture\r\n );\r\n }\r\n\r\n /**\r\n * Creates a graphics-backed equirectangular layer and adds it to the current XR session.\r\n * @param options initialization and transform-node options for the layer\r\n * @returns the created layer wrapper, or `null` when the active graphics binding does not support equirectangular layers\r\n */\r\n public createEquirectLayer(\r\n options: IWebXRCompositionLayerCreationOptions<XREquirectLayerInit, XRGPUEquirectLayerInit> = {}\r\n ): Nullable<WebXRLayerCreationResult<XREquirectLayer, \"XREquirectLayer\">> {\r\n const factorySupported = this._isWebGPU ? typeof this._xrGPUBinding?.createEquirectLayer === \"function\" : typeof this._xrWebGLBinding.createEquirectLayer === \"function\";\r\n const factoryName = this._isWebGPU ? \"XRGPUBinding.createEquirectLayer\" : \"XRWebGLBinding.createEquirectLayer\";\r\n const nativeLayer = this._createGraphicsLayer(\r\n \"XREquirectLayer\",\r\n factoryName,\r\n factorySupported,\r\n options,\r\n (binding, init) => binding.createEquirectLayer(init),\r\n (binding, init) => binding.createEquirectLayer(init),\r\n (webGLInit, webGPUInit) => {\r\n webGPUInit.transform = webGLInit.transform;\r\n webGPUInit.radius = webGLInit.radius;\r\n webGPUInit.centralHorizontalAngle = webGLInit.centralHorizontalAngle;\r\n webGPUInit.upperVerticalAngle = webGLInit.upperVerticalAngle;\r\n webGPUInit.lowerVerticalAngle = webGLInit.lowerVerticalAngle;\r\n }\r\n );\r\n if (nativeLayer || options.fallbackMode !== \"mesh\") {\r\n return nativeLayer;\r\n }\r\n return this._createFallbackLayer(\r\n \"XREquirectLayer\",\r\n options.transformNode,\r\n options.layerInit?.transform,\r\n undefined,\r\n {\r\n radius: options.layerInit?.radius,\r\n centralHorizontalAngle: options.layerInit?.centralHorizontalAngle,\r\n upperVerticalAngle: options.layerInit?.upperVerticalAngle,\r\n lowerVerticalAngle: options.layerInit?.lowerVerticalAngle,\r\n },\r\n options.fallbackTexture\r\n );\r\n }\r\n\r\n /**\r\n * Creates a graphics-backed cube layer and adds it to the current XR session.\r\n * Cube layers synchronize only the rotation of their transform node because the WebXR API does not support cube-layer translation.\r\n * @param options initialization and transform-node options for the layer\r\n * @returns the created layer wrapper, or `null` when the active graphics binding does not support cube layers\r\n */\r\n public createCubeLayer(options: IWebXRCompositionLayerCreationOptions<XRCubeLayerInit, XRGPUCubeLayerInit> = {}): Nullable<WebXRCubeLayerWrapper | WebXRFallbackLayerWrapper> {\r\n const factorySupported = this._isWebGPU ? typeof this._xrGPUBinding?.createCubeLayer === \"function\" : typeof this._xrWebGLBinding.createCubeLayer === \"function\";\r\n const factoryName = this._isWebGPU ? \"XRGPUBinding.createCubeLayer\" : \"XRWebGLBinding.createCubeLayer\";\r\n const nativeLayer = this._createGraphicsLayer(\r\n \"XRCubeLayer\",\r\n factoryName,\r\n factorySupported,\r\n options,\r\n (binding, init) => binding.createCubeLayer(init),\r\n (binding, init) => binding.createCubeLayer(init),\r\n (webGLInit, webGPUInit) => {\r\n webGPUInit.orientation = webGLInit.orientation;\r\n }\r\n ) as Nullable<WebXRCubeLayerWrapper>;\r\n if (nativeLayer || options.fallbackMode !== \"mesh\") {\r\n return nativeLayer;\r\n }\r\n return this._createFallbackLayer(\"XRCubeLayer\", options.transformNode, undefined, options.layerInit?.orientation, {}, options.fallbackTexture);\r\n }\r\n\r\n /**\r\n * Creates a video-backed quad layer and adds it to the current XR session.\r\n * @see https://playground.babylonjs.com/#D35HOL#0\r\n * @param video the video element presented by the XR compositor\r\n * @param options initialization and transform-node options for the layer\r\n * @returns the created media layer wrapper, or `null` when XRMediaBinding is unavailable\r\n */\r\n public createMediaQuadLayer(\r\n video: HTMLVideoElement,\r\n options: IWebXRMediaLayerCreationOptions<XRMediaQuadLayerInit> = {}\r\n ): Nullable<WebXRLayerCreationResult<XRQuadLayer, \"XRQuadLayer\">> {\r\n const nativeLayer = this._createMediaLayer(\"XRQuadLayer\", \"createQuadLayer\", video, options, (binding, media, init) => binding.createQuadLayer(media, init));\r\n if (nativeLayer || options.fallbackMode !== \"mesh\") {\r\n return nativeLayer;\r\n }\r\n return this._createFallbackLayer(\r\n \"XRQuadLayer\",\r\n options.transformNode,\r\n options.layerInit?.transform,\r\n undefined,\r\n { width: options.layerInit?.width, height: options.layerInit?.height },\r\n undefined,\r\n video\r\n );\r\n }\r\n\r\n /**\r\n * Creates a video-backed cylinder layer and adds it to the current XR session.\r\n * @param video the video element presented by the XR compositor\r\n * @param options initialization and transform-node options for the layer\r\n * @returns the created media layer wrapper, or `null` when XRMediaBinding is unavailable\r\n */\r\n public createMediaCylinderLayer(\r\n video: HTMLVideoElement,\r\n options: IWebXRMediaLayerCreationOptions<XRMediaCylinderLayerInit> = {}\r\n ): Nullable<WebXRLayerCreationResult<XRCylinderLayer, \"XRCylinderLayer\">> {\r\n const nativeLayer = this._createMediaLayer(\"XRCylinderLayer\", \"createCylinderLayer\", video, options, (binding, media, init) => binding.createCylinderLayer(media, init));\r\n if (nativeLayer || options.fallbackMode !== \"mesh\") {\r\n return nativeLayer;\r\n }\r\n return this._createFallbackLayer(\r\n \"XRCylinderLayer\",\r\n options.transformNode,\r\n options.layerInit?.transform,\r\n undefined,\r\n {\r\n radius: options.layerInit?.radius,\r\n centralAngle: options.layerInit?.centralAngle,\r\n aspectRatio: options.layerInit?.aspectRatio,\r\n },\r\n undefined,\r\n video\r\n );\r\n }\r\n\r\n /**\r\n * Creates a video-backed equirectangular layer and adds it to the current XR session.\r\n * @param video the video element presented by the XR compositor\r\n * @param options initialization and transform-node options for the layer\r\n * @returns the created media layer wrapper, or `null` when XRMediaBinding is unavailable\r\n */\r\n public createMediaEquirectLayer(\r\n video: HTMLVideoElement,\r\n options: IWebXRMediaLayerCreationOptions<XRMediaEquirectLayerInit> = {}\r\n ): Nullable<WebXRLayerCreationResult<XREquirectLayer, \"XREquirectLayer\">> {\r\n const nativeLayer = this._createMediaLayer(\"XREquirectLayer\", \"createEquirectLayer\", video, options, (binding, media, init) => binding.createEquirectLayer(media, init));\r\n if (nativeLayer || options.fallbackMode !== \"mesh\") {\r\n return nativeLayer;\r\n }\r\n return this._createFallbackLayer(\r\n \"XREquirectLayer\",\r\n options.transformNode,\r\n options.layerInit?.transform,\r\n undefined,\r\n {\r\n radius: options.layerInit?.radius,\r\n centralHorizontalAngle: options.layerInit?.centralHorizontalAngle,\r\n upperVerticalAngle: options.layerInit?.upperVerticalAngle,\r\n lowerVerticalAngle: options.layerInit?.lowerVerticalAngle,\r\n },\r\n undefined,\r\n video\r\n );\r\n }\r\n\r\n private _createQuadLayer(\r\n options: { params: Partial<XRQuadLayerInit> } = { params: {} },\r\n babylonTexture?: ThinTexture\r\n ): Nullable<WebXRSpatialLayerWrapper<XRQuadLayer, \"XRQuadLayer\">> {\r\n if (this._isWebGPU) {\r\n const binding = this._xrGPUBinding!;\r\n if (typeof binding.createQuadLayer !== \"function\") {\r\n Logger.Warn(WebGPUQuadLayerCreateWarning);\r\n return null;\r\n }\r\n if (typeof binding.getSubImage !== \"function\") {\r\n Logger.Warn(WebGPUQuadLayerSubImageWarning);\r\n return null;\r\n }\r\n }\r\n\r\n const wrapper = this.createQuadLayer({ layerInit: options.params });\r\n if (!wrapper || wrapper.layer === null) {\r\n return null;\r\n }\r\n const quadLayer = wrapper.layer;\r\n quadLayer.width = this._isMultiviewEnabled ? 1 : 2;\r\n quadLayer.height = 1;\r\n\r\n if (babylonTexture) {\r\n this._compositionLayerTextureMapping.set(quadLayer, babylonTexture);\r\n }\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * @experimental\r\n * This will support full screen ADT when used with WebXR Layers. This API might change in the future.\r\n * Note that no interaction will be available with the ADT when using this method\r\n * @param texture the texture to display in the layer\r\n * @param options optional parameters for the layer\r\n * @returns a composition layer containing the texture, or null when WebGPU quad layers are unavailable\r\n */\r\n public addFullscreenAdvancedDynamicTexture(\r\n texture: DynamicTexture,\r\n options: { distanceFromHeadset: number } = { distanceFromHeadset: 1.5 }\r\n ): Nullable<WebXRCompositionLayerWrapper> {\r\n const wrapper = this._createQuadLayer(\r\n {\r\n params: {\r\n space: this._xrSessionManager.viewerReferenceSpace,\r\n textureType: \"texture\",\r\n layout: \"mono\",\r\n },\r\n },\r\n texture\r\n );\r\n if (!wrapper) {\r\n return null;\r\n }\r\n\r\n const distance = Math.max(0.1, options.distanceFromHeadset);\r\n const z = this._xrSessionManager.scene.useRightHandedSystem ? -distance : distance;\r\n wrapper.transformNode.position.set(0, 0, z * this._xrSessionManager.worldScalingFactor);\r\n\r\n const rttProvider = this._layerToRTTProviderMapping.get(wrapper.layer);\r\n if (\r\n !rttProvider ||\r\n (!(rttProvider instanceof WebXRCompositionLayerRenderTargetTextureProvider) && !(rttProvider instanceof WebXRWebGPUCompositionLayerRenderTargetTextureProvider))\r\n ) {\r\n throw new Error(\"Could not find the RTT provider for the layer\");\r\n }\r\n const babylonLayer = this._xrSessionManager.scene.layers.find((babylonLayer) => {\r\n return babylonLayer.texture === texture;\r\n });\r\n if (!babylonLayer) {\r\n throw new Error(\"Could not find the babylon layer for the texture\");\r\n }\r\n const renderTargetTextures = new Set<RenderTargetTexture>();\r\n const beforeRenderObservers: Observer<Scene>[] = [];\r\n const previousRenderOnlyInRenderTargetTextures = babylonLayer.renderOnlyInRenderTargetTextures;\r\n let cleanedUp = false;\r\n const renderTargetCreatedObserver = rttProvider.onRenderTargetTextureCreatedObservable.add((data) => {\r\n if (data.eye && data.eye === \"right\") {\r\n return;\r\n }\r\n data.texture.clearColor = new Color4(0, 0, 0, 0);\r\n babylonLayer.renderTargetTextures.push(data.texture);\r\n renderTargetTextures.add(data.texture);\r\n babylonLayer.renderOnlyInRenderTargetTextures = true;\r\n // for stereo (not for gui) it should be onBeforeCameraRenderObservable\r\n beforeRenderObservers.push(\r\n this._xrSessionManager.scene.onBeforeRenderObservable.add(() => {\r\n data.texture.render();\r\n })\r\n );\r\n });\r\n const cleanup = () => {\r\n if (cleanedUp) {\r\n return;\r\n }\r\n cleanedUp = true;\r\n rttProvider.onRenderTargetTextureCreatedObservable.remove(renderTargetCreatedObserver);\r\n for (const observer of beforeRenderObservers) {\r\n this._xrSessionManager.scene.onBeforeRenderObservable.remove(observer);\r\n }\r\n for (const renderTargetTexture of renderTargetTextures) {\r\n const index = babylonLayer.renderTargetTextures.indexOf(renderTargetTexture);\r\n if (index !== -1) {\r\n babylonLayer.renderTargetTextures.splice(index, 1);\r\n }\r\n }\r\n babylonLayer.renderOnlyInRenderTargetTextures = previousRenderOnlyInRenderTargetTextures;\r\n this._layerCleanupFunctions.delete(wrapper);\r\n };\r\n this._layerCleanupFunctions.set(wrapper, cleanup);\r\n this._xrSessionManager.onXRSessionEnded.addOnce(cleanup);\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * @experimental\r\n * This functions allows you to add a lens flare system to the XR scene.\r\n * Note - this will remove the lens flare system from the scene and add it to the XR scene.\r\n * This feature is experimental and might change in the future.\r\n * @param flareSystem the flare system to add\r\n * @returns a composition layer containing the flare system, or null when WebGPU quad layers are unavailable\r\n */\r\n protected _addLensFlareSystem(flareSystem: LensFlareSystem): Nullable<WebXRCompositionLayerWrapper> {\r\n const wrapper = this._createQuadLayer({\r\n params: {\r\n space: this._xrSessionManager.viewerReferenceSpace,\r\n textureType: \"texture\",\r\n layout: \"mono\",\r\n },\r\n });\r\n if (!wrapper) {\r\n return null;\r\n }\r\n\r\n const layer = wrapper.layer;\r\n layer.width = 2;\r\n layer.height = 1;\r\n const distance = 10;\r\n const z = this._xrSessionManager.scene.useRightHandedSystem ? -distance : distance;\r\n wrapper.transformNode.position.set(0, 0, z * this._xrSessionManager.worldScalingFactor);\r\n\r\n // get the rtt wrapper\r\n const rttProvider = this._layerToRTTProviderMapping.get(layer);\r\n if (\r\n !rttProvider ||\r\n (!(rttProvider instanceof WebXRCompositionLayerRenderTargetTextureProvider) && !(rttProvider instanceof WebXRWebGPUCompositionLayerRenderTargetTextureProvider))\r\n ) {\r\n throw new Error(\"Could not find the RTT provider for the layer\");\r\n }\r\n // render the flare system to the rtt\r\n rttProvider.onRenderTargetTextureCreatedObservable.add((data) => {\r\n data.texture.clearColor = new Color4(0, 0, 0, 0);\r\n data.texture.customRenderFunction = () => {\r\n flareSystem.render();\r\n };\r\n\r\n // add to the scene's render targets\r\n // this._xrSessionManager.scene.onBeforeCameraRenderObservable.add(() => {\r\n // data.texture.render();\r\n // });\r\n });\r\n // remove the lens flare system from the scene\r\n this._xrSessionManager.onXRSessionInit.add(() => {\r\n this._xrSessionManager.scene.lensFlareSystems.splice(this._xrSessionManager.scene.lensFlareSystems.indexOf(flareSystem), 1);\r\n });\r\n // add it back when the session ends\r\n this._xrSessionManager.onXRSessionEnded.add(() => {\r\n this._xrSessionManager.scene.lensFlareSystems.push(flareSystem);\r\n });\r\n\r\n return wrapper;\r\n }\r\n\r\n /**\r\n * Add a new layer to the already-existing list of layers\r\n * @param wrappedLayer the new layer to add to the existing ones\r\n */\r\n public addXRSessionLayer(wrappedLayer: WebXRLayerWrapper<WebXRSupportedLayerType>) {\r\n this._existingLayers.push(wrappedLayer);\r\n this.setXRSessionLayers(this._existingLayers);\r\n }\r\n\r\n /**\r\n * Removes a non-projection layer from the current XR session.\r\n * @param wrappedLayer the layer wrapper to remove\r\n * @param dispose whether to dispose the wrapper and destroy its native composition layer\r\n * @returns whether the layer was present and removed\r\n */\r\n public removeXRSessionLayer(wrappedLayer: WebXRLayerWrapper<WebXRSupportedLayerType>, dispose = true): boolean {\r\n const index = this._existingLayers.indexOf(wrappedLayer);\r\n if (index === -1) {\r\n return false;\r\n }\r\n if (wrappedLayer.layerType === \"XRProjectionLayer\") {\r\n Logger.Warn(\"The active projection layer cannot be removed from WebXRLayers.\");\r\n return false;\r\n }\r\n\r\n this._existingLayers.splice(index, 1);\r\n this._layerCleanupFunctions.get(wrappedLayer)?.();\r\n if (wrappedLayer instanceof WebXRCompositionLayerWrapper) {\r\n this._layerToRTTProviderMapping.delete(wrappedLayer.layer);\r\n this._compositionLayerTextureMapping.delete(wrappedLayer.layer);\r\n }\r\n this.setXRSessionLayers(this._existingLayers);\r\n if (dispose) {\r\n wrappedLayer.dispose();\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Removes either a native spatial layer or a fallback layer created by this feature.\r\n * @param wrappedLayer the native or fallback layer wrapper to remove\r\n * @param dispose whether to dispose resources owned by the wrapper\r\n * @returns whether the wrapper was present and removed\r\n */\r\n public removeLayer(wrappedLayer: WebXRLayerCreationResult<WebXRSpatialLayer>, dispose = true): boolean {\r\n if (wrappedLayer.layer === null) {\r\n const index = this._fallbackLayers.indexOf(wrappedLayer);\r\n if (index === -1) {\r\n return false;\r\n }\r\n this._fallbackLayers.splice(index, 1);\r\n if (dispose) {\r\n wrappedLayer.dispose();\r\n }\r\n return true;\r\n }\r\n return this.removeXRSessionLayer(wrappedLayer, dispose);\r\n }\r\n\r\n /**\r\n * Sets the layers to be used by the XR session.\r\n * Note that you must call this function with any layers you wish to render to\r\n * since it adds them to the XR session's render state\r\n * (replacing any layers that were added in a previous call to setXRSessionLayers or updateRenderState).\r\n * This method also sets up the session manager's render target texture provider\r\n * as the first layer in the array, which feeds the WebXR camera(s) attached to the session.\r\n * @param wrappedLayers An array of WebXRLayerWrapper, usually returned from the WebXRLayers createLayer functions.\r\n */\r\n public setXRSessionLayers(wrappedLayers: Array<WebXRLayerWrapper<WebXRSupportedLayerType>> = this._existingLayers): void {\r\n // this._existingLayers = wrappedLayers;\r\n const renderStateInit: XRRenderStateInit = { ...this._xrSessionManager.session.renderState };\r\n // Clear out the layer-related fields.\r\n renderStateInit.baseLayer = undefined;\r\n renderStateInit.layers = wrappedLayers.map((wrappedLayer) => wrappedLayer.layer);\r\n this._xrSessionManager.updateRenderState(renderStateInit);\r\n if (!this._projectionLayerInitialized) {\r\n this._xrSessionManager._setBaseLayerWrapper(wrappedLayers.length > 0 ? (wrappedLayers.at(0)! as WebXRLayerWrapper) : null);\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether the active runtime exposes the factory needed for a layer type.\r\n * This is a capability check only; creation can still fail when an initialization dictionary is invalid.\r\n * @param layerType the concrete WebXR layer type\r\n * @param source whether to check a graphics-backed or media-backed layer\r\n * @returns whether the requested factory is available\r\n */\r\n public isLayerTypeSupported(layerType: WebXRSpatialLayerType | \"XRProjectionLayer\", source: WebXRLayerSource = \"graphics\"): boolean {\r\n if (source === \"media\") {\r\n if (layerType === \"XRProjectionLayer\" || layerType === \"XRCubeLayer\" || typeof XRMediaBinding === \"undefined\") {\r\n return false;\r\n }\r\n switch (layerType) {\r\n case \"XRQuadLayer\":\r\n return typeof XRMediaBinding.prototype.createQuadLayer === \"function\";\r\n case \"XRCylinderLayer\":\r\n return typeof XRMediaBinding.prototype.createCylinderLayer === \"function\";\r\n case \"XREquirectLayer\":\r\n return typeof XRMediaBinding.prototype.createEquirectLayer === \"function\";\r\n }\r\n }\r\n\r\n if (this._xrSessionManager.scene.getEngine().isWebGPU) {\r\n if (typeof XRGPUBinding === \"undefined\") {\r\n return false;\r\n }\r\n switch (layerType) {\r\n case \"XRProjectionLayer\":\r\n return typeof XRGPUBinding.prototype.createProjectionLayer === \"function\";\r\n case \"XRQuadLayer\":\r\n return typeof XRGPUBinding.prototype.createQuadLayer === \"function\";\r\n case \"XRCylinderLayer\":\r\n return typeof XRGPUBinding.prototype.createCylinderLayer === \"function\";\r\n case \"XREquirectLayer\":\r\n return typeof XRGPUBinding.prototype.createEquirectLayer === \"function\";\r\n case \"XRCubeLayer\":\r\n return typeof XRGPUBinding.prototype.createCubeLayer === \"function\";\r\n }\r\n }\r\n\r\n if (typeof XRWebGLBinding === \"undefined\") {\r\n return false;\r\n }\r\n switch (layerType) {\r\n case \"XRProjectionLayer\":\r\n return typeof XRWebGLBinding.prototype.createProjectionLayer === \"function\";\r\n case \"XRQuadLayer\":\r\n return typeof XRWebGLBinding.prototype.createQuadLayer === \"function\";\r\n case \"XRCylinderLayer\":\r\n return typeof XRWebGLBinding.prototype.createCylinderLayer === \"function\";\r\n case \"XREquirectLayer\":\r\n return typeof XRWebGLBinding.prototype.createEquirectLayer === \"function\";\r\n case \"XRCubeLayer\":\r\n return typeof XRWebGLBinding.prototype.createCubeLayer === \"function\";\r\n }\r\n }\r\n\r\n public override isCompatible(): boolean {\r\n if (this._xrSessionManager.scene.getEngine().isWebGPU) {\r\n return typeof XRGPUBinding !== \"undefined\" && !!XRGPUBinding.prototype.createProjectionLayer;\r\n }\r\n // Native WebGL continues to use NativeXRRenderTarget instead of WebXR Layers.\r\n if (this._xrSessionManager.isNative) {\r\n return false;\r\n }\r\n return typeof XRWebGLBinding !== \"undefined\" && !!XRWebGLBinding.prototype.createProjectionLayer;\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 super.dispose();\r\n }\r\n\r\n protected _onXRFrame(_xrFrame: XRFrame): void {\r\n for (let i = 0; i < this._fallbackLayers.length; ++i) {\r\n this._fallbackLayers[i].updateFromTransformNode(this._xrSessionManager.worldScalingFactor);\r\n }\r\n\r\n const layers = this._existingLayers;\r\n for (let i = 0; i < layers.length; ++i) {\r\n const layer = layers[i];\r\n if (layer instanceof WebXRSpatialLayerWrapper) {\r\n layer.updateFromTransformNode(this._xrSessionManager.scene.useRightHandedSystem, this._xrSessionManager.worldScalingFactor);\r\n }\r\n if (layer.layerType === \"XRProjectionLayer\" || !(layer instanceof WebXRCompositionLayerWrapper) || !layer.usesRenderTargetProvider) {\r\n continue;\r\n }\r\n if (layer.isStatic && !layer.layer.needsRedraw) {\r\n continue;\r\n }\r\n\r\n const rttProvider = this._layerToRTTProviderMapping.get(layer.layer);\r\n if (!rttProvider) {\r\n continue;\r\n }\r\n if (layer.layer.layout === \"mono\") {\r\n rttProvider.getRenderTargetTextureForEye(\"none\");\r\n } else {\r\n const pose = _xrFrame.getViewerPose(this._xrSessionManager.referenceSpace);\r\n if (pose) {\r\n const views = pose.views;\r\n for (let j = 0; j < views.length; ++j) {\r\n rttProvider.getRenderTargetTextureForView(views[j]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Register side effects for webXRLayers.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\nexport function RegisterWebXRLayers(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n //register the plugin\r\n WebXRFeaturesManager.AddWebXRFeature(\r\n WebXRLayers.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRLayers(xrSessionManager, options);\r\n },\r\n WebXRLayers.Version,\r\n false\r\n );\r\n}\r\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-exports the pure implementation and registers optional WebXR mesh fallbacks.
|
|
3
|
+
* Import WebXRLayersFallback.pure for side-effect-free usage.
|
|
4
|
+
*/
|
|
5
|
+
export * from "./WebXRLayersFallback.pure.js";
|
|
6
|
+
import { RegisterWebXRLayersFallback } from "./WebXRLayersFallback.pure.js";
|
|
7
|
+
RegisterWebXRLayersFallback();
|
|
8
|
+
//# sourceMappingURL=WebXRLayersFallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebXRLayersFallback.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRLayersFallback.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,cAAc,4BAA4B,CAAC;AAE3C,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,2BAA2B,EAAE,CAAC","sourcesContent":["/**\n * Re-exports the pure implementation and registers optional WebXR mesh fallbacks.\n * Import WebXRLayersFallback.pure for side-effect-free usage.\n */\nexport * from \"./WebXRLayersFallback.pure\";\n\nimport { RegisterWebXRLayersFallback } from \"./WebXRLayersFallback.pure\";\nRegisterWebXRLayersFallback();\n"]}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/** This file must only contain pure code and pure imports */
|
|
2
|
+
export * from "./Layers/WebXRFallbackLayer.js";
|
|
3
|
+
import { RegisterEnginesExtensionsEngineVideoTexture } from "../../Engines/Extensions/engine.videoTexture.pure.js";
|
|
4
|
+
import { RegisterEnginesWebGPUExtensionsEngineVideoTexture } from "../../Engines/WebGPU/Extensions/engine.videoTexture.pure.js";
|
|
5
|
+
import { VideoTexture } from "../../Materials/Textures/videoTexture.pure.js";
|
|
6
|
+
import { Logger } from "../../Misc/logger.js";
|
|
7
|
+
import { WebXRFallbackLayerWrapper } from "./Layers/WebXRFallbackLayer.js";
|
|
8
|
+
import { _RegisterWebXRFallbackLayerFactory } from "./WebXRLayers.pure.js";
|
|
9
|
+
let _Registered = false;
|
|
10
|
+
/**
|
|
11
|
+
* Registers the optional WebXR mesh-fallback implementation.
|
|
12
|
+
*/
|
|
13
|
+
export function RegisterWebXRLayersFallback() {
|
|
14
|
+
if (_Registered) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
_Registered = true;
|
|
18
|
+
_RegisterWebXRFallbackLayerFactory((context) => {
|
|
19
|
+
let texture = context.texture;
|
|
20
|
+
let ownsTexture = false;
|
|
21
|
+
if (context.video) {
|
|
22
|
+
if (context.isWebGPU) {
|
|
23
|
+
RegisterEnginesWebGPUExtensionsEngineVideoTexture();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
RegisterEnginesExtensionsEngineVideoTexture();
|
|
27
|
+
}
|
|
28
|
+
texture = new VideoTexture(`WebXR ${context.layerType} fallback video`, context.video, context.scene, false, false, undefined, {
|
|
29
|
+
independentVideoSource: true,
|
|
30
|
+
});
|
|
31
|
+
ownsTexture = true;
|
|
32
|
+
}
|
|
33
|
+
else if (!texture) {
|
|
34
|
+
Logger.Warn(`fallbackTexture must be provided to emulate an ${context.layerType} graphics layer with a mesh.`);
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
if (context.layerType === "XRCubeLayer" && !texture.isCube) {
|
|
38
|
+
Logger.Warn("fallbackTexture must be a cube texture to emulate an XRCubeLayer.");
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
return new WebXRFallbackLayerWrapper(context.scene, context.layerType, texture, context.transformNode, context.ownsTransformNode, ownsTexture, context.dimensions, context.worldScalingFactor);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=WebXRLayersFallback.pure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebXRLayersFallback.pure.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRLayersFallback.pure.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAE7D,cAAc,6BAA6B,CAAC;AAE5C,OAAO,EAAE,2CAA2C,EAAE,MAAM,mDAAmD,CAAC;AAChH,OAAO,EAAE,iDAAiD,EAAE,MAAM,0DAA0D,CAAC;AAC7H,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,kCAAkC,EAAE,MAAM,oBAAoB,CAAC;AAExE,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB;;GAEG;AACH,MAAM,UAAU,2BAA2B;IACvC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,kCAAkC,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3C,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACnB,iDAAiD,EAAE,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACJ,2CAA2C,EAAE,CAAC;YAClD,CAAC;YACD,OAAO,GAAG,IAAI,YAAY,CAAC,SAAS,OAAO,CAAC,SAAS,iBAAiB,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;gBAC3H,sBAAsB,EAAE,IAAI;aAC/B,CAAC,CAAC;YACH,WAAW,GAAG,IAAI,CAAC;QACvB,CAAC;aAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,kDAAkD,OAAO,CAAC,SAAS,8BAA8B,CAAC,CAAC;YAC/G,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,CAAC,SAAS,KAAK,aAAa,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YACjF,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,yBAAyB,CAChC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,SAAS,EACjB,OAAO,EACP,OAAO,CAAC,aAAa,EACrB,OAAO,CAAC,iBAAiB,EACzB,WAAW,EACX,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,kBAAkB,CAC7B,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["/** This file must only contain pure code and pure imports */\n\nexport * from \"./Layers/WebXRFallbackLayer\";\n\nimport { RegisterEnginesExtensionsEngineVideoTexture } from \"../../Engines/Extensions/engine.videoTexture.pure\";\nimport { RegisterEnginesWebGPUExtensionsEngineVideoTexture } from \"../../Engines/WebGPU/Extensions/engine.videoTexture.pure\";\nimport { VideoTexture } from \"../../Materials/Textures/videoTexture.pure\";\nimport { Logger } from \"../../Misc/logger\";\nimport { WebXRFallbackLayerWrapper } from \"./Layers/WebXRFallbackLayer\";\nimport { _RegisterWebXRFallbackLayerFactory } from \"./WebXRLayers.pure\";\n\nlet _Registered = false;\n\n/**\n * Registers the optional WebXR mesh-fallback implementation.\n */\nexport function RegisterWebXRLayersFallback(): void {\n if (_Registered) {\n return;\n }\n _Registered = true;\n\n _RegisterWebXRFallbackLayerFactory((context) => {\n let texture = context.texture;\n let ownsTexture = false;\n if (context.video) {\n if (context.isWebGPU) {\n RegisterEnginesWebGPUExtensionsEngineVideoTexture();\n } else {\n RegisterEnginesExtensionsEngineVideoTexture();\n }\n texture = new VideoTexture(`WebXR ${context.layerType} fallback video`, context.video, context.scene, false, false, undefined, {\n independentVideoSource: true,\n });\n ownsTexture = true;\n } else if (!texture) {\n Logger.Warn(`fallbackTexture must be provided to emulate an ${context.layerType} graphics layer with a mesh.`);\n return null;\n }\n\n if (context.layerType === \"XRCubeLayer\" && !texture.isCube) {\n Logger.Warn(\"fallbackTexture must be a cube texture to emulate an XRCubeLayer.\");\n return null;\n }\n\n return new WebXRFallbackLayerWrapper(\n context.scene,\n context.layerType,\n texture,\n context.transformNode,\n context.ownsTransformNode,\n ownsTexture,\n context.dimensions,\n context.worldScalingFactor\n );\n });\n}\n"]}
|
|
@@ -89,11 +89,11 @@ export declare class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
89
89
|
* options to use when constructing this feature
|
|
90
90
|
*/
|
|
91
91
|
readonly options: IWebXRLightEstimationOptions;
|
|
92
|
-
private _canvasContext;
|
|
93
92
|
private _reflectionCubeMap;
|
|
94
93
|
private _xrLightEstimate;
|
|
95
94
|
private _xrLightProbe;
|
|
96
|
-
private
|
|
95
|
+
private _reflectionCubeMapEnabled;
|
|
96
|
+
private _webGPUReflectionWarningEmitted;
|
|
97
97
|
private _lightDirection;
|
|
98
98
|
private _lightColor;
|
|
99
99
|
private _intensity;
|
|
@@ -151,8 +151,7 @@ export declare class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
151
151
|
* The most recent light estimate. Available starting on the first frame where the device provides a light probe.
|
|
152
152
|
*/
|
|
153
153
|
get xrLightingEstimate(): Nullable<IWebXRLightEstimation>;
|
|
154
|
-
private
|
|
155
|
-
private _getXRGLBinding;
|
|
154
|
+
private _getXRWebGLBinding;
|
|
156
155
|
/**
|
|
157
156
|
* Event Listener for "reflectionchange" events.
|
|
158
157
|
*/
|
|
@@ -13,6 +13,7 @@ import { BaseTexture } from "../../Materials/Textures/baseTexture.pure.js";
|
|
|
13
13
|
import { SphericalHarmonics, SphericalPolynomial } from "../../Maths/sphericalPolynomial.pure.js";
|
|
14
14
|
import { LightConstants } from "../../Lights/lightConstants.js";
|
|
15
15
|
import { HDRFiltering } from "../../Materials/Textures/Filtering/hdrFiltering.js";
|
|
16
|
+
const WebGPUReflectionWarning = "WebXR Light Estimation reflection cube maps are unavailable with WebGPU XR because they are exposed only by XRWebGLBinding; light direction, intensity, and spherical harmonics remain enabled.";
|
|
16
17
|
/**
|
|
17
18
|
* Light Estimation Feature
|
|
18
19
|
*
|
|
@@ -31,11 +32,11 @@ export class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
31
32
|
options) {
|
|
32
33
|
super(_xrSessionManager);
|
|
33
34
|
this.options = options;
|
|
34
|
-
this._canvasContext = null;
|
|
35
35
|
this._reflectionCubeMap = null;
|
|
36
36
|
this._xrLightEstimate = null;
|
|
37
37
|
this._xrLightProbe = null;
|
|
38
|
-
this.
|
|
38
|
+
this._reflectionCubeMapEnabled = false;
|
|
39
|
+
this._webGPUReflectionWarningEmitted = false;
|
|
39
40
|
this._lightDirection = Vector3.Up().negateInPlace();
|
|
40
41
|
this._lightColor = Color3.White();
|
|
41
42
|
this._intensity = 1;
|
|
@@ -77,7 +78,8 @@ export class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
77
78
|
}
|
|
78
79
|
this._cubeMapPollTime = now;
|
|
79
80
|
}
|
|
80
|
-
const
|
|
81
|
+
const graphicsBinding = this._getXRWebGLBinding();
|
|
82
|
+
const lp = graphicsBinding.binding.getReflectionCubeMap(this._xrLightProbe);
|
|
81
83
|
if (lp && this._reflectionCubeMap) {
|
|
82
84
|
if (!this._reflectionCubeMap._texture) {
|
|
83
85
|
const internalTexture = new InternalTexture(this._xrSessionManager.scene.getEngine(), 0 /* InternalTextureSource.Unknown */);
|
|
@@ -92,7 +94,7 @@ export class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
92
94
|
internalTexture.height = this._reflectionCubeMapTextureSize;
|
|
93
95
|
internalTexture._cachedWrapU = 1;
|
|
94
96
|
internalTexture._cachedWrapV = 1;
|
|
95
|
-
internalTexture._hardwareTexture = new WebGLHardwareTexture(lp,
|
|
97
|
+
internalTexture._hardwareTexture = new WebGLHardwareTexture(lp, graphicsBinding.context);
|
|
96
98
|
this._reflectionCubeMap._texture = internalTexture;
|
|
97
99
|
}
|
|
98
100
|
else {
|
|
@@ -150,18 +152,12 @@ export class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
150
152
|
}
|
|
151
153
|
return this._xrLightEstimate;
|
|
152
154
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
155
|
+
_getXRWebGLBinding() {
|
|
156
|
+
const graphicsBinding = this._xrSessionManager._getGraphicsBinding();
|
|
157
|
+
if (graphicsBinding.bindingType !== 0 /* WebXRGraphicsBindingType.WebGL */) {
|
|
158
|
+
throw new Error("Expected a WebGL graphics binding for WebXR Light Estimation reflections.");
|
|
156
159
|
}
|
|
157
|
-
return
|
|
158
|
-
}
|
|
159
|
-
_getXRGLBinding() {
|
|
160
|
-
if (this._xrWebGLBinding === null) {
|
|
161
|
-
const context = this._getCanvasContext();
|
|
162
|
-
this._xrWebGLBinding = new XRWebGLBinding(this._xrSessionManager.session, context);
|
|
163
|
-
}
|
|
164
|
-
return this._xrWebGLBinding;
|
|
160
|
+
return graphicsBinding;
|
|
165
161
|
}
|
|
166
162
|
/**
|
|
167
163
|
* attach this feature
|
|
@@ -173,6 +169,12 @@ export class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
173
169
|
if (!super.attach()) {
|
|
174
170
|
return false;
|
|
175
171
|
}
|
|
172
|
+
const isWebGPU = this._xrSessionManager.scene.getEngine().isWebGPU;
|
|
173
|
+
this._reflectionCubeMapEnabled = !this.options.disableCubeMapReflection && !isWebGPU;
|
|
174
|
+
if (!this.options.disableCubeMapReflection && isWebGPU && !this._webGPUReflectionWarningEmitted) {
|
|
175
|
+
Logger.Warn(WebGPUReflectionWarning);
|
|
176
|
+
this._webGPUReflectionWarningEmitted = true;
|
|
177
|
+
}
|
|
176
178
|
const reflectionFormat = this.options.reflectionFormat ?? (this._xrSessionManager.session.preferredReflectionFormat || "srgba8");
|
|
177
179
|
this.options.reflectionFormat = reflectionFormat;
|
|
178
180
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
@@ -183,7 +185,7 @@ export class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
183
185
|
// eslint-disable-next-line github/no-then
|
|
184
186
|
.then((xrLightProbe) => {
|
|
185
187
|
this._xrLightProbe = xrLightProbe;
|
|
186
|
-
if (
|
|
188
|
+
if (this._reflectionCubeMapEnabled) {
|
|
187
189
|
if (!this._reflectionCubeMap) {
|
|
188
190
|
this._reflectionCubeMap = new BaseTexture(this._xrSessionManager.scene);
|
|
189
191
|
this._reflectionCubeMap._isCube = true;
|
|
@@ -205,14 +207,13 @@ export class WebXRLightEstimation extends WebXRAbstractFeature {
|
|
|
205
207
|
*/
|
|
206
208
|
detach() {
|
|
207
209
|
const detached = super.detach();
|
|
208
|
-
if (this._xrLightProbe !== null
|
|
209
|
-
|
|
210
|
+
if (this._xrLightProbe !== null) {
|
|
211
|
+
if (this._reflectionCubeMapEnabled) {
|
|
212
|
+
this._xrLightProbe.removeEventListener("reflectionchange", this._updateReflectionCubeMap);
|
|
213
|
+
}
|
|
210
214
|
this._xrLightProbe = null;
|
|
211
215
|
}
|
|
212
|
-
this._canvasContext = null;
|
|
213
216
|
this._xrLightEstimate = null;
|
|
214
|
-
// When the session ends (on detach) we must clear our XRWebGLBinging instance, which references the ended session.
|
|
215
|
-
this._xrWebGLBinding = null;
|
|
216
217
|
return detached;
|
|
217
218
|
}
|
|
218
219
|
/**
|