@onerjs/core 8.25.1 → 8.25.3
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/Bones/bone.js +14 -54
- package/Bones/bone.js.map +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js +1 -1
- package/Engines/AbstractEngine/abstractEngine.cubeTexture.js.map +1 -1
- package/Engines/Native/nativeShaderProcessors.js +3 -0
- package/Engines/Native/nativeShaderProcessors.js.map +1 -1
- package/Engines/WebGL/webGL2ShaderProcessors.js +3 -0
- package/Engines/WebGL/webGL2ShaderProcessors.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +3 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +4 -1
- package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js +4 -1
- package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
- package/Engines/abstractEngine.d.ts +1 -1
- package/Engines/abstractEngine.functions.d.ts +2 -2
- package/Engines/abstractEngine.functions.js.map +1 -1
- package/Engines/abstractEngine.js +2 -2
- package/Engines/abstractEngine.js.map +1 -1
- package/Engines/nullEngine.js +1 -0
- package/Engines/nullEngine.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js +10 -0
- package/FrameGraph/Node/Blocks/Rendering/baseObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.d.ts +3 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js +10 -0
- package/FrameGraph/Node/Blocks/Rendering/geometryRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js +8 -0
- package/FrameGraph/Node/Blocks/Rendering/objectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js +16 -0
- package/FrameGraph/Node/Blocks/Rendering/taaObjectRendererBlock.js.map +1 -1
- package/FrameGraph/Node/Blocks/inputBlock.js +2 -0
- package/FrameGraph/Node/Blocks/inputBlock.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +16 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +8 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +40 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.d.ts +3 -1
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js +10 -7
- package/FrameGraph/Tasks/Rendering/taaObjectRendererTask.js.map +1 -1
- package/FrameGraph/frameGraph.d.ts +2 -2
- package/FrameGraph/frameGraph.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.js +4 -0
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gizmos/cameraGizmo.js +11 -13
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.js +21 -13
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Loading/sceneLoader.d.ts +3 -1
- package/Loading/sceneLoader.js +3 -2
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/Background/backgroundMaterial.js +1 -1
- package/Materials/Background/backgroundMaterial.js.map +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js +1 -1
- package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
- package/Materials/Node/nodeMaterial.d.ts +1 -1
- package/Materials/Node/nodeMaterial.js +3 -14
- package/Materials/Node/nodeMaterial.js.map +1 -1
- package/Materials/PBR/pbrBaseMaterial.js +1 -1
- package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
- package/Materials/Textures/renderTargetTexture.d.ts +5 -0
- package/Materials/Textures/renderTargetTexture.js +9 -0
- package/Materials/Textures/renderTargetTexture.js.map +1 -1
- package/Materials/material.d.ts +17 -1
- package/Materials/material.js +38 -7
- package/Materials/material.js.map +1 -1
- package/Materials/materialDefines.d.ts +1 -0
- package/Materials/materialDefines.js +1 -0
- package/Materials/materialDefines.js.map +1 -1
- package/Materials/materialHelper.functions.d.ts +2 -1
- package/Materials/materialHelper.functions.js +3 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/standardMaterial.js +1 -1
- package/Materials/standardMaterial.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js +3 -10
- package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
- package/Meshes/geometry.js +4 -4
- package/Meshes/geometry.js.map +1 -1
- package/Misc/assetsManager.d.ts +81 -25
- package/Misc/assetsManager.js +70 -32
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/fileTools.d.ts +2 -2
- package/Misc/fileTools.js +3 -1
- package/Misc/fileTools.js.map +1 -1
- package/Misc/sceneSerializer.js +3 -1
- package/Misc/sceneSerializer.js.map +1 -1
- package/Particles/IParticleSystem.d.ts +6 -0
- package/Particles/IParticleSystem.js.map +1 -1
- package/Particles/gpuParticleSystem.d.ts +4 -0
- package/Particles/gpuParticleSystem.js +4 -0
- package/Particles/gpuParticleSystem.js.map +1 -1
- package/Particles/thinParticleSystem.d.ts +14 -0
- package/Particles/thinParticleSystem.js +19 -0
- package/Particles/thinParticleSystem.js.map +1 -1
- package/Physics/joinedPhysicsEngineComponent.js +1 -1
- package/Physics/joinedPhysicsEngineComponent.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.d.ts +5 -3
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js +22 -9
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js +3 -0
- package/PostProcesses/RenderPipeline/Pipelines/taaMaterialManager.js.map +1 -1
- package/Rendering/objectRenderer.d.ts +18 -2
- package/Rendering/objectRenderer.js +69 -29
- package/Rendering/objectRenderer.js.map +1 -1
- package/Rendering/outlineRenderer.d.ts +4 -0
- package/Rendering/outlineRenderer.js +10 -0
- package/Rendering/outlineRenderer.js.map +1 -1
- package/Shaders/pbr.vertex.js +1 -5
- package/Shaders/pbr.vertex.js.map +1 -1
- package/Shaders/ssao2.fragment.js +14 -2
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/ShadersWGSL/ssao2.fragment.js +14 -2
- package/ShadersWGSL/ssao2.fragment.js.map +1 -1
- package/XR/features/WebXRDepthSensing.js +6 -2
- package/XR/features/WebXRDepthSensing.js.map +1 -1
- package/package.json +1 -1
- package/scene.js +2 -0
- package/scene.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebXRDepthSensing.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRDepthSensing.ts"],"names":[],"mappings":"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","sourcesContent":["import { RawTexture } from \"../../Materials/Textures/rawTexture\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { WebGLHardwareTexture } from \"../../Engines/WebGL/webGLHardwareTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport type { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { RegisterMaterialPlugin } from \"core/Materials/materialPluginManager\";\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\n\r\nexport type WebXRDepthUsage = \"cpu\" | \"gpu\";\r\nexport type WebXRDepthDataFormat = \"ushort\" | \"float\" | \"luminance-alpha\";\r\n\r\n/**\r\n * Options for Depth Sensing feature\r\n */\r\nexport interface IWebXRDepthSensingOptions {\r\n /**\r\n * The desired depth sensing usage for the session\r\n */\r\n usagePreference: WebXRDepthUsage[];\r\n /**\r\n * The desired depth sensing data format for the session\r\n */\r\n dataFormatPreference: WebXRDepthDataFormat[];\r\n\r\n /**\r\n * Depth sensing will be enabled on all materials per default, if the GPU variant is enabled.\r\n * If you just want to use the texture or the CPU variant instead set this to true.\r\n */\r\n disableDepthSensingOnMaterials?: boolean;\r\n\r\n /**\r\n * If set to true the occluded pixels will not be discarded but the pixel color will be changed based on the occlusion factor\r\n * Enabling this will lead to worse performance but slightly better outcome.\r\n * It is possible we will change this in the future to look even better.\r\n */\r\n useToleranceFactorForDepthSensing?: boolean;\r\n\r\n /**\r\n * If set to true the texture will be set to be used for visualization.\r\n * In this case it will probably NOT work correctly on the materials.\r\n * So be aware that, for the time being, you can only use one or the other.\r\n */\r\n prepareTextureForVisualization?: boolean;\r\n}\r\n\r\ntype GetDepthInMetersType = (x: number, y: number) => number;\r\n\r\nclass DepthSensingMaterialDefines extends MaterialDefines {\r\n /**\r\n * Is the feature enabled\r\n */\r\n DEPTH_SENSING = false;\r\n\r\n /**\r\n * Is the texture type provided as a texture array\r\n */\r\n DEPTH_SENSING_TEXTURE_ARRAY = false;\r\n\r\n /**\r\n * Is the texture type provided as Alpha-Luminance (unpacked differently on the shader)\r\n */\r\n DEPTH_SENSING_TEXTURE_AL = false;\r\n\r\n /**\r\n * Should the shader discard the pixel if the depth is less than the asset depth\r\n * Will lead to better performance. the other variant is to change the color based on a tolerance factor\r\n */\r\n DEPTH_SENSING_DISCARD = true;\r\n}\r\n\r\nlet IsPluginEnabled = false;\r\nlet DepthTexture: Nullable<RawTexture> = null;\r\nlet AlphaLuminanceTexture = false;\r\nconst ScreenSize = { width: 512, height: 512 };\r\nconst ShaderViewport = { x: 0, y: 0, width: 1, height: 1 };\r\nlet GlobalRawValueToMeters = 1;\r\nlet ViewIndex = 0;\r\nlet EnableDiscard = true;\r\nconst UvTransform = Matrix.Identity();\r\nconst ManagedMaterialPlugins: WebXRDepthSensingMaterialPlugin[] = [];\r\n\r\n/**\r\n * @internal\r\n */\r\nclass WebXRDepthSensingMaterialPlugin extends MaterialPluginBase {\r\n private _varColorName: string;\r\n private _isEnabled = false;\r\n\r\n /** @internal */\r\n protected _markAllDefinesAsDirty(): void {\r\n this._enable(this._isEnabled);\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets whether the mesh debug plugin is enabled in the material.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the mesh debug plugin is enabled in the material.\r\n * @param value enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n this._isEnabled = value;\r\n this._markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a given shader language.\r\n * @param shaderLanguage The shader language to use.\r\n * @returns true if the plugin is compatible with the shader language\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n return true;\r\n default:\r\n // no webgpu for webxr yet, however - if this is not true the plugin fails to load.\r\n // webxr is currently only supported on webgl, and the plugin is disabled per default.\r\n return true;\r\n }\r\n }\r\n\r\n constructor(material: Material) {\r\n super(material, \"DepthSensing\", 222, new DepthSensingMaterialDefines());\r\n this._varColorName = material instanceof PBRBaseMaterial ? \"finalColor\" : \"color\";\r\n ManagedMaterialPlugins.push(this);\r\n }\r\n\r\n /**\r\n * Prepare the defines\r\n * @param defines the defines\r\n */\r\n public override prepareDefines(defines: DepthSensingMaterialDefines) {\r\n defines.DEPTH_SENSING = !!DepthTexture && IsPluginEnabled;\r\n defines.DEPTH_SENSING_TEXTURE_ARRAY = DepthTexture?.is2DArray ?? false;\r\n defines.DEPTH_SENSING_TEXTURE_AL = AlphaLuminanceTexture;\r\n defines.DEPTH_SENSING_DISCARD = EnableDiscard;\r\n }\r\n\r\n public override getUniforms() {\r\n return {\r\n // first, define the UBO with the correct type and size.\r\n ubo: [\r\n { name: \"ds_invScreenSize\", size: 2, type: \"vec2\" },\r\n { name: \"ds_rawValueToMeters\", size: 1, type: \"float\" },\r\n { name: \"ds_viewIndex\", size: 1, type: \"float\" },\r\n { name: \"ds_shaderViewport\", size: 4, type: \"vec4\" },\r\n { name: \"ds_uvTransform\", size: 16, type: \"mat4\" },\r\n ],\r\n // now, on the fragment shader, add the uniform itself in case uniform buffers are not supported by the engine\r\n fragment: `#ifdef DEPTH_SENSING\r\n uniform vec2 ds_invScreenSize;\r\n uniform float ds_rawValueToMeters;\r\n uniform float ds_viewIndex;\r\n uniform vec4 ds_shaderViewport;\r\n uniform mat4 ds_uvTransform;\r\n #endif\r\n `,\r\n };\r\n }\r\n\r\n public override getSamplers(samplers: string[]): void {\r\n samplers.push(\"ds_depthSampler\");\r\n }\r\n\r\n public override bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (IsPluginEnabled && DepthTexture) {\r\n uniformBuffer.updateFloat2(\"ds_invScreenSize\", 1 / ScreenSize.width, 1 / ScreenSize.height);\r\n uniformBuffer.updateFloat(\"ds_rawValueToMeters\", GlobalRawValueToMeters);\r\n uniformBuffer.updateFloat(\"ds_viewIndex\", ViewIndex);\r\n uniformBuffer.updateFloat4(\"ds_shaderViewport\", ShaderViewport.x, ShaderViewport.y, ShaderViewport.width, ShaderViewport.height);\r\n uniformBuffer.setTexture(\"ds_depthSampler\", DepthTexture);\r\n uniformBuffer.updateMatrix(\"ds_uvTransform\", UvTransform);\r\n }\r\n }\r\n\r\n public override getClassName() {\r\n return \"DepthSensingMaterialPlugin\";\r\n }\r\n\r\n public override getCustomCode(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n return shaderType === \"vertex\"\r\n ? {\r\n CUSTOM_VERTEX_MAIN_BEGIN: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n ds_viewIndexMultiview = float(gl_ViewID_OVR);\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n varying float ds_viewIndexMultiview;\r\n #endif\r\n #endif\r\n `,\r\n }\r\n : {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n uniform highp sampler2DArray ds_depthSampler;\r\n #else\r\n uniform sampler2D ds_depthSampler;\r\n #endif\r\n #ifdef MULTIVIEW\r\n varying float ds_viewIndexMultiview;\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_FRAGMENT_MAIN_BEGIN: `\r\n#ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n float ds_viewIndexSet = ds_viewIndexMultiview;\r\n vec2 ds_compensation = vec2(0.0, 0.0);\r\n #else\r\n float ds_viewIndexSet = ds_viewIndex;\r\n vec2 ds_compensation = vec2(ds_viewIndexSet, 0.0);\r\n #endif\r\n vec2 ds_baseUv = gl_FragCoord.xy * ds_invScreenSize;\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n vec2 ds_uv = ds_baseUv - ds_compensation;\r\n vec3 ds_depthUv = vec3((ds_uvTransform * vec4(ds_uv, 0.0, 1.0)).xy, ds_viewIndexSet);\r\n #else\r\n vec2 ds_depthUv = (ds_uvTransform * vec4(ds_baseUv.x, 1.0 - ds_baseUv.y, 0.0, 1.0)).xy;\r\n #endif\r\n #ifdef DEPTH_SENSING_TEXTURE_AL\r\n // from alpha-luminance - taken from the explainer\r\n vec2 ds_alphaLuminance = texture(ds_depthSampler, ds_depthUv).ra;\r\n float ds_cameraDepth = dot(ds_alphaLuminance, vec2(255.0, 256.0 * 255.0));\r\n #else\r\n float ds_cameraDepth = texture(ds_depthSampler, ds_depthUv).r;\r\n #endif\r\n\r\n ds_cameraDepth = ds_cameraDepth * ds_rawValueToMeters;\r\n\r\n float ds_assetDepth = gl_FragCoord.z;\r\n #ifdef DEPTH_SENSING_DISCARD\r\n if(ds_cameraDepth < ds_assetDepth) {\r\n discard;\r\n }\r\n #endif\r\n#endif \r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#ifdef DEPTH_SENSING\r\n #ifndef DEPTH_SENSING_DISCARD\r\n const float ds_depthTolerancePerM = 0.005;\r\n float ds_occlusion = clamp(1.0 - 0.5 * (ds_cameraDepth - ds_assetDepth) / (ds_depthTolerancePerM * ds_assetDepth) +\r\n 0.5, 0.0, 1.0);\r\n ${this._varColorName} *= (1.0 - ds_occlusion);\r\n #endif\r\n#endif \r\n `,\r\n };\r\n }\r\n\r\n public override dispose(_forceDisposeTextures?: boolean): void {\r\n const index = ManagedMaterialPlugins.indexOf(this);\r\n if (index !== -1) {\r\n ManagedMaterialPlugins.splice(index, 1);\r\n }\r\n super.dispose(_forceDisposeTextures);\r\n }\r\n}\r\n\r\n/**\r\n * WebXR Feature for WebXR Depth Sensing Module\r\n * @since 5.49.1\r\n */\r\nexport class WebXRDepthSensing extends WebXRAbstractFeature {\r\n private _width: Nullable<number> = null;\r\n private _height: Nullable<number> = null;\r\n private _rawValueToMeters: Nullable<number> = null;\r\n private _textureType: Nullable<string> = null;\r\n private _normDepthBufferFromNormView: Nullable<XRRigidTransform> = null;\r\n private _cachedDepthBuffer: Nullable<ArrayBuffer> = null;\r\n private _cachedWebGLTexture: Nullable<WebGLTexture> = null;\r\n private _cachedDepthImageTexture: Nullable<RawTexture> = null;\r\n private _onCameraObserver: Nullable<Observer<Camera>> = null;\r\n\r\n /**\r\n * Width of depth data. If depth data is not exist, returns null.\r\n */\r\n public get width(): Nullable<number> {\r\n return this._width;\r\n }\r\n\r\n /**\r\n * Height of depth data. If depth data is not exist, returns null.\r\n */\r\n public get height(): Nullable<number> {\r\n return this._height;\r\n }\r\n\r\n /**\r\n * Scale factor by which the raw depth values must be multiplied in order to get the depths in meters.\r\n */\r\n public get rawValueToMeters(): Nullable<number> {\r\n return this._rawValueToMeters;\r\n }\r\n\r\n /**\r\n * An XRRigidTransform that needs to be applied when indexing into the depth buffer.\r\n */\r\n public get normDepthBufferFromNormView(): Nullable<XRRigidTransform> {\r\n return this._normDepthBufferFromNormView;\r\n }\r\n\r\n /**\r\n * Describes which depth-sensing usage (\"cpu\" or \"gpu\") is used.\r\n */\r\n public get depthUsage(): WebXRDepthUsage {\r\n switch (this._xrSessionManager.session.depthUsage) {\r\n case \"cpu-optimized\":\r\n return \"cpu\";\r\n case \"gpu-optimized\":\r\n return \"gpu\";\r\n }\r\n }\r\n\r\n /**\r\n * Describes which depth sensing data format (\"ushort\" or \"float\") is used.\r\n */\r\n public get depthDataFormat(): WebXRDepthDataFormat {\r\n switch (this._xrSessionManager.session.depthDataFormat) {\r\n case \"luminance-alpha\":\r\n return \"ushort\";\r\n case \"float32\":\r\n return \"float\";\r\n case \"unsigned-short\":\r\n return \"ushort\";\r\n }\r\n }\r\n\r\n /**\r\n * Latest cached InternalTexture which containing depth buffer information.\r\n * This can be used when the depth usage is \"gpu\".\r\n * @deprecated This will be removed in the future. Use latestDepthImageTexture\r\n */\r\n public get latestInternalTexture(): Nullable<InternalTexture> {\r\n if (!this._cachedWebGLTexture) {\r\n return null;\r\n }\r\n\r\n return this._getInternalTextureFromDepthInfo();\r\n }\r\n\r\n /**\r\n * cached depth buffer\r\n */\r\n public get latestDepthBuffer(): Nullable<ArrayBufferView> {\r\n if (!this._cachedDepthBuffer) {\r\n return null;\r\n }\r\n\r\n return this.depthDataFormat === \"float\" ? new Float32Array(this._cachedDepthBuffer) : new Uint16Array(this._cachedDepthBuffer);\r\n }\r\n\r\n /**\r\n * Event that notify when `DepthInformation.getDepthInMeters` is available.\r\n * `getDepthInMeters` method needs active XRFrame (not available for cached XRFrame)\r\n */\r\n public onGetDepthInMetersAvailable: Observable<GetDepthInMetersType> = new Observable<GetDepthInMetersType>();\r\n\r\n /**\r\n * Latest cached Texture of depth image which is made from the depth buffer data.\r\n */\r\n public get latestDepthImageTexture(): Nullable<RawTexture> {\r\n return this._cachedDepthImageTexture;\r\n }\r\n\r\n /**\r\n * XRWebGLBinding which is used for acquiring WebGLDepthInformation\r\n */\r\n private _glBinding?: XRWebGLBinding;\r\n\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.DEPTH_SENSING;\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number does not correspond to the WebXR specs version\r\n */\r\n public static readonly Version = 1;\r\n\r\n /**\r\n * Creates a new instance of the depth sensing feature\r\n * @param _xrSessionManager the WebXRSessionManager\r\n * @param options options for WebXR Depth Sensing Feature\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n public readonly options: IWebXRDepthSensingOptions\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"depth-sensing\";\r\n\r\n // https://immersive-web.github.io/depth-sensing/\r\n Tools.Warn(\"depth-sensing is an experimental and unstable feature.\");\r\n EnableDiscard = !options.useToleranceFactorForDepthSensing;\r\n }\r\n\r\n /**\r\n * attach this feature\r\n * Will usually be called by the features manager\r\n * @param force should attachment be forced (even when already attached)\r\n * @returns true if successful.\r\n */\r\n public override attach(force?: boolean): boolean {\r\n if (!super.attach(force)) {\r\n return false;\r\n }\r\n\r\n const isBothDepthUsageAndFormatNull = this._xrSessionManager.session.depthDataFormat == null || this._xrSessionManager.session.depthUsage == null;\r\n if (isBothDepthUsageAndFormatNull) {\r\n return false;\r\n }\r\n\r\n this._glBinding = new XRWebGLBinding(this._xrSessionManager.session, (this._xrSessionManager.scene.getEngine() as ThinEngine)._gl);\r\n\r\n IsPluginEnabled = !this.options.disableDepthSensingOnMaterials;\r\n if (IsPluginEnabled) {\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.isEnabled = true;\r\n }\r\n this._onCameraObserver = this._xrSessionManager.scene.onBeforeCameraRenderObservable.add((camera) => {\r\n if (!IsPluginEnabled) {\r\n return;\r\n }\r\n // make sure this is a webxr camera\r\n if (camera.outputRenderTarget) {\r\n const viewport = camera.rigCameras.length > 0 ? camera.rigCameras[0].viewport : camera.viewport;\r\n ScreenSize.width = camera.outputRenderTarget.getRenderWidth() / (camera.rigParent ? camera.rigParent.rigCameras.length || 1 : 1);\r\n ScreenSize.height = camera.outputRenderTarget.getRenderHeight();\r\n ShaderViewport.x = viewport.x;\r\n ShaderViewport.y = viewport.y;\r\n ShaderViewport.width = viewport.width;\r\n ShaderViewport.height = viewport.height;\r\n\r\n // find the viewIndex\r\n if (camera.rigParent) {\r\n // should use the viewIndexes array!\r\n ViewIndex = camera.isLeftCamera ? 0 : 1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override detach() {\r\n IsPluginEnabled = false;\r\n DepthTexture = null;\r\n this._cachedWebGLTexture = null;\r\n this._cachedDepthBuffer = null;\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.isEnabled = false;\r\n }\r\n if (this._onCameraObserver) {\r\n this._xrSessionManager.scene.onBeforeCameraRenderObservable.remove(this._onCameraObserver);\r\n }\r\n return super.detach();\r\n }\r\n\r\n /**\r\n * Dispose this feature and all of the resources attached\r\n */\r\n public override dispose(): void {\r\n this._cachedDepthImageTexture?.dispose();\r\n this.onGetDepthInMetersAvailable.clear();\r\n // cleanup\r\n if (this._onCameraObserver) {\r\n this._xrSessionManager.scene.onBeforeCameraRenderObservable.remove(this._onCameraObserver);\r\n }\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.dispose();\r\n }\r\n ManagedMaterialPlugins.length = 0;\r\n }\r\n\r\n protected _onXRFrame(_xrFrame: XRFrame): void {\r\n const referenceSPace = this._xrSessionManager.referenceSpace;\r\n const pose = _xrFrame.getViewerPose(referenceSPace);\r\n if (pose == null) {\r\n return;\r\n }\r\n for (const view of pose.views) {\r\n switch (this.depthUsage) {\r\n case \"cpu\":\r\n this._updateDepthInformationAndTextureCPUDepthUsage(_xrFrame, view, this.depthDataFormat);\r\n break;\r\n case \"gpu\":\r\n if (!this._glBinding) {\r\n break;\r\n }\r\n this._updateDepthInformationAndTextureWebGLDepthUsage(this._glBinding, view, this.depthDataFormat);\r\n break;\r\n default:\r\n Tools.Error(\"Unknown depth usage\");\r\n this.detach();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private _updateDepthInformationAndTextureCPUDepthUsage(frame: XRFrame, view: XRView, dataFormat: WebXRDepthDataFormat): void {\r\n const depthInfo = frame.getDepthInformation(view);\r\n if (depthInfo === null) {\r\n return;\r\n }\r\n\r\n const { data, width, height, rawValueToMeters, getDepthInMeters, normDepthBufferFromNormView } = depthInfo as XRCPUDepthInformation;\r\n\r\n this._width = width;\r\n this._height = height;\r\n this._rawValueToMeters = rawValueToMeters;\r\n this._cachedDepthBuffer = data;\r\n GlobalRawValueToMeters = rawValueToMeters;\r\n AlphaLuminanceTexture = dataFormat === \"luminance-alpha\";\r\n UvTransform.fromArray(normDepthBufferFromNormView.matrix);\r\n\r\n // to avoid Illegal Invocation error, bind `this`\r\n this.onGetDepthInMetersAvailable.notifyObservers(getDepthInMeters.bind(depthInfo));\r\n\r\n if (!this._cachedDepthImageTexture) {\r\n this._cachedDepthImageTexture = RawTexture.CreateRTexture(\r\n null,\r\n width,\r\n height,\r\n this._xrSessionManager.scene,\r\n false,\r\n false,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\r\n DepthTexture = this._cachedDepthImageTexture;\r\n }\r\n\r\n let float32Array: Float32Array | null = null;\r\n switch (dataFormat) {\r\n case \"ushort\":\r\n case \"luminance-alpha\":\r\n float32Array = Float32Array.from(new Uint16Array(data));\r\n\r\n break;\r\n case \"float\":\r\n float32Array = new Float32Array(data);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n if (float32Array) {\r\n if (this.options.prepareTextureForVisualization) {\r\n float32Array = float32Array.map((val) => val * rawValueToMeters);\r\n }\r\n this._cachedDepthImageTexture.update(float32Array);\r\n }\r\n }\r\n\r\n private _updateDepthInformationAndTextureWebGLDepthUsage(webglBinding: XRWebGLBinding, view: XRView, dataFormat: WebXRDepthDataFormat): void {\r\n const depthInfo = webglBinding.getDepthInformation(view);\r\n if (depthInfo === null) {\r\n return;\r\n }\r\n const { texture, width, height, textureType, rawValueToMeters, normDepthBufferFromNormView } = depthInfo as XRWebGLDepthInformation;\r\n\r\n GlobalRawValueToMeters = rawValueToMeters;\r\n AlphaLuminanceTexture = dataFormat === \"luminance-alpha\";\r\n UvTransform.fromArray(normDepthBufferFromNormView.matrix);\r\n\r\n if (this._cachedWebGLTexture) {\r\n return;\r\n }\r\n\r\n this._width = width;\r\n this._height = height;\r\n this._cachedWebGLTexture = texture;\r\n this._textureType = textureType;\r\n\r\n const scene = this._xrSessionManager.scene;\r\n const internalTexture = this._getInternalTextureFromDepthInfo();\r\n\r\n if (!this._cachedDepthImageTexture) {\r\n this._cachedDepthImageTexture = RawTexture.CreateRTexture(\r\n null,\r\n width,\r\n height,\r\n scene,\r\n false,\r\n true,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n dataFormat === \"float\" ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n }\r\n\r\n this._cachedDepthImageTexture._texture = internalTexture;\r\n DepthTexture = this._cachedDepthImageTexture;\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Extends the session init object if needed\r\n * @returns augmentation object for the xr session init object.\r\n */\r\n public async getXRSessionInitExtension(): Promise<Partial<XRSessionInit>> {\r\n const isDepthUsageDeclared = this.options.usagePreference != null && this.options.usagePreference.length !== 0;\r\n const isDataFormatDeclared = this.options.dataFormatPreference != null && this.options.dataFormatPreference.length !== 0;\r\n\r\n return await new Promise((resolve) => {\r\n if (isDepthUsageDeclared && isDataFormatDeclared) {\r\n const usages: XRDepthUsage[] = this.options.usagePreference.map((usage) => {\r\n switch (usage) {\r\n case \"cpu\":\r\n return \"cpu-optimized\";\r\n case \"gpu\":\r\n return \"gpu-optimized\";\r\n }\r\n });\r\n const dataFormats: XRDepthDataFormat[] = this.options.dataFormatPreference.map((format) => {\r\n switch (format) {\r\n case \"luminance-alpha\":\r\n return \"luminance-alpha\";\r\n case \"float\":\r\n return \"float32\";\r\n case \"ushort\":\r\n return \"unsigned-short\";\r\n }\r\n });\r\n\r\n resolve({\r\n depthSensing: {\r\n usagePreference: usages,\r\n dataFormatPreference: dataFormats,\r\n },\r\n });\r\n } else {\r\n resolve({});\r\n }\r\n });\r\n }\r\n\r\n private _getInternalTextureFromDepthInfo(): InternalTexture {\r\n const engine = this._xrSessionManager.scene.getEngine();\r\n const dataFormat = this.depthDataFormat;\r\n const textureType = this._textureType;\r\n if (!this._width || !this._height || !this._cachedWebGLTexture) {\r\n throw new Error(\"Depth information is not available\");\r\n }\r\n const internalTexture = (engine as Engine).wrapWebGLTexture(\r\n this._cachedWebGLTexture,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n this._width || 256,\r\n this._height || 256\r\n );\r\n internalTexture.isCube = false;\r\n internalTexture.invertY = false;\r\n internalTexture._useSRGBBuffer = false;\r\n internalTexture.format = dataFormat === \"luminance-alpha\" ? Constants.TEXTUREFORMAT_LUMINANCE_ALPHA : Constants.TEXTUREFORMAT_RGBA;\r\n internalTexture.generateMipMaps = false;\r\n internalTexture.type =\r\n dataFormat === \"float\" ? Constants.TEXTURETYPE_FLOAT : dataFormat === \"ushort\" ? Constants.TEXTURETYPE_UNSIGNED_SHORT : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture._cachedWrapU = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n internalTexture._cachedWrapV = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n internalTexture._hardwareTexture = new WebGLHardwareTexture(this._cachedWebGLTexture, (engine as ThinEngine)._gl);\r\n internalTexture.is2DArray = textureType === \"texture-array\";\r\n\r\n return internalTexture;\r\n }\r\n}\r\n\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRDepthSensing.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRDepthSensing(xrSessionManager, options);\r\n },\r\n WebXRDepthSensing.Version,\r\n false\r\n);\r\n\r\nRegisterMaterialPlugin(\"WebXRDepthSensingMaterialPlugin\", (material) => new WebXRDepthSensingMaterialPlugin(material));\r\n"]}
|
|
1
|
+
{"version":3,"file":"WebXRDepthSensing.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRDepthSensing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAGhF,OAAO,EAAE,kBAAkB,EAAE,8CAA0C;AAGvE,OAAO,EAAE,eAAe,EAAE,2CAAuC;AAEjE,OAAO,EAAE,eAAe,EAAE,+CAA2C;AACrE,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,iDAA6C;AAExG,OAAO,EAAE,MAAM,EAAE,mCAA+B;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAyCrD,MAAM,2BAA4B,SAAQ,eAAe;IAAzD;;QACI;;WAEG;QACH,kBAAa,GAAG,KAAK,CAAC;QAEtB;;WAEG;QACH,gCAA2B,GAAG,KAAK,CAAC;QAEpC;;WAEG;QACH,6BAAwB,GAAG,KAAK,CAAC;QAEjC;;;WAGG;QACH,0BAAqB,GAAG,IAAI,CAAC;IACjC,CAAC;CAAA;AAED,IAAI,eAAe,GAAG,KAAK,CAAC;AAC5B,IAAI,YAAY,GAAyB,IAAI,CAAC;AAC9C,IAAI,qBAAqB,GAAG,KAAK,CAAC;AAClC,MAAM,UAAU,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC/C,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC3D,IAAI,sBAAsB,GAAG,CAAC,CAAC;AAC/B,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,IAAI,aAAa,GAAG,IAAI,CAAC;AACzB,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;AACtC,MAAM,sBAAsB,GAAsC,EAAE,CAAC;AAErE;;GAEG;AACH,MAAM,+BAAgC,SAAQ,kBAAkB;IAI5D,gBAAgB;IACN,sBAAsB;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD;;;OAGG;IACH,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;YAC5B,OAAO;QACX,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAED;;;;OAIG;IACa,YAAY,CAAC,cAA8B;QACvD,QAAQ,cAAc,EAAE,CAAC;YACrB;gBACI,OAAO,IAAI,CAAC;YAChB;gBACI,mFAAmF;gBACnF,sFAAsF;gBACtF,OAAO,IAAI,CAAC;QACpB,CAAC;IACL,CAAC;IAED,YAAY,QAAkB;QAC1B,KAAK,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,2BAA2B,EAAE,CAAC,CAAC;QA3CpE,eAAU,GAAG,KAAK,CAAC;QA4CvB,IAAI,CAAC,aAAa,GAAG,QAAQ,YAAY,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC;QAClF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACa,cAAc,CAAC,OAAoC;QAC/D,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,YAAY,IAAI,eAAe,CAAC;QAC1D,OAAO,CAAC,2BAA2B,GAAG,YAAY,EAAE,SAAS,IAAI,KAAK,CAAC;QACvE,OAAO,CAAC,wBAAwB,GAAG,qBAAqB,CAAC;QACzD,OAAO,CAAC,qBAAqB,GAAG,aAAa,CAAC;IAClD,CAAC;IAEe,WAAW;QACvB,OAAO;YACH,wDAAwD;YACxD,GAAG,EAAE;gBACD,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;gBACnD,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;gBACvD,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;gBAChD,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;gBACpD,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;aACrD;YACD,8GAA8G;YAC9G,QAAQ,EAAE;;;;;;;iBAOL;SACR,CAAC;IACN,CAAC;IAEe,WAAW,CAAC,QAAkB;QAC1C,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACrC,CAAC;IAEe,cAAc,CAAC,aAA4B;QACvD,IAAI,eAAe,IAAI,YAAY,EAAE,CAAC;YAClC,aAAa,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;YAC5F,aAAa,CAAC,WAAW,CAAC,qBAAqB,EAAE,sBAAsB,CAAC,CAAC;YACzE,aAAa,CAAC,WAAW,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;YACrD,aAAa,CAAC,YAAY,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;YACjI,aAAa,CAAC,UAAU,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YAC1D,aAAa,CAAC,YAAY,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAEe,YAAY;QACxB,OAAO,4BAA4B,CAAC;IACxC,CAAC;IAEe,aAAa,CAAC,UAAkB;QAC5C,OAAO,UAAU,KAAK,QAAQ;YAC1B,CAAC,CAAC;gBACI,wBAAwB,EAAE;;;;;;iBAM3B;gBACC,yBAAyB,EAAE;;;;;;iBAM5B;aACF;YACH,CAAC,CAAC;gBACI,2BAA2B,EAAE;;;;;;;;;;;mBAW5B;gBACD,0BAA0B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAiC3B;gBACD,gCAAgC,EAAE;;;;;;UAM1C,IAAI,CAAC,aAAa;;;mBAGT;aACJ,CAAC;IACZ,CAAC;IAEe,OAAO,CAAC,qBAA+B;QACnD,MAAM,KAAK,GAAG,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,sBAAsB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;CACJ;AAED,aAAa,CAAC,oCAAoC,EAAE,+BAA+B,CAAC,CAAC;AAErF;;;GAGG;AACH,MAAM,OAAO,iBAAkB,SAAQ,oBAAoB;IAWvD;;OAEG;IACH,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAW,gBAAgB;QACvB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,IAAW,2BAA2B;QAClC,OAAO,IAAI,CAAC,4BAA4B,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACjB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAChD,KAAK,eAAe;gBAChB,OAAO,KAAK,CAAC;YACjB,KAAK,eAAe;gBAChB,OAAO,KAAK,CAAC;QACrB,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAW,eAAe;QACtB,QAAQ,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YACrD,KAAK,iBAAiB;gBAClB,OAAO,QAAQ,CAAC;YACpB,KAAK,SAAS;gBACV,OAAO,OAAO,CAAC;YACnB,KAAK,gBAAgB;gBACjB,OAAO,QAAQ,CAAC;QACxB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,IAAW,qBAAqB;QAC5B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,gCAAgC,EAAE,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,IAAW,iBAAiB;QACxB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnI,CAAC;IAQD;;OAEG;IACH,IAAW,uBAAuB;QAC9B,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACzC,CAAC;IAmBD;;;;OAIG;IACH,YACI,iBAAsC,EACtB,OAAkC;QAElD,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAFT,YAAO,GAAP,OAAO,CAA2B;QA7H9C,WAAM,GAAqB,IAAI,CAAC;QAChC,YAAO,GAAqB,IAAI,CAAC;QACjC,sBAAiB,GAAqB,IAAI,CAAC;QAC3C,iBAAY,GAAqB,IAAI,CAAC;QACtC,iCAA4B,GAA+B,IAAI,CAAC;QAChE,uBAAkB,GAA0B,IAAI,CAAC;QACjD,wBAAmB,GAA2B,IAAI,CAAC;QACnD,6BAAwB,GAAyB,IAAI,CAAC;QACtD,sBAAiB,GAA+B,IAAI,CAAC;QAgF7D;;;WAGG;QACI,gCAA2B,GAAqC,IAAI,UAAU,EAAwB,CAAC;QAoC1G,IAAI,CAAC,mBAAmB,GAAG,eAAe,CAAC;QAE3C,iDAAiD;QACjD,KAAK,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACrE,aAAa,GAAG,CAAC,OAAO,CAAC,iCAAiC,CAAC;QAE3D,sBAAsB,CAAC,iCAAiC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,+BAA+B,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3H,CAAC;IAED;;;;;OAKG;IACa,MAAM,CAAC,KAAe;QAClC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,6BAA6B,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;QAClJ,IAAI,6BAA6B,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAiB,CAAC,GAAG,CAAC,CAAC;QAEnI,eAAe,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC;QAC/D,IAAI,eAAe,EAAE,CAAC;YAClB,KAAK,MAAM,MAAM,IAAI,sBAAsB,EAAE,CAAC;gBAC1C,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;YAC5B,CAAC;YACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBAChG,IAAI,CAAC,eAAe,EAAE,CAAC;oBACnB,OAAO;gBACX,CAAC;gBACD,mCAAmC;gBACnC,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;oBAChG,UAAU,CAAC,KAAK,GAAG,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjI,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAC;oBAChE,cAAc,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;oBAC9B,cAAc,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;oBAC9B,cAAc,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;oBACtC,cAAc,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAExC,qBAAqB;oBACrB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;wBACnB,oCAAoC;wBACpC,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEe,MAAM;QAClB,eAAe,GAAG,KAAK,CAAC;QACxB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,sBAAsB,EAAE,CAAC;YAC1C,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;QAC7B,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACa,OAAO;QACnB,wBAAwB,CAAC,iCAAiC,CAAC,CAAC;QAC5D,IAAI,CAAC,wBAAwB,EAAE,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,CAAC;QACzC,UAAU;QACV,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC/F,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,sBAAsB,EAAE,CAAC;YAC1C,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;QACD,sBAAsB,CAAC,MAAM,GAAG,CAAC,CAAC;IACtC,CAAC;IAES,UAAU,CAAC,QAAiB;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;QAC7D,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;QACpD,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC;gBACtB,KAAK,KAAK;oBACN,IAAI,CAAC,8CAA8C,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC1F,MAAM;gBACV,KAAK,KAAK;oBACN,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;wBACnB,MAAM;oBACV,CAAC;oBACD,IAAI,CAAC,gDAAgD,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;oBACnG,MAAM;gBACV;oBACI,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;oBACnC,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,MAAM;YACd,CAAC;QACL,CAAC;IACL,CAAC;IAEO,8CAA8C,CAAC,KAAc,EAAE,IAAY,EAAE,UAAgC;QACjH,MAAM,SAAS,GAAG,KAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,GAAG,SAAkC,CAAC;QAEpI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,sBAAsB,GAAG,gBAAgB,CAAC;QAC1C,qBAAqB,GAAG,UAAU,KAAK,iBAAiB,CAAC;QACzD,WAAW,CAAC,SAAS,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAE1D,iDAAiD;QACjD,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAEnF,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACjC,IAAI,CAAC,wBAAwB,GAAG,UAAU,CAAC,cAAc,CACrD,IAAI,EACJ,KAAK,EACL,MAAM,EACN,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAC5B,KAAK,EACL,KAAK,EACL,OAAO,CAAC,oBAAoB,EAC5B,SAAS,CAAC,iBAAiB,CAC9B,CAAC;YACF,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC;QACjD,CAAC;QAED,IAAI,YAAY,GAAwB,IAAI,CAAC;QAC7C,QAAQ,UAAU,EAAE,CAAC;YACjB,KAAK,QAAQ,CAAC;YACd,KAAK,iBAAiB;gBAClB,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBAExD,MAAM;YACV,KAAK,OAAO;gBACR,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM;YAEV;gBACI,MAAM;QACd,CAAC;QACD,IAAI,YAAY,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,OAAO,CAAC,8BAA8B,EAAE,CAAC;gBAC9C,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC;YACrE,CAAC;YACD,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAEO,gDAAgD,CAAC,YAA4B,EAAE,IAAY,EAAE,UAAgC;QACjI,MAAM,SAAS,GAAG,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,GAAG,SAAoC,CAAC;QAEpI,sBAAsB,GAAG,gBAAgB,CAAC;QAC1C,qBAAqB,GAAG,UAAU,KAAK,iBAAiB,CAAC;QACzD,WAAW,CAAC,SAAS,CAAC,2BAA2B,CAAC,MAAM,CAAC,CAAC;QAE1D,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;QAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,gCAAgC,EAAE,CAAC;QAEhE,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC;YACjC,IAAI,CAAC,wBAAwB,GAAG,UAAU,CAAC,cAAc,CACrD,IAAI,EACJ,KAAK,EACL,MAAM,EACN,KAAK,EACL,KAAK,EACL,IAAI,EACJ,OAAO,CAAC,oBAAoB,EAC5B,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAC7F,CAAC;QACN,CAAC;QAED,IAAI,CAAC,wBAAwB,CAAC,QAAQ,GAAG,eAAe,CAAC;QACzD,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC7C,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,uBAAuB,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;IAC9F,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,yBAAyB;QAClC,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,CAAC;QAC/G,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,MAAM,KAAK,CAAC,CAAC;QAEzH,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACjC,IAAI,oBAAoB,IAAI,oBAAoB,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAmB,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;oBACtE,QAAQ,KAAK,EAAE,CAAC;wBACZ,KAAK,KAAK;4BACN,OAAO,eAAe,CAAC;wBAC3B,KAAK,KAAK;4BACN,OAAO,eAAe,CAAC;oBAC/B,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,MAAM,WAAW,GAAwB,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;oBACtF,QAAQ,MAAM,EAAE,CAAC;wBACb,KAAK,iBAAiB;4BAClB,OAAO,iBAAiB,CAAC;wBAC7B,KAAK,OAAO;4BACR,OAAO,SAAS,CAAC;wBACrB,KAAK,QAAQ;4BACT,OAAO,gBAAgB,CAAC;oBAChC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC;oBACJ,YAAY,EAAE;wBACV,eAAe,EAAE,MAAM;wBACvB,oBAAoB,EAAE,WAAW;qBACpC;iBACJ,CAAC,CAAC;YACP,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,gCAAgC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,eAAe,GAAI,MAAiB,CAAC,gBAAgB,CACvD,IAAI,CAAC,mBAAmB,EACxB,KAAK,EACL,SAAS,CAAC,4BAA4B,EACtC,IAAI,CAAC,MAAM,IAAI,GAAG,EAClB,IAAI,CAAC,OAAO,IAAI,GAAG,CACtB,CAAC;QACF,eAAe,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/B,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC;QAChC,eAAe,CAAC,cAAc,GAAG,KAAK,CAAC;QACvC,eAAe,CAAC,MAAM,GAAG,UAAU,KAAK,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC;QACnI,eAAe,CAAC,eAAe,GAAG,KAAK,CAAC;QACxC,eAAe,CAAC,IAAI;YAChB,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC;QAChK,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC,wBAAwB,CAAC;QAClE,eAAe,CAAC,YAAY,GAAG,SAAS,CAAC,wBAAwB,CAAC;QAClE,eAAe,CAAC,gBAAgB,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,EAAG,MAAqB,CAAC,GAAG,CAAC,CAAC;QAClH,eAAe,CAAC,SAAS,GAAG,WAAW,KAAK,eAAe,CAAC;QAE5D,OAAO,eAAe,CAAC;IAC3B,CAAC;;AA5SD;;GAEG;AACoB,sBAAI,GAAG,gBAAgB,CAAC,aAAa,AAAjC,CAAkC;AAE7D;;;;GAIG;AACoB,yBAAO,GAAG,CAAC,AAAJ,CAAK;AAqSvC,oBAAoB,CAAC,eAAe,CAChC,iBAAiB,CAAC,IAAI,EACtB,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE;IAC1B,OAAO,GAAG,EAAE,CAAC,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAClE,CAAC,EACD,iBAAiB,CAAC,OAAO,EACzB,KAAK,CACR,CAAC","sourcesContent":["import { RawTexture } from \"../../Materials/Textures/rawTexture\";\r\nimport { WebXRFeatureName, WebXRFeaturesManager } from \"../webXRFeaturesManager\";\r\nimport type { WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { Texture } from \"../../Materials/Textures/texture\";\r\nimport type { Observer } from \"../../Misc/observable\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport type { Nullable } from \"../../types\";\r\nimport { Constants } from \"../../Engines/constants\";\r\nimport { WebGLHardwareTexture } from \"../../Engines/WebGL/webGLHardwareTexture\";\r\nimport type { InternalTexture } from \"../../Materials/Textures/internalTexture\";\r\nimport type { ThinEngine } from \"../../Engines/thinEngine\";\r\nimport { MaterialPluginBase } from \"core/Materials/materialPluginBase\";\r\nimport { ShaderLanguage } from \"core/Materials/shaderLanguage\";\r\nimport type { Material } from \"core/Materials/material\";\r\nimport { MaterialDefines } from \"core/Materials/materialDefines\";\r\nimport type { UniformBuffer } from \"core/Materials/uniformBuffer\";\r\nimport { PBRBaseMaterial } from \"core/Materials/PBR/pbrBaseMaterial\";\r\nimport { RegisterMaterialPlugin, UnregisterMaterialPlugin } from \"core/Materials/materialPluginManager\";\r\nimport type { Camera } from \"core/Cameras/camera\";\r\nimport { Matrix } from \"core/Maths/math.vector\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { RegisterClass } from \"../../Misc/typeStore\";\r\n\r\nexport type WebXRDepthUsage = \"cpu\" | \"gpu\";\r\nexport type WebXRDepthDataFormat = \"ushort\" | \"float\" | \"luminance-alpha\";\r\n\r\n/**\r\n * Options for Depth Sensing feature\r\n */\r\nexport interface IWebXRDepthSensingOptions {\r\n /**\r\n * The desired depth sensing usage for the session\r\n */\r\n usagePreference: WebXRDepthUsage[];\r\n /**\r\n * The desired depth sensing data format for the session\r\n */\r\n dataFormatPreference: WebXRDepthDataFormat[];\r\n\r\n /**\r\n * Depth sensing will be enabled on all materials per default, if the GPU variant is enabled.\r\n * If you just want to use the texture or the CPU variant instead set this to true.\r\n */\r\n disableDepthSensingOnMaterials?: boolean;\r\n\r\n /**\r\n * If set to true the occluded pixels will not be discarded but the pixel color will be changed based on the occlusion factor\r\n * Enabling this will lead to worse performance but slightly better outcome.\r\n * It is possible we will change this in the future to look even better.\r\n */\r\n useToleranceFactorForDepthSensing?: boolean;\r\n\r\n /**\r\n * If set to true the texture will be set to be used for visualization.\r\n * In this case it will probably NOT work correctly on the materials.\r\n * So be aware that, for the time being, you can only use one or the other.\r\n */\r\n prepareTextureForVisualization?: boolean;\r\n}\r\n\r\ntype GetDepthInMetersType = (x: number, y: number) => number;\r\n\r\nclass DepthSensingMaterialDefines extends MaterialDefines {\r\n /**\r\n * Is the feature enabled\r\n */\r\n DEPTH_SENSING = false;\r\n\r\n /**\r\n * Is the texture type provided as a texture array\r\n */\r\n DEPTH_SENSING_TEXTURE_ARRAY = false;\r\n\r\n /**\r\n * Is the texture type provided as Alpha-Luminance (unpacked differently on the shader)\r\n */\r\n DEPTH_SENSING_TEXTURE_AL = false;\r\n\r\n /**\r\n * Should the shader discard the pixel if the depth is less than the asset depth\r\n * Will lead to better performance. the other variant is to change the color based on a tolerance factor\r\n */\r\n DEPTH_SENSING_DISCARD = true;\r\n}\r\n\r\nlet IsPluginEnabled = false;\r\nlet DepthTexture: Nullable<RawTexture> = null;\r\nlet AlphaLuminanceTexture = false;\r\nconst ScreenSize = { width: 512, height: 512 };\r\nconst ShaderViewport = { x: 0, y: 0, width: 1, height: 1 };\r\nlet GlobalRawValueToMeters = 1;\r\nlet ViewIndex = 0;\r\nlet EnableDiscard = true;\r\nconst UvTransform = Matrix.Identity();\r\nconst ManagedMaterialPlugins: WebXRDepthSensingMaterialPlugin[] = [];\r\n\r\n/**\r\n * @internal\r\n */\r\nclass WebXRDepthSensingMaterialPlugin extends MaterialPluginBase {\r\n private _varColorName: string;\r\n private _isEnabled = false;\r\n\r\n /** @internal */\r\n protected _markAllDefinesAsDirty(): void {\r\n this._enable(this._isEnabled);\r\n this.markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets whether the mesh debug plugin is enabled in the material.\r\n */\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n /**\r\n * Sets whether the mesh debug plugin is enabled in the material.\r\n * @param value enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n if (this._isEnabled === value) {\r\n return;\r\n }\r\n this._isEnabled = value;\r\n this._markAllDefinesAsDirty();\r\n }\r\n\r\n /**\r\n * Gets a boolean indicating that the plugin is compatible with a given shader language.\r\n * @param shaderLanguage The shader language to use.\r\n * @returns true if the plugin is compatible with the shader language\r\n */\r\n public override isCompatible(shaderLanguage: ShaderLanguage): boolean {\r\n switch (shaderLanguage) {\r\n case ShaderLanguage.GLSL:\r\n return true;\r\n default:\r\n // no webgpu for webxr yet, however - if this is not true the plugin fails to load.\r\n // webxr is currently only supported on webgl, and the plugin is disabled per default.\r\n return true;\r\n }\r\n }\r\n\r\n constructor(material: Material) {\r\n super(material, \"DepthSensing\", 222, new DepthSensingMaterialDefines());\r\n this._varColorName = material instanceof PBRBaseMaterial ? \"finalColor\" : \"color\";\r\n this.doNotSerialize = true;\r\n ManagedMaterialPlugins.push(this);\r\n }\r\n\r\n /**\r\n * Prepare the defines\r\n * @param defines the defines\r\n */\r\n public override prepareDefines(defines: DepthSensingMaterialDefines) {\r\n defines.DEPTH_SENSING = !!DepthTexture && IsPluginEnabled;\r\n defines.DEPTH_SENSING_TEXTURE_ARRAY = DepthTexture?.is2DArray ?? false;\r\n defines.DEPTH_SENSING_TEXTURE_AL = AlphaLuminanceTexture;\r\n defines.DEPTH_SENSING_DISCARD = EnableDiscard;\r\n }\r\n\r\n public override getUniforms() {\r\n return {\r\n // first, define the UBO with the correct type and size.\r\n ubo: [\r\n { name: \"ds_invScreenSize\", size: 2, type: \"vec2\" },\r\n { name: \"ds_rawValueToMeters\", size: 1, type: \"float\" },\r\n { name: \"ds_viewIndex\", size: 1, type: \"float\" },\r\n { name: \"ds_shaderViewport\", size: 4, type: \"vec4\" },\r\n { name: \"ds_uvTransform\", size: 16, type: \"mat4\" },\r\n ],\r\n // now, on the fragment shader, add the uniform itself in case uniform buffers are not supported by the engine\r\n fragment: `#ifdef DEPTH_SENSING\r\n uniform vec2 ds_invScreenSize;\r\n uniform float ds_rawValueToMeters;\r\n uniform float ds_viewIndex;\r\n uniform vec4 ds_shaderViewport;\r\n uniform mat4 ds_uvTransform;\r\n #endif\r\n `,\r\n };\r\n }\r\n\r\n public override getSamplers(samplers: string[]): void {\r\n samplers.push(\"ds_depthSampler\");\r\n }\r\n\r\n public override bindForSubMesh(uniformBuffer: UniformBuffer) {\r\n if (IsPluginEnabled && DepthTexture) {\r\n uniformBuffer.updateFloat2(\"ds_invScreenSize\", 1 / ScreenSize.width, 1 / ScreenSize.height);\r\n uniformBuffer.updateFloat(\"ds_rawValueToMeters\", GlobalRawValueToMeters);\r\n uniformBuffer.updateFloat(\"ds_viewIndex\", ViewIndex);\r\n uniformBuffer.updateFloat4(\"ds_shaderViewport\", ShaderViewport.x, ShaderViewport.y, ShaderViewport.width, ShaderViewport.height);\r\n uniformBuffer.setTexture(\"ds_depthSampler\", DepthTexture);\r\n uniformBuffer.updateMatrix(\"ds_uvTransform\", UvTransform);\r\n }\r\n }\r\n\r\n public override getClassName() {\r\n return \"DepthSensingMaterialPlugin\";\r\n }\r\n\r\n public override getCustomCode(shaderType: string): Nullable<{ [pointName: string]: string }> {\r\n return shaderType === \"vertex\"\r\n ? {\r\n CUSTOM_VERTEX_MAIN_BEGIN: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n ds_viewIndexMultiview = float(gl_ViewID_OVR);\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_VERTEX_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n varying float ds_viewIndexMultiview;\r\n #endif\r\n #endif\r\n `,\r\n }\r\n : {\r\n CUSTOM_FRAGMENT_DEFINITIONS: `\r\n #ifdef DEPTH_SENSING\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n uniform highp sampler2DArray ds_depthSampler;\r\n #else\r\n uniform sampler2D ds_depthSampler;\r\n #endif\r\n #ifdef MULTIVIEW\r\n varying float ds_viewIndexMultiview;\r\n #endif\r\n #endif\r\n `,\r\n CUSTOM_FRAGMENT_MAIN_BEGIN: `\r\n#ifdef DEPTH_SENSING\r\n #ifdef MULTIVIEW\r\n float ds_viewIndexSet = ds_viewIndexMultiview;\r\n vec2 ds_compensation = vec2(0.0, 0.0);\r\n #else\r\n float ds_viewIndexSet = ds_viewIndex;\r\n vec2 ds_compensation = vec2(ds_viewIndexSet, 0.0);\r\n #endif\r\n vec2 ds_baseUv = gl_FragCoord.xy * ds_invScreenSize;\r\n #ifdef DEPTH_SENSING_TEXTURE_ARRAY\r\n vec2 ds_uv = ds_baseUv - ds_compensation;\r\n vec3 ds_depthUv = vec3((ds_uvTransform * vec4(ds_uv, 0.0, 1.0)).xy, ds_viewIndexSet);\r\n #else\r\n vec2 ds_depthUv = (ds_uvTransform * vec4(ds_baseUv.x, 1.0 - ds_baseUv.y, 0.0, 1.0)).xy;\r\n #endif\r\n #ifdef DEPTH_SENSING_TEXTURE_AL\r\n // from alpha-luminance - taken from the explainer\r\n vec2 ds_alphaLuminance = texture(ds_depthSampler, ds_depthUv).ra;\r\n float ds_cameraDepth = dot(ds_alphaLuminance, vec2(255.0, 256.0 * 255.0));\r\n #else\r\n float ds_cameraDepth = texture(ds_depthSampler, ds_depthUv).r;\r\n #endif\r\n\r\n ds_cameraDepth = ds_cameraDepth * ds_rawValueToMeters;\r\n\r\n float ds_assetDepth = gl_FragCoord.z;\r\n #ifdef DEPTH_SENSING_DISCARD\r\n if(ds_cameraDepth < ds_assetDepth) {\r\n discard;\r\n }\r\n #endif\r\n#endif \r\n `,\r\n CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR: `\r\n#ifdef DEPTH_SENSING\r\n #ifndef DEPTH_SENSING_DISCARD\r\n const float ds_depthTolerancePerM = 0.005;\r\n float ds_occlusion = clamp(1.0 - 0.5 * (ds_cameraDepth - ds_assetDepth) / (ds_depthTolerancePerM * ds_assetDepth) +\r\n 0.5, 0.0, 1.0);\r\n ${this._varColorName} *= (1.0 - ds_occlusion);\r\n #endif\r\n#endif \r\n `,\r\n };\r\n }\r\n\r\n public override dispose(_forceDisposeTextures?: boolean): void {\r\n const index = ManagedMaterialPlugins.indexOf(this);\r\n if (index !== -1) {\r\n ManagedMaterialPlugins.splice(index, 1);\r\n }\r\n super.dispose(_forceDisposeTextures);\r\n }\r\n}\r\n\r\nRegisterClass(`BABYLON.DepthSensingMaterialPlugin`, WebXRDepthSensingMaterialPlugin);\r\n\r\n/**\r\n * WebXR Feature for WebXR Depth Sensing Module\r\n * @since 5.49.1\r\n */\r\nexport class WebXRDepthSensing extends WebXRAbstractFeature {\r\n private _width: Nullable<number> = null;\r\n private _height: Nullable<number> = null;\r\n private _rawValueToMeters: Nullable<number> = null;\r\n private _textureType: Nullable<string> = null;\r\n private _normDepthBufferFromNormView: Nullable<XRRigidTransform> = null;\r\n private _cachedDepthBuffer: Nullable<ArrayBuffer> = null;\r\n private _cachedWebGLTexture: Nullable<WebGLTexture> = null;\r\n private _cachedDepthImageTexture: Nullable<RawTexture> = null;\r\n private _onCameraObserver: Nullable<Observer<Camera>> = null;\r\n\r\n /**\r\n * Width of depth data. If depth data is not exist, returns null.\r\n */\r\n public get width(): Nullable<number> {\r\n return this._width;\r\n }\r\n\r\n /**\r\n * Height of depth data. If depth data is not exist, returns null.\r\n */\r\n public get height(): Nullable<number> {\r\n return this._height;\r\n }\r\n\r\n /**\r\n * Scale factor by which the raw depth values must be multiplied in order to get the depths in meters.\r\n */\r\n public get rawValueToMeters(): Nullable<number> {\r\n return this._rawValueToMeters;\r\n }\r\n\r\n /**\r\n * An XRRigidTransform that needs to be applied when indexing into the depth buffer.\r\n */\r\n public get normDepthBufferFromNormView(): Nullable<XRRigidTransform> {\r\n return this._normDepthBufferFromNormView;\r\n }\r\n\r\n /**\r\n * Describes which depth-sensing usage (\"cpu\" or \"gpu\") is used.\r\n */\r\n public get depthUsage(): WebXRDepthUsage {\r\n switch (this._xrSessionManager.session.depthUsage) {\r\n case \"cpu-optimized\":\r\n return \"cpu\";\r\n case \"gpu-optimized\":\r\n return \"gpu\";\r\n }\r\n }\r\n\r\n /**\r\n * Describes which depth sensing data format (\"ushort\" or \"float\") is used.\r\n */\r\n public get depthDataFormat(): WebXRDepthDataFormat {\r\n switch (this._xrSessionManager.session.depthDataFormat) {\r\n case \"luminance-alpha\":\r\n return \"ushort\";\r\n case \"float32\":\r\n return \"float\";\r\n case \"unsigned-short\":\r\n return \"ushort\";\r\n }\r\n }\r\n\r\n /**\r\n * Latest cached InternalTexture which containing depth buffer information.\r\n * This can be used when the depth usage is \"gpu\".\r\n * @deprecated This will be removed in the future. Use latestDepthImageTexture\r\n */\r\n public get latestInternalTexture(): Nullable<InternalTexture> {\r\n if (!this._cachedWebGLTexture) {\r\n return null;\r\n }\r\n\r\n return this._getInternalTextureFromDepthInfo();\r\n }\r\n\r\n /**\r\n * cached depth buffer\r\n */\r\n public get latestDepthBuffer(): Nullable<ArrayBufferView> {\r\n if (!this._cachedDepthBuffer) {\r\n return null;\r\n }\r\n\r\n return this.depthDataFormat === \"float\" ? new Float32Array(this._cachedDepthBuffer) : new Uint16Array(this._cachedDepthBuffer);\r\n }\r\n\r\n /**\r\n * Event that notify when `DepthInformation.getDepthInMeters` is available.\r\n * `getDepthInMeters` method needs active XRFrame (not available for cached XRFrame)\r\n */\r\n public onGetDepthInMetersAvailable: Observable<GetDepthInMetersType> = new Observable<GetDepthInMetersType>();\r\n\r\n /**\r\n * Latest cached Texture of depth image which is made from the depth buffer data.\r\n */\r\n public get latestDepthImageTexture(): Nullable<RawTexture> {\r\n return this._cachedDepthImageTexture;\r\n }\r\n\r\n /**\r\n * XRWebGLBinding which is used for acquiring WebGLDepthInformation\r\n */\r\n private _glBinding?: XRWebGLBinding;\r\n\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.DEPTH_SENSING;\r\n\r\n /**\r\n * The (Babylon) version of this module.\r\n * This is an integer representing the implementation version.\r\n * This number does not correspond to the WebXR specs version\r\n */\r\n public static readonly Version = 1;\r\n\r\n /**\r\n * Creates a new instance of the depth sensing feature\r\n * @param _xrSessionManager the WebXRSessionManager\r\n * @param options options for WebXR Depth Sensing Feature\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n public readonly options: IWebXRDepthSensingOptions\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"depth-sensing\";\r\n\r\n // https://immersive-web.github.io/depth-sensing/\r\n Tools.Warn(\"depth-sensing is an experimental and unstable feature.\");\r\n EnableDiscard = !options.useToleranceFactorForDepthSensing;\r\n\r\n RegisterMaterialPlugin(\"WebXRDepthSensingMaterialPlugin\", (material) => new WebXRDepthSensingMaterialPlugin(material));\r\n }\r\n\r\n /**\r\n * attach this feature\r\n * Will usually be called by the features manager\r\n * @param force should attachment be forced (even when already attached)\r\n * @returns true if successful.\r\n */\r\n public override attach(force?: boolean): boolean {\r\n if (!super.attach(force)) {\r\n return false;\r\n }\r\n\r\n const isBothDepthUsageAndFormatNull = this._xrSessionManager.session.depthDataFormat == null || this._xrSessionManager.session.depthUsage == null;\r\n if (isBothDepthUsageAndFormatNull) {\r\n return false;\r\n }\r\n\r\n this._glBinding = new XRWebGLBinding(this._xrSessionManager.session, (this._xrSessionManager.scene.getEngine() as ThinEngine)._gl);\r\n\r\n IsPluginEnabled = !this.options.disableDepthSensingOnMaterials;\r\n if (IsPluginEnabled) {\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.isEnabled = true;\r\n }\r\n this._onCameraObserver = this._xrSessionManager.scene.onBeforeCameraRenderObservable.add((camera) => {\r\n if (!IsPluginEnabled) {\r\n return;\r\n }\r\n // make sure this is a webxr camera\r\n if (camera.outputRenderTarget) {\r\n const viewport = camera.rigCameras.length > 0 ? camera.rigCameras[0].viewport : camera.viewport;\r\n ScreenSize.width = camera.outputRenderTarget.getRenderWidth() / (camera.rigParent ? camera.rigParent.rigCameras.length || 1 : 1);\r\n ScreenSize.height = camera.outputRenderTarget.getRenderHeight();\r\n ShaderViewport.x = viewport.x;\r\n ShaderViewport.y = viewport.y;\r\n ShaderViewport.width = viewport.width;\r\n ShaderViewport.height = viewport.height;\r\n\r\n // find the viewIndex\r\n if (camera.rigParent) {\r\n // should use the viewIndexes array!\r\n ViewIndex = camera.isLeftCamera ? 0 : 1;\r\n }\r\n }\r\n });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n public override detach() {\r\n IsPluginEnabled = false;\r\n DepthTexture = null;\r\n this._cachedWebGLTexture = null;\r\n this._cachedDepthBuffer = null;\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.isEnabled = false;\r\n }\r\n if (this._onCameraObserver) {\r\n this._xrSessionManager.scene.onBeforeCameraRenderObservable.remove(this._onCameraObserver);\r\n }\r\n return super.detach();\r\n }\r\n\r\n /**\r\n * Dispose this feature and all of the resources attached\r\n */\r\n public override dispose(): void {\r\n UnregisterMaterialPlugin(\"WebXRDepthSensingMaterialPlugin\");\r\n this._cachedDepthImageTexture?.dispose();\r\n this.onGetDepthInMetersAvailable.clear();\r\n // cleanup\r\n if (this._onCameraObserver) {\r\n this._xrSessionManager.scene.onBeforeCameraRenderObservable.remove(this._onCameraObserver);\r\n }\r\n for (const plugin of ManagedMaterialPlugins) {\r\n plugin.dispose();\r\n }\r\n ManagedMaterialPlugins.length = 0;\r\n }\r\n\r\n protected _onXRFrame(_xrFrame: XRFrame): void {\r\n const referenceSPace = this._xrSessionManager.referenceSpace;\r\n const pose = _xrFrame.getViewerPose(referenceSPace);\r\n if (pose == null) {\r\n return;\r\n }\r\n for (const view of pose.views) {\r\n switch (this.depthUsage) {\r\n case \"cpu\":\r\n this._updateDepthInformationAndTextureCPUDepthUsage(_xrFrame, view, this.depthDataFormat);\r\n break;\r\n case \"gpu\":\r\n if (!this._glBinding) {\r\n break;\r\n }\r\n this._updateDepthInformationAndTextureWebGLDepthUsage(this._glBinding, view, this.depthDataFormat);\r\n break;\r\n default:\r\n Tools.Error(\"Unknown depth usage\");\r\n this.detach();\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private _updateDepthInformationAndTextureCPUDepthUsage(frame: XRFrame, view: XRView, dataFormat: WebXRDepthDataFormat): void {\r\n const depthInfo = frame.getDepthInformation(view);\r\n if (depthInfo === null) {\r\n return;\r\n }\r\n\r\n const { data, width, height, rawValueToMeters, getDepthInMeters, normDepthBufferFromNormView } = depthInfo as XRCPUDepthInformation;\r\n\r\n this._width = width;\r\n this._height = height;\r\n this._rawValueToMeters = rawValueToMeters;\r\n this._cachedDepthBuffer = data;\r\n GlobalRawValueToMeters = rawValueToMeters;\r\n AlphaLuminanceTexture = dataFormat === \"luminance-alpha\";\r\n UvTransform.fromArray(normDepthBufferFromNormView.matrix);\r\n\r\n // to avoid Illegal Invocation error, bind `this`\r\n this.onGetDepthInMetersAvailable.notifyObservers(getDepthInMeters.bind(depthInfo));\r\n\r\n if (!this._cachedDepthImageTexture) {\r\n this._cachedDepthImageTexture = RawTexture.CreateRTexture(\r\n null,\r\n width,\r\n height,\r\n this._xrSessionManager.scene,\r\n false,\r\n false,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n Constants.TEXTURETYPE_FLOAT\r\n );\r\n DepthTexture = this._cachedDepthImageTexture;\r\n }\r\n\r\n let float32Array: Float32Array | null = null;\r\n switch (dataFormat) {\r\n case \"ushort\":\r\n case \"luminance-alpha\":\r\n float32Array = Float32Array.from(new Uint16Array(data));\r\n\r\n break;\r\n case \"float\":\r\n float32Array = new Float32Array(data);\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n if (float32Array) {\r\n if (this.options.prepareTextureForVisualization) {\r\n float32Array = float32Array.map((val) => val * rawValueToMeters);\r\n }\r\n this._cachedDepthImageTexture.update(float32Array);\r\n }\r\n }\r\n\r\n private _updateDepthInformationAndTextureWebGLDepthUsage(webglBinding: XRWebGLBinding, view: XRView, dataFormat: WebXRDepthDataFormat): void {\r\n const depthInfo = webglBinding.getDepthInformation(view);\r\n if (depthInfo === null) {\r\n return;\r\n }\r\n const { texture, width, height, textureType, rawValueToMeters, normDepthBufferFromNormView } = depthInfo as XRWebGLDepthInformation;\r\n\r\n GlobalRawValueToMeters = rawValueToMeters;\r\n AlphaLuminanceTexture = dataFormat === \"luminance-alpha\";\r\n UvTransform.fromArray(normDepthBufferFromNormView.matrix);\r\n\r\n if (this._cachedWebGLTexture) {\r\n return;\r\n }\r\n\r\n this._width = width;\r\n this._height = height;\r\n this._cachedWebGLTexture = texture;\r\n this._textureType = textureType;\r\n\r\n const scene = this._xrSessionManager.scene;\r\n const internalTexture = this._getInternalTextureFromDepthInfo();\r\n\r\n if (!this._cachedDepthImageTexture) {\r\n this._cachedDepthImageTexture = RawTexture.CreateRTexture(\r\n null,\r\n width,\r\n height,\r\n scene,\r\n false,\r\n true,\r\n Texture.NEAREST_SAMPLINGMODE,\r\n dataFormat === \"float\" ? Constants.TEXTURETYPE_FLOAT : Constants.TEXTURETYPE_UNSIGNED_BYTE\r\n );\r\n }\r\n\r\n this._cachedDepthImageTexture._texture = internalTexture;\r\n DepthTexture = this._cachedDepthImageTexture;\r\n this._xrSessionManager.scene.markAllMaterialsAsDirty(Constants.MATERIAL_TextureDirtyFlag);\r\n }\r\n\r\n /**\r\n * Extends the session init object if needed\r\n * @returns augmentation object for the xr session init object.\r\n */\r\n public async getXRSessionInitExtension(): Promise<Partial<XRSessionInit>> {\r\n const isDepthUsageDeclared = this.options.usagePreference != null && this.options.usagePreference.length !== 0;\r\n const isDataFormatDeclared = this.options.dataFormatPreference != null && this.options.dataFormatPreference.length !== 0;\r\n\r\n return await new Promise((resolve) => {\r\n if (isDepthUsageDeclared && isDataFormatDeclared) {\r\n const usages: XRDepthUsage[] = this.options.usagePreference.map((usage) => {\r\n switch (usage) {\r\n case \"cpu\":\r\n return \"cpu-optimized\";\r\n case \"gpu\":\r\n return \"gpu-optimized\";\r\n }\r\n });\r\n const dataFormats: XRDepthDataFormat[] = this.options.dataFormatPreference.map((format) => {\r\n switch (format) {\r\n case \"luminance-alpha\":\r\n return \"luminance-alpha\";\r\n case \"float\":\r\n return \"float32\";\r\n case \"ushort\":\r\n return \"unsigned-short\";\r\n }\r\n });\r\n\r\n resolve({\r\n depthSensing: {\r\n usagePreference: usages,\r\n dataFormatPreference: dataFormats,\r\n },\r\n });\r\n } else {\r\n resolve({});\r\n }\r\n });\r\n }\r\n\r\n private _getInternalTextureFromDepthInfo(): InternalTexture {\r\n const engine = this._xrSessionManager.scene.getEngine();\r\n const dataFormat = this.depthDataFormat;\r\n const textureType = this._textureType;\r\n if (!this._width || !this._height || !this._cachedWebGLTexture) {\r\n throw new Error(\"Depth information is not available\");\r\n }\r\n const internalTexture = (engine as Engine).wrapWebGLTexture(\r\n this._cachedWebGLTexture,\r\n false,\r\n Constants.TEXTURE_NEAREST_SAMPLINGMODE,\r\n this._width || 256,\r\n this._height || 256\r\n );\r\n internalTexture.isCube = false;\r\n internalTexture.invertY = false;\r\n internalTexture._useSRGBBuffer = false;\r\n internalTexture.format = dataFormat === \"luminance-alpha\" ? Constants.TEXTUREFORMAT_LUMINANCE_ALPHA : Constants.TEXTUREFORMAT_RGBA;\r\n internalTexture.generateMipMaps = false;\r\n internalTexture.type =\r\n dataFormat === \"float\" ? Constants.TEXTURETYPE_FLOAT : dataFormat === \"ushort\" ? Constants.TEXTURETYPE_UNSIGNED_SHORT : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n internalTexture._cachedWrapU = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n internalTexture._cachedWrapV = Constants.TEXTURE_WRAP_ADDRESSMODE;\r\n internalTexture._hardwareTexture = new WebGLHardwareTexture(this._cachedWebGLTexture, (engine as ThinEngine)._gl);\r\n internalTexture.is2DArray = textureType === \"texture-array\";\r\n\r\n return internalTexture;\r\n }\r\n}\r\n\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRDepthSensing.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRDepthSensing(xrSessionManager, options);\r\n },\r\n WebXRDepthSensing.Version,\r\n false\r\n);\r\n"]}
|
package/package.json
CHANGED
package/scene.js
CHANGED
|
@@ -4554,6 +4554,8 @@ export class Scene {
|
|
|
4554
4554
|
this._disposeList(this.textures);
|
|
4555
4555
|
// Release morph targets
|
|
4556
4556
|
this._disposeList(this.morphTargetManagers);
|
|
4557
|
+
// Release frame graphs
|
|
4558
|
+
this._disposeList(this.frameGraphs);
|
|
4557
4559
|
// Release UBO
|
|
4558
4560
|
this._sceneUbo.dispose();
|
|
4559
4561
|
if (this._multiviewSceneUbo) {
|