@babylonjs/core 9.10.1 → 9.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Actions/actionManager.d.ts +1 -1
- package/Actions/actionManager.js +8 -5
- package/Actions/actionManager.js.map +1 -1
- package/Animations/animatable.core.d.ts +1 -1
- package/Animations/animatable.core.js +2 -2
- package/Animations/animatable.core.js.map +1 -1
- package/Animations/animationPropertiesOverride.js +1 -1
- package/Animations/animationPropertiesOverride.js.map +1 -1
- package/Animations/animatorAvatar.d.ts +2 -2
- package/Animations/animatorAvatar.js +3 -3
- package/Animations/animatorAvatar.js.map +1 -1
- package/Animations/pathCursor.d.ts +1 -1
- package/Animations/pathCursor.js +1 -1
- package/Animations/pathCursor.js.map +1 -1
- package/Animations/runtimeAnimation.d.ts +1 -1
- package/Animations/runtimeAnimation.js +2 -2
- package/Animations/runtimeAnimation.js.map +1 -1
- package/Audio/analyser.js +1 -1
- package/Audio/analyser.js.map +1 -1
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js +1 -1
- package/AudioV2/abstractAudio/components/spatialAudioAttacherComponent.js.map +1 -1
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.d.ts +2 -0
- package/AudioV2/abstractAudio/subNodes/audioAnalyzerSubNode.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.d.ts +13 -3
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js +16 -0
- package/AudioV2/abstractAudio/subProperties/abstractAudioAnalyzer.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.d.ts +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudio.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.d.ts +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js +1 -1
- package/AudioV2/abstractAudio/subProperties/abstractSpatialAudioListener.js.map +1 -1
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.d.ts +4 -0
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js +22 -0
- package/AudioV2/abstractAudio/subProperties/audioAnalyzer.js.map +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.d.ts +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js +1 -1
- package/AudioV2/webAudio/subNodes/spatialWebAudioSubNode.js.map +1 -1
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.d.ts +6 -0
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js +22 -5
- package/AudioV2/webAudio/subNodes/webAudioAnalyzerSubNode.js.map +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js +1 -1
- package/AudioV2/webAudio/subProperties/spatialWebAudioListener.js.map +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js +1 -1
- package/AudioV2/webAudio/webAudioStreamingSound.js.map +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.d.ts +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js +1 -1
- package/BakedVertexAnimation/bakedVertexAnimationManager.js.map +1 -1
- package/BakedVertexAnimation/vertexAnimationBaker.js +1 -1
- package/BakedVertexAnimation/vertexAnimationBaker.js.map +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js +1 -1
- package/Behaviors/Cameras/bouncingBehavior.js.map +1 -1
- package/Behaviors/Cameras/framingBehavior.d.ts +1 -1
- package/Behaviors/Cameras/framingBehavior.js +2 -2
- package/Behaviors/Cameras/framingBehavior.js.map +1 -1
- package/Behaviors/Cameras/interpolatingBehavior.d.ts +13 -1
- package/Behaviors/Cameras/interpolatingBehavior.js +13 -1
- package/Behaviors/Cameras/interpolatingBehavior.js.map +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js +1 -1
- package/Behaviors/Meshes/attachToBoxBehavior.js.map +1 -1
- package/Behaviors/Meshes/baseSixDofDragBehavior.d.ts +3 -3
- package/Behaviors/Meshes/baseSixDofDragBehavior.js +4 -4
- package/Behaviors/Meshes/baseSixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/followBehavior.js +1 -1
- package/Behaviors/Meshes/followBehavior.js.map +1 -1
- package/Behaviors/Meshes/handConstraintBehavior.js +2 -2
- package/Behaviors/Meshes/handConstraintBehavior.js.map +1 -1
- package/Behaviors/Meshes/multiPointerScaleBehavior.js +1 -1
- package/Behaviors/Meshes/multiPointerScaleBehavior.js.map +1 -1
- package/Behaviors/Meshes/pointerDragBehavior.d.ts +3 -3
- package/Behaviors/Meshes/pointerDragBehavior.js +5 -5
- package/Behaviors/Meshes/pointerDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.d.ts +1 -1
- package/Behaviors/Meshes/sixDofDragBehavior.js +2 -2
- package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js +1 -1
- package/Behaviors/Meshes/surfaceMagnetismBehavior.js.map +1 -1
- package/Bones/boneIKController.d.ts +1 -1
- package/Bones/boneIKController.js +1 -1
- package/Bones/boneIKController.js.map +1 -1
- package/Bones/boneLookController.d.ts +1 -1
- package/Bones/boneLookController.js +1 -1
- package/Bones/boneLookController.js.map +1 -1
- package/Bones/skeleton.d.ts +2 -2
- package/Bones/skeleton.functions.d.ts +1 -1
- package/Bones/skeleton.functions.js +3 -3
- package/Bones/skeleton.functions.js.map +1 -1
- package/Bones/skeleton.js +3 -4
- package/Bones/skeleton.js.map +1 -1
- package/Buffers/buffer.align.pure.js +6 -0
- package/Buffers/buffer.align.pure.js.map +1 -1
- package/Buffers/buffer.nonFloatVertexBuffers.js +2 -1
- package/Buffers/buffer.nonFloatVertexBuffers.js.map +1 -1
- package/Buffers/buffer.pure.d.ts +8 -0
- package/Buffers/buffer.pure.js +31 -2
- package/Buffers/buffer.pure.js.map +1 -1
- package/Buffers/bufferUtils.js +17 -5
- package/Buffers/bufferUtils.js.map +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/BaseCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js +1 -1
- package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/arcRotateCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js +2 -2
- package/Cameras/Inputs/arcRotateCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraKeyboardInput.js +2 -2
- package/Cameras/Inputs/flyCameraKeyboardInput.js.map +1 -1
- package/Cameras/Inputs/flyCameraMouseInput.js +2 -2
- package/Cameras/Inputs/flyCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js +1 -1
- package/Cameras/Inputs/followCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/followCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js +1 -1
- package/Cameras/Inputs/freeCameraGamepadInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js +2 -2
- package/Cameras/Inputs/freeCameraKeyboardMoveInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js +1 -1
- package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
- package/Cameras/Inputs/freeCameraTouchInput.js +2 -2
- package/Cameras/Inputs/freeCameraTouchInput.js.map +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js +1 -1
- package/Cameras/Inputs/geospatialCameraKeyboardInput.js.map +1 -1
- package/Cameras/Limits/geospatialLimits.d.ts +1 -1
- package/Cameras/Limits/geospatialLimits.js +1 -1
- package/Cameras/Limits/geospatialLimits.js.map +1 -1
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js +2 -2
- package/Cameras/RigModes/stereoscopicAnaglyphRigMode.js.map +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.d.ts +1 -1
- package/Cameras/RigModes/stereoscopicRigMode.js +3 -3
- package/Cameras/RigModes/stereoscopicRigMode.js.map +1 -1
- package/Cameras/RigModes/vrRigMode.js +2 -2
- package/Cameras/RigModes/vrRigMode.js.map +1 -1
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.d.ts +3 -3
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js +5 -5
- package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
- package/Cameras/VR/vrCameraMetrics.d.ts +1 -1
- package/Cameras/VR/vrCameraMetrics.js +1 -1
- package/Cameras/VR/vrCameraMetrics.js.map +1 -1
- package/Cameras/cameraInputsManager.d.ts +1 -1
- package/Cameras/cameraInputsManager.js +1 -1
- package/Cameras/cameraInputsManager.js.map +1 -1
- package/Collisions/collider.d.ts +1 -1
- package/Collisions/collider.js +1 -1
- package/Collisions/collider.js.map +1 -1
- package/Collisions/gpuPicker.d.ts +1 -1
- package/Collisions/gpuPicker.js +5 -5
- package/Collisions/gpuPicker.js.map +1 -1
- package/Collisions/meshCollisionData.d.ts +1 -1
- package/Collisions/meshCollisionData.js +1 -1
- package/Collisions/meshCollisionData.js.map +1 -1
- package/Collisions/pickingInfo.d.ts +1 -1
- package/Collisions/pickingInfo.js +2 -2
- package/Collisions/pickingInfo.js.map +1 -1
- package/Compute/computeEffect.d.ts +6 -0
- package/Compute/computeEffect.js +3 -0
- package/Compute/computeEffect.js.map +1 -1
- package/Compute/computeShader.pure.d.ts +4 -0
- package/Compute/computeShader.pure.js +1 -0
- package/Compute/computeShader.pure.js.map +1 -1
- package/Culling/Octrees/octreeBlock.d.ts +1 -1
- package/Culling/Octrees/octreeBlock.js +1 -1
- package/Culling/Octrees/octreeBlock.js.map +1 -1
- package/Culling/boundingBox.d.ts +1 -1
- package/Culling/boundingBox.js +1 -1
- package/Culling/boundingBox.js.map +1 -1
- package/Culling/boundingInfo.d.ts +1 -1
- package/Culling/boundingInfo.js +1 -1
- package/Culling/boundingInfo.js.map +1 -1
- package/Culling/boundingSphere.d.ts +1 -1
- package/Culling/boundingSphere.js +1 -1
- package/Culling/boundingSphere.js.map +1 -1
- package/Culling/ray.core.d.ts +1 -1
- package/Culling/ray.core.js +1 -1
- package/Culling/ray.core.js.map +1 -1
- package/Debug/axesViewer.d.ts +1 -1
- package/Debug/axesViewer.js +3 -3
- package/Debug/axesViewer.js.map +1 -1
- package/Debug/boneAxesViewer.d.ts +1 -1
- package/Debug/boneAxesViewer.js +1 -1
- package/Debug/boneAxesViewer.js.map +1 -1
- package/Debug/directionalLightFrustumViewer.d.ts +1 -1
- package/Debug/directionalLightFrustumViewer.js +6 -6
- package/Debug/directionalLightFrustumViewer.js.map +1 -1
- package/Debug/rayHelper.d.ts +1 -1
- package/Debug/rayHelper.js +2 -2
- package/Debug/rayHelper.js.map +1 -1
- package/Debug/skeletonViewer.d.ts +2 -2
- package/Debug/skeletonViewer.js +10 -10
- package/Debug/skeletonViewer.js.map +1 -1
- package/DeviceInput/internalDeviceSourceManager.d.ts +1 -1
- package/DeviceInput/internalDeviceSourceManager.js +0 -1
- package/DeviceInput/internalDeviceSourceManager.js.map +1 -1
- package/DeviceInput/webDeviceInputSystem.js +1 -1
- package/DeviceInput/webDeviceInputSystem.js.map +1 -1
- package/Engines/Extensions/engine.views.d.ts +1 -1
- package/Engines/Extensions/engine.views.js +1 -1
- package/Engines/Extensions/engine.views.js.map +1 -1
- package/Engines/Native/nativeHelpers.js +4 -1
- package/Engines/Native/nativeHelpers.js.map +1 -1
- package/Engines/Native/nativeInterfaces.d.ts +10 -1
- package/Engines/Native/nativeInterfaces.js.map +1 -1
- package/Engines/WebGPU/Extensions/engine.computeShader.pure.js +154 -2
- package/Engines/WebGPU/Extensions/engine.computeShader.pure.js.map +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.d.ts +1 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js +11 -1
- package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
- package/Engines/WebGPU/webgpuComputeContext.d.ts +1 -1
- package/Engines/WebGPU/webgpuComputeContext.js.map +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js +1 -1
- package/Engines/WebGPU/webgpuTintWASM.js.map +1 -1
- package/Engines/abstractEngine.pure.d.ts +7 -1
- package/Engines/abstractEngine.pure.js +34 -4
- package/Engines/abstractEngine.pure.js.map +1 -1
- package/Engines/constants.d.ts +4 -0
- package/Engines/constants.js +4 -0
- package/Engines/constants.js.map +1 -1
- package/Engines/engine.pure.d.ts +0 -7
- package/Engines/engine.pure.js +0 -34
- package/Engines/engine.pure.js.map +1 -1
- package/Engines/engineFactory.d.ts +2 -2
- package/Engines/engineFactory.js +3 -3
- package/Engines/engineFactory.js.map +1 -1
- package/Engines/thinNativeEngine.pure.js +15 -8
- package/Engines/thinNativeEngine.pure.js.map +1 -1
- package/Events/pointerEvents.d.ts +1 -1
- package/Events/pointerEvents.js +1 -1
- package/Events/pointerEvents.js.map +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js +1 -1
- package/FlowGraph/Blocks/Data/Utils/flowGraphCodeExecutionBlock.js.map +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.d.ts +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js +1 -1
- package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js +1 -1
- package/FlowGraph/Blocks/Event/flowGraphKeyboardEventBlock.js.map +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.d.ts +1 -1
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js +3 -3
- package/FlowGraph/Blocks/Execution/Animation/flowGraphInterpolationBlock.pure.js.map +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js +1 -1
- package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCancelDelayBlock.pure.js.map +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.d.ts +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.js +1 -1
- package/FlowGraph/CustomTypes/flowGraphMatrix.js.map +1 -1
- package/FlowGraph/flowGraphBlock.d.ts +1 -1
- package/FlowGraph/flowGraphBlock.js +1 -1
- package/FlowGraph/flowGraphBlock.js.map +1 -1
- package/FlowGraph/flowGraphExecutionBlock.d.ts +1 -1
- package/FlowGraph/flowGraphExecutionBlock.js +1 -1
- package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
- package/FlowGraph/flowGraphMath.d.ts +1 -1
- package/FlowGraph/flowGraphMath.js +1 -1
- package/FlowGraph/flowGraphMath.js.map +1 -1
- package/FlowGraph/flowGraphParser.js +1 -1
- package/FlowGraph/flowGraphParser.js.map +1 -1
- package/FlowGraph/flowGraphPathConverterComponent.d.ts +1 -1
- package/FlowGraph/flowGraphPathConverterComponent.js +2 -2
- package/FlowGraph/flowGraphPathConverterComponent.js.map +1 -1
- package/FlowGraph/flowGraphValidator.js.map +1 -1
- package/FlowGraph/serialization.js +4 -4
- package/FlowGraph/serialization.js.map +1 -1
- package/FlowGraph/utils.js.map +1 -1
- package/FrameGraph/Node/nodeRenderGraph.d.ts +2 -2
- package/FrameGraph/Node/nodeRenderGraph.js +7 -7
- package/FrameGraph/Node/nodeRenderGraph.js.map +1 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.d.ts +30 -0
- package/FrameGraph/Tasks/Layers/baseLayerTask.js +28 -1
- package/FrameGraph/Tasks/Layers/baseLayerTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/computeShaderTask.d.ts +2 -2
- package/FrameGraph/Tasks/Misc/computeShaderTask.js +2 -2
- package/FrameGraph/Tasks/Misc/computeShaderTask.js.map +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.d.ts +1 -1
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js +2 -2
- package/FrameGraph/Tasks/Misc/lightingVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.d.ts +7 -0
- package/FrameGraph/Tasks/PostProcesses/blurTask.js +8 -1
- package/FrameGraph/Tasks/PostProcesses/blurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/depthOfFieldBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/ssrBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.d.ts +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingBlendVolumeTask.js.map +1 -1
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.d.ts +2 -2
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js +3 -3
- package/FrameGraph/Tasks/PostProcesses/volumetricLightingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/csmShadowGeneratorTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.d.ts +6 -0
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js +14 -5
- package/FrameGraph/Tasks/Rendering/geometryRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsAccumulationTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsSpatialBlurTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsTracingTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.d.ts +1 -1
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js +2 -2
- package/FrameGraph/Tasks/Rendering/iblShadows/iblShadowsVoxelizationTask.js.map +1 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.d.ts +7 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js +7 -1
- package/FrameGraph/Tasks/Rendering/objectRendererTask.js.map +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.d.ts +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js +1 -1
- package/FrameGraph/Tasks/Texture/clearTextureTask.js.map +1 -1
- package/FrameGraph/frameGraphRenderContext.js +1 -1
- package/FrameGraph/frameGraphRenderContext.js.map +1 -1
- package/FrameGraph/frameGraphTextureManager.d.ts +1 -1
- package/FrameGraph/frameGraphTextureManager.js +1 -1
- package/FrameGraph/frameGraphTextureManager.js.map +1 -1
- package/Gamepads/gamepadManager.js +1 -1
- package/Gamepads/gamepadManager.js.map +1 -1
- package/Gizmos/axisDragGizmo.d.ts +5 -5
- package/Gizmos/axisDragGizmo.js +6 -6
- package/Gizmos/axisDragGizmo.js.map +1 -1
- package/Gizmos/axisScaleGizmo.d.ts +4 -4
- package/Gizmos/axisScaleGizmo.js +6 -6
- package/Gizmos/axisScaleGizmo.js.map +1 -1
- package/Gizmos/boundingBoxGizmo.d.ts +5 -5
- package/Gizmos/boundingBoxGizmo.js +7 -7
- package/Gizmos/boundingBoxGizmo.js.map +1 -1
- package/Gizmos/cameraGizmo.d.ts +3 -3
- package/Gizmos/cameraGizmo.js +7 -7
- package/Gizmos/cameraGizmo.js.map +1 -1
- package/Gizmos/gizmo.d.ts +2 -2
- package/Gizmos/gizmo.js +3 -3
- package/Gizmos/gizmo.js.map +1 -1
- package/Gizmos/gizmoManager.d.ts +2 -2
- package/Gizmos/gizmoManager.js +2 -2
- package/Gizmos/gizmoManager.js.map +1 -1
- package/Gizmos/lightGizmo.d.ts +4 -4
- package/Gizmos/lightGizmo.js +11 -11
- package/Gizmos/lightGizmo.js.map +1 -1
- package/Gizmos/planeDragGizmo.d.ts +4 -4
- package/Gizmos/planeDragGizmo.js +5 -5
- package/Gizmos/planeDragGizmo.js.map +1 -1
- package/Gizmos/positionGizmo.d.ts +1 -1
- package/Gizmos/positionGizmo.js +2 -2
- package/Gizmos/positionGizmo.js.map +1 -1
- package/Gizmos/rotationGizmo.d.ts +3 -3
- package/Gizmos/rotationGizmo.js +3 -3
- package/Gizmos/rotationGizmo.js.map +1 -1
- package/Gizmos/scaleGizmo.d.ts +2 -2
- package/Gizmos/scaleGizmo.js +4 -4
- package/Gizmos/scaleGizmo.js.map +1 -1
- package/Gizmos/spatialAudioGizmo.d.ts +2 -2
- package/Gizmos/spatialAudioGizmo.js +6 -6
- package/Gizmos/spatialAudioGizmo.js.map +1 -1
- package/Helpers/environmentHelper.d.ts +6 -6
- package/Helpers/environmentHelper.js +12 -12
- package/Helpers/environmentHelper.js.map +1 -1
- package/Helpers/materialConversionHelper.d.ts +1 -1
- package/Helpers/materialConversionHelper.js +1 -1
- package/Helpers/materialConversionHelper.js.map +1 -1
- package/Helpers/photoDome.d.ts +1 -1
- package/Helpers/photoDome.js +1 -1
- package/Helpers/photoDome.js.map +1 -1
- package/Helpers/textureDome.d.ts +4 -4
- package/Helpers/textureDome.js +6 -6
- package/Helpers/textureDome.js.map +1 -1
- package/Helpers/videoDome.d.ts +1 -1
- package/Helpers/videoDome.js +2 -2
- package/Helpers/videoDome.js.map +1 -1
- package/Inputs/scene.inputManager.d.ts +1 -1
- package/Inputs/scene.inputManager.js +1 -1
- package/Inputs/scene.inputManager.js.map +1 -1
- package/Instrumentation/sceneInstrumentation.js +1 -1
- package/Instrumentation/sceneInstrumentation.js.map +1 -1
- package/Layers/effectLayer.d.ts +1 -1
- package/Layers/effectLayer.js +3 -3
- package/Layers/effectLayer.js.map +1 -1
- package/Layers/layer.d.ts +2 -2
- package/Layers/layer.js +4 -4
- package/Layers/layer.js.map +1 -1
- package/Layers/thinEffectLayer.d.ts +2 -2
- package/Layers/thinEffectLayer.js +3 -3
- package/Layers/thinEffectLayer.js.map +1 -1
- package/Layers/thinGlowLayer.d.ts +1 -1
- package/Layers/thinGlowLayer.js +3 -3
- package/Layers/thinGlowLayer.js.map +1 -1
- package/Layers/thinHighlightLayer.d.ts +1 -1
- package/Layers/thinHighlightLayer.js +3 -3
- package/Layers/thinHighlightLayer.js.map +1 -1
- package/Layers/thinSelectionOutlineLayer.d.ts +1 -1
- package/Layers/thinSelectionOutlineLayer.js +3 -3
- package/Layers/thinSelectionOutlineLayer.js.map +1 -1
- package/Legacy/legacy.js +12 -1
- package/Legacy/legacy.js.map +1 -1
- package/LensFlares/lensFlare.d.ts +2 -2
- package/LensFlares/lensFlare.js +3 -3
- package/LensFlares/lensFlare.js.map +1 -1
- package/LensFlares/lensFlareSystem.d.ts +1 -1
- package/LensFlares/lensFlareSystem.js +6 -6
- package/LensFlares/lensFlareSystem.js.map +1 -1
- package/Lights/LTC/ltcTextureTool.js +1 -1
- package/Lights/LTC/ltcTextureTool.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.d.ts +1 -285
- package/Lights/Shadows/cascadedShadowGenerator.js +3 -857
- package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
- package/Lights/Shadows/cascadedShadowGenerator.pure.d.ts +290 -0
- package/Lights/Shadows/cascadedShadowGenerator.pure.js +868 -0
- package/Lights/Shadows/cascadedShadowGenerator.pure.js.map +1 -0
- package/Lights/Shadows/pure.d.ts +1 -0
- package/Lights/Shadows/pure.js +1 -0
- package/Lights/Shadows/pure.js.map +1 -1
- package/Lights/Shadows/shadowGenerator.d.ts +3 -3
- package/Lights/Shadows/shadowGenerator.js +7 -7
- package/Lights/Shadows/shadowGenerator.js.map +1 -1
- package/Lights/areaLight.d.ts +1 -1
- package/Lights/areaLight.js +0 -1
- package/Lights/areaLight.js.map +1 -1
- package/Lights/light.d.ts +2 -2
- package/Lights/light.js +2 -2
- package/Lights/light.js.map +1 -1
- package/Lights/shadowLight.d.ts +1 -1
- package/Lights/shadowLight.js +1 -1
- package/Lights/shadowLight.js.map +1 -1
- package/Loading/sceneLoader.d.ts +2 -2
- package/Loading/sceneLoader.js +3 -3
- package/Loading/sceneLoader.js.map +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.d.ts +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.js +1 -1
- package/Materials/GreasedLine/greasedLineMaterialDefaults.js.map +1 -1
- package/Materials/GreasedLine/greasedLineSimpleMaterial.d.ts +3 -3
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js +3 -3
- package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js +6 -6
- package/Materials/Node/Blocks/Fragment/prePassOutputBlock.pure.js.map +1 -1
- package/Materials/Node/nodeMaterial.pure.d.ts +12 -0
- package/Materials/Node/nodeMaterial.pure.js +68 -13
- package/Materials/Node/nodeMaterial.pure.js.map +1 -1
- package/Materials/Node/nodeMaterialDefault.js +14 -14
- package/Materials/Node/nodeMaterialDefault.js.map +1 -1
- package/Materials/PBR/openpbrMaterial.pure.js +19 -4
- package/Materials/PBR/openpbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrAnisotropicConfiguration.d.ts +40 -2
- package/Materials/PBR/pbrAnisotropicConfiguration.js +41 -3
- package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBRDFConfiguration.d.ts +5 -1
- package/Materials/PBR/pbrBRDFConfiguration.js +5 -1
- package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
- package/Materials/PBR/pbrBaseSimpleMaterial.d.ts +2 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js +2 -2
- package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
- package/Materials/PBR/pbrClearCoatConfiguration.d.ts +42 -2
- package/Materials/PBR/pbrClearCoatConfiguration.js +42 -2
- package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
- package/Materials/PBR/pbrIridescenceConfiguration.d.ts +38 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js +38 -1
- package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
- package/Materials/PBR/pbrMaterial.pure.d.ts +6 -0
- package/Materials/PBR/pbrMaterial.pure.js +8 -0
- package/Materials/PBR/pbrMaterial.pure.js.map +1 -1
- package/Materials/PBR/pbrSheenConfiguration.d.ts +41 -2
- package/Materials/PBR/pbrSheenConfiguration.js +41 -2
- package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
- package/Materials/PBR/pbrSubSurfaceConfiguration.d.ts +41 -2
- package/Materials/PBR/pbrSubSurfaceConfiguration.js +42 -3
- package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js +1 -1
- package/Materials/Textures/Filtering/hdrFiltering.js.map +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.d.ts +1 -1
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js +2 -2
- package/Materials/Textures/Filtering/hdrIrradianceFiltering.js.map +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.core.d.ts +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js +5 -109
- package/Materials/Textures/Loaders/EXR/exrLoader.core.js.map +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js +1 -1
- package/Materials/Textures/Loaders/EXR/exrLoader.decoder.js.map +1 -1
- package/Materials/Textures/Loaders/basisTextureLoader.js +2 -2
- package/Materials/Textures/Loaders/basisTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js +1 -1
- package/Materials/Textures/Loaders/ddsTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/envTextureLoader.js +3 -1
- package/Materials/Textures/Loaders/envTextureLoader.js.map +1 -1
- package/Materials/Textures/Loaders/ktxTextureLoader.js +11 -2
- package/Materials/Textures/Loaders/ktxTextureLoader.js.map +1 -1
- package/Materials/Textures/MultiviewRenderTarget.d.ts +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js +1 -1
- package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
- package/Materials/Textures/Packer/packer.d.ts +1 -1
- package/Materials/Textures/Packer/packer.js +6 -6
- package/Materials/Textures/Packer/packer.js.map +1 -1
- package/Materials/Textures/Procedurals/customProceduralTexture.d.ts +2 -2
- package/Materials/Textures/Procedurals/customProceduralTexture.js +4 -4
- package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
- package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js +17 -5
- package/Materials/Textures/Procedurals/noiseProceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js +4 -1
- package/Materials/Textures/Procedurals/proceduralTexture.pure.js.map +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js +1 -1
- package/Materials/Textures/Procedurals/proceduralTextureSceneComponent.js.map +1 -1
- package/Materials/Textures/prePassRenderTarget.d.ts +1 -1
- package/Materials/Textures/prePassRenderTarget.js +1 -1
- package/Materials/Textures/prePassRenderTarget.js.map +1 -1
- package/Materials/Textures/rawCubeTexture.d.ts +1 -1
- package/Materials/Textures/rawCubeTexture.js +2 -2
- package/Materials/Textures/rawCubeTexture.js.map +1 -1
- package/Materials/Textures/rawTexture.d.ts +1 -1
- package/Materials/Textures/rawTexture.js +1 -1
- package/Materials/Textures/rawTexture.js.map +1 -1
- package/Materials/Textures/rawTexture2DArray.d.ts +1 -1
- package/Materials/Textures/rawTexture2DArray.js +1 -1
- package/Materials/Textures/rawTexture2DArray.js.map +1 -1
- package/Materials/Textures/rawTexture3D.d.ts +1 -1
- package/Materials/Textures/rawTexture3D.js +1 -1
- package/Materials/Textures/rawTexture3D.js.map +1 -1
- package/Materials/Textures/refractionTexture.d.ts +1 -1
- package/Materials/Textures/refractionTexture.js +1 -1
- package/Materials/Textures/refractionTexture.js.map +1 -1
- package/Materials/Textures/textureMerger.d.ts +1 -1
- package/Materials/Textures/textureMerger.js +1 -1
- package/Materials/Textures/textureMerger.js.map +1 -1
- package/Materials/Textures/textureProcessor.d.ts +1 -1
- package/Materials/Textures/textureProcessor.js +2 -2
- package/Materials/Textures/textureProcessor.js.map +1 -1
- package/Materials/Textures/thinRenderTargetTexture.d.ts +4 -4
- package/Materials/Textures/thinRenderTargetTexture.js +2 -2
- package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
- package/Materials/clipPlaneMaterialHelper.js +1 -1
- package/Materials/clipPlaneMaterialHelper.js.map +1 -1
- package/Materials/effect.pure.d.ts +2 -2
- package/Materials/effect.pure.js +12 -6
- package/Materials/effect.pure.js.map +1 -1
- package/Materials/effectRenderer.pure.js +4 -2
- package/Materials/effectRenderer.pure.js.map +1 -1
- package/Materials/floatingOriginMatrixOverrides.d.ts +1 -1
- package/Materials/floatingOriginMatrixOverrides.js +1 -1
- package/Materials/floatingOriginMatrixOverrides.js.map +1 -1
- package/Materials/material.detailMapConfiguration.d.ts +39 -1
- package/Materials/material.detailMapConfiguration.js +39 -1
- package/Materials/material.detailMapConfiguration.js.map +1 -1
- package/Materials/materialHelper.functions.js +45 -1
- package/Materials/materialHelper.functions.js.map +1 -1
- package/Materials/materialHelper.geometryrendering.d.ts +1 -1
- package/Materials/materialHelper.geometryrendering.js +1 -1
- package/Materials/materialHelper.geometryrendering.js.map +1 -1
- package/Materials/materialPluginFactoryExport.js +2 -2
- package/Materials/materialPluginFactoryExport.js.map +1 -1
- package/Materials/meshDebugPluginMaterial.pure.js +15 -13
- package/Materials/meshDebugPluginMaterial.pure.js.map +1 -1
- package/Materials/pushMaterial.d.ts +7 -1
- package/Materials/pushMaterial.js +7 -1
- package/Materials/pushMaterial.js.map +1 -1
- package/Materials/uniformBuffer.js +1 -1
- package/Materials/uniformBuffer.js.map +1 -1
- package/Maths/math.axis.d.ts +1 -1
- package/Maths/math.axis.js +1 -1
- package/Maths/math.axis.js.map +1 -1
- package/Maths/math.d.ts +2 -2
- package/Maths/math.functions.d.ts +1 -1
- package/Maths/math.functions.js +1 -1
- package/Maths/math.functions.js.map +1 -1
- package/Maths/math.isovector.d.ts +1 -1
- package/Maths/math.isovector.js +1 -1
- package/Maths/math.isovector.js.map +1 -1
- package/Maths/math.js +2 -2
- package/Maths/math.js.map +1 -1
- package/Maths/math.path.d.ts +1 -1
- package/Maths/math.path.js +1 -1
- package/Maths/math.path.js.map +1 -1
- package/Maths/math.plane.d.ts +1 -1
- package/Maths/math.plane.js +1 -1
- package/Maths/math.plane.js.map +1 -1
- package/Maths/math.polar.d.ts +1 -1
- package/Maths/math.polar.js +1 -1
- package/Maths/math.polar.js.map +1 -1
- package/Maths/math.vertexFormat.d.ts +1 -1
- package/Maths/math.vertexFormat.js +1 -1
- package/Maths/math.vertexFormat.js.map +1 -1
- package/Maths/pure.d.ts +1 -0
- package/Maths/pure.js +1 -0
- package/Maths/pure.js.map +1 -1
- package/Meshes/Builders/geodesicBuilder.js +1 -1
- package/Meshes/Builders/geodesicBuilder.js.map +1 -1
- package/Meshes/Builders/goldbergBuilder.d.ts +1 -1
- package/Meshes/Builders/goldbergBuilder.js +4 -4
- package/Meshes/Builders/goldbergBuilder.js.map +1 -1
- package/Meshes/Builders/greasedLineBuilder.d.ts +4 -4
- package/Meshes/Builders/greasedLineBuilder.js +5 -5
- package/Meshes/Builders/greasedLineBuilder.js.map +1 -1
- package/Meshes/Builders/textBuilder.d.ts +2 -2
- package/Meshes/Builders/textBuilder.js +4 -4
- package/Meshes/Builders/textBuilder.js.map +1 -1
- package/Meshes/Builders/tiledBoxBuilder.d.ts +3 -3
- package/Meshes/Builders/tiledBoxBuilder.js +3 -3
- package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.d.ts +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js +1 -1
- package/Meshes/Builders/tiledPlaneBuilder.js.map +1 -1
- package/Meshes/Compression/dracoCodec.js +1 -1
- package/Meshes/Compression/dracoCodec.js.map +1 -1
- package/Meshes/Compression/dracoDecoder.js +1 -1
- package/Meshes/Compression/dracoDecoder.js.map +1 -1
- package/Meshes/Compression/dracoEncoder.d.ts +1 -1
- package/Meshes/Compression/dracoEncoder.js +2 -2
- package/Meshes/Compression/dracoEncoder.js.map +1 -1
- package/Meshes/Compression/meshoptCompression.js +1 -1
- package/Meshes/Compression/meshoptCompression.js.map +1 -1
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js +64 -3
- package/Meshes/GaussianSplatting/gaussianSplattingMeshBase.pure.js.map +1 -1
- package/Meshes/GreasedLine/greasedLineBaseMesh.d.ts +2 -2
- package/Meshes/GreasedLine/greasedLineBaseMesh.js +3 -3
- package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
- package/Meshes/Node/nodeGeometry.d.ts +2 -2
- package/Meshes/Node/nodeGeometry.js +4 -4
- package/Meshes/Node/nodeGeometry.js.map +1 -1
- package/Meshes/Node/nodeGeometryBuildState.d.ts +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js +1 -1
- package/Meshes/Node/nodeGeometryBuildState.js.map +1 -1
- package/Meshes/abstractMesh.hotSpot.d.ts +1 -1
- package/Meshes/abstractMesh.hotSpot.js +2 -2
- package/Meshes/abstractMesh.hotSpot.js.map +1 -1
- package/Meshes/abstractMesh.pure.js +2 -13
- package/Meshes/abstractMesh.pure.js.map +1 -1
- package/Meshes/buffer.d.ts +1 -1
- package/Meshes/buffer.js +1 -1
- package/Meshes/buffer.js.map +1 -1
- package/Meshes/csg.d.ts +3 -3
- package/Meshes/csg.js +4 -4
- package/Meshes/csg.js.map +1 -1
- package/Meshes/csg2.d.ts +1 -1
- package/Meshes/csg2.js +38 -11
- package/Meshes/csg2.js.map +1 -1
- package/Meshes/geodesicMesh.d.ts +1 -1
- package/Meshes/geodesicMesh.js +1 -1
- package/Meshes/geodesicMesh.js.map +1 -1
- package/Meshes/geometry.d.ts +2 -2
- package/Meshes/geometry.js +4 -4
- package/Meshes/geometry.js.map +1 -1
- package/Meshes/lattice.d.ts +1 -1
- package/Meshes/lattice.js +1 -1
- package/Meshes/lattice.js.map +1 -1
- package/Meshes/lattice.material.d.ts +1 -1
- package/Meshes/lattice.material.js +1 -1
- package/Meshes/lattice.material.js.map +1 -1
- package/Meshes/mesh.vertexData.d.ts +2 -2
- package/Meshes/mesh.vertexData.js +3 -4
- package/Meshes/mesh.vertexData.js.map +1 -1
- package/Meshes/mesh.vertexData.subdivide.js +1 -1
- package/Meshes/mesh.vertexData.subdivide.js.map +1 -1
- package/Meshes/meshBuilder.d.ts +18 -18
- package/Meshes/meshBuilder.js +18 -18
- package/Meshes/meshBuilder.js.map +1 -1
- package/Meshes/meshSimplification.d.ts +1 -1
- package/Meshes/meshSimplification.js +4 -4
- package/Meshes/meshSimplification.js.map +1 -1
- package/Meshes/meshUVSpaceRenderer.d.ts +1 -1
- package/Meshes/meshUVSpaceRenderer.js +0 -1
- package/Meshes/meshUVSpaceRenderer.js.map +1 -1
- package/Meshes/meshUtils.d.ts +1 -1
- package/Meshes/meshUtils.js +2 -2
- package/Meshes/meshUtils.js.map +1 -1
- package/Meshes/polygonMesh.d.ts +2 -2
- package/Meshes/polygonMesh.js +3 -3
- package/Meshes/polygonMesh.js.map +1 -1
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js +2 -2
- package/Misc/HighDynamicRange/cubemapToSphericalPolynomial.js.map +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js +1 -1
- package/Misc/HighDynamicRange/panoramaToCubemap.js.map +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js +1 -1
- package/Misc/PerformanceViewer/performanceViewerCollector.js.map +1 -1
- package/Misc/areaLightsTextureTools.d.ts +1 -1
- package/Misc/areaLightsTextureTools.js +3 -3
- package/Misc/areaLightsTextureTools.js.map +1 -1
- package/Misc/assetsManager.d.ts +4 -4
- package/Misc/assetsManager.js +5 -5
- package/Misc/assetsManager.js.map +1 -1
- package/Misc/basisWorker.js +1 -1
- package/Misc/basisWorker.js.map +1 -1
- package/Misc/brdfTextureTools.js +1 -1
- package/Misc/brdfTextureTools.js.map +1 -1
- package/Misc/copyTextureToTexture.d.ts +1 -1
- package/Misc/copyTextureToTexture.js +1 -1
- package/Misc/copyTextureToTexture.js.map +1 -1
- package/Misc/decorators.serialization.js +2 -2
- package/Misc/decorators.serialization.js.map +1 -1
- package/Misc/depthReducer.d.ts +2 -2
- package/Misc/depthReducer.js +2 -2
- package/Misc/depthReducer.js.map +1 -1
- package/Misc/gradients.d.ts +1 -1
- package/Misc/gradients.js +1 -1
- package/Misc/gradients.js.map +1 -1
- package/Misc/greasedLineTools.d.ts +1 -1
- package/Misc/greasedLineTools.js +3 -3
- package/Misc/greasedLineTools.js.map +1 -1
- package/Misc/halfFloat.d.ts +17 -0
- package/Misc/halfFloat.js +131 -0
- package/Misc/halfFloat.js.map +1 -0
- package/Misc/khronosTextureContainer2.js +1 -1
- package/Misc/khronosTextureContainer2.js.map +1 -1
- package/Misc/meshExploder.js +1 -1
- package/Misc/meshExploder.js.map +1 -1
- package/Misc/pivotTools.js +1 -1
- package/Misc/pivotTools.js.map +1 -1
- package/Misc/rgbdTextureTools.js +1 -1
- package/Misc/rgbdTextureTools.js.map +1 -1
- package/Misc/sceneOptimizer.js +1 -1
- package/Misc/sceneOptimizer.js.map +1 -1
- package/Misc/sceneRecorder.js +7 -7
- package/Misc/sceneRecorder.js.map +1 -1
- package/Misc/sceneSerializer.js +3 -3
- package/Misc/sceneSerializer.js.map +1 -1
- package/Misc/snapshotRenderingHelper.js +1 -1
- package/Misc/snapshotRenderingHelper.js.map +1 -1
- package/Misc/textureTools.d.ts +3 -13
- package/Misc/textureTools.js +6 -64
- package/Misc/textureTools.js.map +1 -1
- package/Misc/thinMinMaxReducer.d.ts +1 -1
- package/Misc/thinMinMaxReducer.js +1 -1
- package/Misc/thinMinMaxReducer.js.map +1 -1
- package/Misc/tools.internals.js +1 -1
- package/Misc/tools.internals.js.map +1 -1
- package/Misc/tools.pure.js +11 -4
- package/Misc/tools.pure.js.map +1 -1
- package/Misc/trajectoryClassifier.d.ts +1 -1
- package/Misc/trajectoryClassifier.js +1 -1
- package/Misc/trajectoryClassifier.js.map +1 -1
- package/Misc/videoRecorder.js +1 -1
- package/Misc/videoRecorder.js.map +1 -1
- package/Misc/virtualJoystick.d.ts +1 -1
- package/Misc/virtualJoystick.js +1 -1
- package/Misc/virtualJoystick.js.map +1 -1
- package/Morph/morphTarget.js +1 -1
- package/Morph/morphTarget.js.map +1 -1
- package/Navigation/Plugins/recastJSPlugin.d.ts +1 -1
- package/Navigation/Plugins/recastJSPlugin.js +2 -2
- package/Navigation/Plugins/recastJSPlugin.js.map +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/boxParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/coneParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/customParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/hemisphericParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/meshParticleEmitter.js +2 -2
- package/Particles/EmitterTypes/meshParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/pointParticleEmitter.js.map +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.d.ts +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.js +1 -1
- package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
- package/Particles/Node/nodeParticleBuildState.d.ts +4 -4
- package/Particles/Node/nodeParticleBuildState.js +2 -2
- package/Particles/Node/nodeParticleBuildState.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.d.ts +2 -2
- package/Particles/Node/nodeParticleSystemSet.helper.js +31 -31
- package/Particles/Node/nodeParticleSystemSet.helper.js.map +1 -1
- package/Particles/Node/nodeParticleSystemSet.js +8 -8
- package/Particles/Node/nodeParticleSystemSet.js.map +1 -1
- package/Particles/attractor.d.ts +1 -1
- package/Particles/attractor.js +1 -1
- package/Particles/attractor.js.map +1 -1
- package/Particles/computeShaderParticleSystem.pure.js +5 -1
- package/Particles/computeShaderParticleSystem.pure.js.map +1 -1
- package/Particles/flowMap.d.ts +7 -1
- package/Particles/flowMap.js +7 -1
- package/Particles/flowMap.js.map +1 -1
- package/Particles/gpuParticleSystem.pure.d.ts +1 -0
- package/Particles/gpuParticleSystem.pure.js +17 -1
- package/Particles/gpuParticleSystem.pure.js.map +1 -1
- package/Particles/particle.d.ts +2 -2
- package/Particles/particle.js +2 -2
- package/Particles/particle.js.map +1 -1
- package/Particles/particleHelper.js +5 -5
- package/Particles/particleHelper.js.map +1 -1
- package/Particles/particleSystem.functions.d.ts +1 -1
- package/Particles/particleSystem.functions.js +1 -1
- package/Particles/particleSystem.functions.js.map +1 -1
- package/Particles/particleSystemSet.d.ts +1 -1
- package/Particles/particleSystemSet.js +5 -5
- package/Particles/particleSystemSet.js.map +1 -1
- package/Particles/pointsCloudSystem.d.ts +1 -1
- package/Particles/pointsCloudSystem.js +6 -6
- package/Particles/pointsCloudSystem.js.map +1 -1
- package/Particles/solidParticle.d.ts +2 -2
- package/Particles/solidParticle.js +3 -3
- package/Particles/solidParticle.js.map +1 -1
- package/Particles/solidParticleSystem.d.ts +4 -4
- package/Particles/solidParticleSystem.js +7 -7
- package/Particles/solidParticleSystem.js.map +1 -1
- package/Particles/subEmitter.js +1 -1
- package/Particles/subEmitter.js.map +1 -1
- package/Particles/thinParticleSystem.function.js +2 -2
- package/Particles/thinParticleSystem.function.js.map +1 -1
- package/Physics/Plugins/cannonJSPlugin.d.ts +1 -1
- package/Physics/Plugins/cannonJSPlugin.js +1 -1
- package/Physics/Plugins/cannonJSPlugin.js.map +1 -1
- package/Physics/castingResult.d.ts +1 -1
- package/Physics/castingResult.js +1 -1
- package/Physics/castingResult.js.map +1 -1
- package/Physics/physicsHelper.d.ts +1 -1
- package/Physics/physicsHelper.js +4 -4
- package/Physics/physicsHelper.js.map +1 -1
- package/Physics/physicsImpostor.d.ts +1 -1
- package/Physics/physicsImpostor.js +1 -1
- package/Physics/physicsImpostor.js.map +1 -1
- package/Physics/physicsRaycastResult.d.ts +1 -1
- package/Physics/physicsRaycastResult.js +1 -1
- package/Physics/physicsRaycastResult.js.map +1 -1
- package/Physics/v1/Plugins/ammoJSPlugin.d.ts +2 -2
- package/Physics/v1/Plugins/ammoJSPlugin.js +5 -5
- package/Physics/v1/Plugins/ammoJSPlugin.js.map +1 -1
- package/Physics/v1/Plugins/oimoJSPlugin.d.ts +2 -2
- package/Physics/v1/Plugins/oimoJSPlugin.js +2 -2
- package/Physics/v1/Plugins/oimoJSPlugin.js.map +1 -1
- package/Physics/v1/physicsEngine.d.ts +1 -1
- package/Physics/v1/physicsEngine.js +1 -1
- package/Physics/v1/physicsEngine.js.map +1 -1
- package/Physics/v2/Plugins/havokPlugin.d.ts +14 -2
- package/Physics/v2/Plugins/havokPlugin.js +45 -7
- package/Physics/v2/Plugins/havokPlugin.js.map +1 -1
- package/Physics/v2/characterController.d.ts +1 -1
- package/Physics/v2/characterController.js +2 -2
- package/Physics/v2/characterController.js.map +1 -1
- package/Physics/v2/physicsAggregate.d.ts +3 -3
- package/Physics/v2/physicsAggregate.js +10 -6
- package/Physics/v2/physicsAggregate.js.map +1 -1
- package/Physics/v2/physicsBody.d.ts +1 -1
- package/Physics/v2/physicsBody.js +1 -1
- package/Physics/v2/physicsBody.js.map +1 -1
- package/Physics/v2/physicsEngine.d.ts +1 -1
- package/Physics/v2/physicsEngine.js +1 -1
- package/Physics/v2/physicsEngine.js.map +1 -1
- package/Physics/v2/physicsShape.d.ts +1 -1
- package/Physics/v2/physicsShape.js +1 -1
- package/Physics/v2/physicsShape.js.map +1 -1
- package/Physics/v2/ragdoll.d.ts +2 -2
- package/Physics/v2/ragdoll.js +2 -2
- package/Physics/v2/ragdoll.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.d.ts +1 -0
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js +8 -6
- package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.pure.js.map +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js +1 -1
- package/PostProcesses/RenderPipeline/Pipelines/thinSSRRenderingPipeline.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderEffect.js.map +1 -1
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js +3 -2
- package/PostProcesses/RenderPipeline/postProcessRenderPipeline.js.map +1 -1
- package/PostProcesses/bloomEffect.d.ts +1 -1
- package/PostProcesses/bloomEffect.js +4 -4
- package/PostProcesses/bloomEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldEffect.d.ts +1 -1
- package/PostProcesses/depthOfFieldEffect.js +3 -3
- package/PostProcesses/depthOfFieldEffect.js.map +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.d.ts +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js +1 -1
- package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/highlightsPostProcess.d.ts +1 -1
- package/PostProcesses/highlightsPostProcess.js +1 -1
- package/PostProcesses/highlightsPostProcess.js.map +1 -1
- package/PostProcesses/imageProcessingPostProcess.d.ts +1 -1
- package/PostProcesses/imageProcessingPostProcess.js +1 -1
- package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/postProcessManager.d.ts +3 -0
- package/PostProcesses/postProcessManager.js +4 -1
- package/PostProcesses/postProcessManager.js.map +1 -1
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.d.ts +1 -0
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.js +10 -0
- package/PostProcesses/subSurfaceScatteringPostProcess.pure.js.map +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.d.ts +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.js +1 -1
- package/PostProcesses/thinAnaglyphPostProcess.js.map +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.d.ts +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.js +1 -1
- package/PostProcesses/thinBlackAndWhitePostProcess.js.map +1 -1
- package/PostProcesses/thinBloomEffect.js +1 -1
- package/PostProcesses/thinBloomEffect.js.map +1 -1
- package/PostProcesses/thinBloomMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinBloomMergePostProcess.js +1 -1
- package/PostProcesses/thinBloomMergePostProcess.js.map +1 -1
- package/PostProcesses/thinBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinBlurPostProcess.js +1 -1
- package/PostProcesses/thinBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinChromaticAberrationPostProcess.d.ts +2 -2
- package/PostProcesses/thinChromaticAberrationPostProcess.js +2 -2
- package/PostProcesses/thinChromaticAberrationPostProcess.js.map +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.d.ts +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.js +1 -1
- package/PostProcesses/thinCircleOfConfusionPostProcess.js.map +1 -1
- package/PostProcesses/thinColorCorrectionPostProcess.d.ts +1 -1
- package/PostProcesses/thinColorCorrectionPostProcess.js +2 -2
- package/PostProcesses/thinColorCorrectionPostProcess.js.map +1 -1
- package/PostProcesses/thinConvolutionPostProcess.d.ts +1 -1
- package/PostProcesses/thinConvolutionPostProcess.js +1 -1
- package/PostProcesses/thinConvolutionPostProcess.js.map +1 -1
- package/PostProcesses/thinCustomPostProcess.d.ts +1 -1
- package/PostProcesses/thinCustomPostProcess.js +1 -1
- package/PostProcesses/thinCustomPostProcess.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldEffect.d.ts +3 -0
- package/PostProcesses/thinDepthOfFieldEffect.js +4 -1
- package/PostProcesses/thinDepthOfFieldEffect.js.map +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.d.ts +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.js +1 -1
- package/PostProcesses/thinDepthOfFieldMergePostProcess.js.map +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.d.ts +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.js +1 -1
- package/PostProcesses/thinExtractHighlightsPostProcess.js.map +1 -1
- package/PostProcesses/thinFXAAPostProcess.d.ts +2 -2
- package/PostProcesses/thinFXAAPostProcess.js +2 -2
- package/PostProcesses/thinFXAAPostProcess.js.map +1 -1
- package/PostProcesses/thinFilterPostProcess.d.ts +2 -2
- package/PostProcesses/thinFilterPostProcess.js +2 -2
- package/PostProcesses/thinFilterPostProcess.js.map +1 -1
- package/PostProcesses/thinGrainPostProcess.d.ts +1 -1
- package/PostProcesses/thinGrainPostProcess.js +1 -1
- package/PostProcesses/thinGrainPostProcess.js.map +1 -1
- package/PostProcesses/thinImageProcessingPostProcess.d.ts +2 -2
- package/PostProcesses/thinImageProcessingPostProcess.js +2 -2
- package/PostProcesses/thinImageProcessingPostProcess.js.map +1 -1
- package/PostProcesses/thinMotionBlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinMotionBlurPostProcess.js +2 -2
- package/PostProcesses/thinMotionBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinPassPostProcess.d.ts +1 -1
- package/PostProcesses/thinPassPostProcess.js +1 -1
- package/PostProcesses/thinPassPostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.js +1 -1
- package/PostProcesses/thinSSAO2BlurPostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2CombinePostProcess.d.ts +1 -1
- package/PostProcesses/thinSSAO2CombinePostProcess.js +2 -2
- package/PostProcesses/thinSSAO2CombinePostProcess.js.map +1 -1
- package/PostProcesses/thinSSAO2PostProcess.d.ts +7 -2
- package/PostProcesses/thinSSAO2PostProcess.js +36 -4
- package/PostProcesses/thinSSAO2PostProcess.js.map +1 -1
- package/PostProcesses/thinSSRBlurCombinerPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js +2 -2
- package/PostProcesses/thinSSRBlurCombinerPostProcess.js.map +1 -1
- package/PostProcesses/thinSSRBlurPostProcess.d.ts +2 -2
- package/PostProcesses/thinSSRBlurPostProcess.js +2 -2
- package/PostProcesses/thinSSRBlurPostProcess.js.map +1 -1
- package/PostProcesses/thinSSRPostProcess.d.ts +1 -1
- package/PostProcesses/thinSSRPostProcess.js +2 -2
- package/PostProcesses/thinSSRPostProcess.js.map +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.d.ts +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js +1 -1
- package/PostProcesses/thinScreenSpaceCurvaturePostProcess.js.map +1 -1
- package/PostProcesses/thinSharpenPostProcess.d.ts +1 -1
- package/PostProcesses/thinSharpenPostProcess.js +1 -1
- package/PostProcesses/thinSharpenPostProcess.js.map +1 -1
- package/PostProcesses/thinTAAPostProcess.d.ts +3 -3
- package/PostProcesses/thinTAAPostProcess.js +4 -4
- package/PostProcesses/thinTAAPostProcess.js.map +1 -1
- package/PostProcesses/thinTonemapPostProcess.d.ts +1 -1
- package/PostProcesses/thinTonemapPostProcess.js +1 -1
- package/PostProcesses/thinTonemapPostProcess.js.map +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.d.ts +1 -1
- package/PostProcesses/vrDistortionCorrectionPostProcess.js +3 -3
- package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.d.ts +2 -2
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsAccumulationPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.d.ts +2 -2
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsSpatialBlurPass.js.map +1 -1
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.d.ts +3 -3
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js +4 -4
- package/Rendering/IBLShadows/iblShadowsVoxelTracingPass.js.map +1 -1
- package/Rendering/depthPeelingRenderer.d.ts +1 -1
- package/Rendering/depthPeelingRenderer.js +2 -2
- package/Rendering/depthPeelingRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObject.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.d.ts +1 -1
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js +2 -2
- package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.d.ts +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTargetRenderer.js.map +1 -1
- package/Rendering/fluidRenderer/fluidRenderingTextures.d.ts +2 -2
- package/Rendering/fluidRenderer/fluidRenderingTextures.js +3 -3
- package/Rendering/fluidRenderer/fluidRenderingTextures.js.map +1 -1
- package/Rendering/iblCdfGenerator.d.ts +3 -3
- package/Rendering/iblCdfGenerator.js +5 -5
- package/Rendering/iblCdfGenerator.js.map +1 -1
- package/Rendering/renderingGroup.js +1 -1
- package/Rendering/renderingGroup.js.map +1 -1
- package/Rendering/subSurfaceConfiguration.d.ts +2 -2
- package/Rendering/subSurfaceConfiguration.js +2 -2
- package/Rendering/subSurfaceConfiguration.js.map +1 -1
- package/Rendering/utilityLayerRenderer.d.ts +2 -2
- package/Rendering/utilityLayerRenderer.js +4 -4
- package/Rendering/utilityLayerRenderer.js.map +1 -1
- package/Shaders/ssao2.fragment.js +10 -2
- package/Shaders/ssao2.fragment.js.map +1 -1
- package/ShadersWGSL/gpuRenderParticles.fragment.d.ts +5 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js +50 -0
- package/ShadersWGSL/gpuRenderParticles.fragment.js.map +1 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.d.ts +5 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.js +120 -0
- package/ShadersWGSL/gpuRenderParticles.vertex.js.map +1 -0
- package/ShadersWGSL/noise.fragment.d.ts +5 -0
- package/ShadersWGSL/noise.fragment.js +18 -0
- package/ShadersWGSL/noise.fragment.js.map +1 -0
- package/ShadersWGSL/ssao2.fragment.js +10 -2
- package/ShadersWGSL/ssao2.fragment.js.map +1 -1
- package/SmartAssets/smartAssetSerializer.js +1 -1
- package/SmartAssets/smartAssetSerializer.js.map +1 -1
- package/Sprites/sprite.d.ts +2 -2
- package/Sprites/sprite.js +2 -2
- package/Sprites/sprite.js.map +1 -1
- package/Sprites/spriteManager.d.ts +2 -2
- package/Sprites/spriteManager.js +4 -5
- package/Sprites/spriteManager.js.map +1 -1
- package/Sprites/spritePackedManager.js +1 -1
- package/Sprites/spritePackedManager.js.map +1 -1
- package/Sprites/spriteRenderer.js +2 -2
- package/Sprites/spriteRenderer.js.map +1 -1
- package/XR/features/WebXRHitTestLegacy.d.ts +1 -1
- package/XR/features/WebXRHitTestLegacy.js +2 -2
- package/XR/features/WebXRHitTestLegacy.js.map +1 -1
- package/XR/motionController/webXRAbstractMotionController.js +2 -2
- package/XR/motionController/webXRAbstractMotionController.js.map +1 -1
- package/XR/motionController/webXRGenericMotionController.js +2 -2
- package/XR/motionController/webXRGenericMotionController.js.map +1 -1
- package/XR/motionController/webXRProfiledMotionController.js +4 -4
- package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
- package/XR/webXRCamera.d.ts +3 -3
- package/XR/webXRCamera.js +4 -4
- package/XR/webXRCamera.js.map +1 -1
- package/XR/webXRDefaultExperience.d.ts +4 -4
- package/XR/webXRDefaultExperience.js +4 -4
- package/XR/webXRDefaultExperience.js.map +1 -1
- package/XR/webXREnterExitUI.js +1 -1
- package/XR/webXREnterExitUI.js.map +1 -1
- package/XR/webXRExperienceHelper.js +2 -2
- package/XR/webXRExperienceHelper.js.map +1 -1
- package/XR/webXRFeaturesManager.d.ts +47 -0
- package/XR/webXRFeaturesManager.js +1 -1
- package/XR/webXRFeaturesManager.js.map +1 -1
- package/XR/webXRInput.js +1 -1
- package/XR/webXRInput.js.map +1 -1
- package/XR/webXRInputSource.js +4 -4
- package/XR/webXRInputSource.js.map +1 -1
- package/XR/webXRManagedOutputCanvas.js +1 -1
- package/XR/webXRManagedOutputCanvas.js.map +1 -1
- package/XR/webXRRenderTargetTextureProvider.d.ts +1 -1
- package/XR/webXRRenderTargetTextureProvider.js +1 -1
- package/XR/webXRRenderTargetTextureProvider.js.map +1 -1
- package/assetContainer.d.ts +4 -4
- package/assetContainer.js +6 -6
- package/assetContainer.js.map +1 -1
- package/node.d.ts +1 -1
- package/node.js +6 -2
- package/node.js.map +1 -1
- package/package.json +44 -174
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spriteRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAOvD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAgB/C;;;;GAIG;AACH,MAAM,OAAO,cAAc;IA2CvB;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,UAAU,CAAC,KAAc;QAChC,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAID;;;;OAIG;IACH,IAAW,mBAAmB;QAC1B,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED,IAAW,mBAAmB,CAAC,KAAc;QACzC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,sBAAsB,CAAC;QAE3F,IAAI,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACnC,MAAM,CAAC,IAAI,CAAC,iGAAiG,CAAC,CAAC;QACnH,CAAC;QAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,IAAI,sBAAsB,CAAC;QAC5D,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAID;;;OAGG;IACH,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IAED,IAAW,YAAY,CAAC,KAAc;QAClC,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YAC/B,OAAO;QACX,CAAC;QAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAKD;;OAEG;IACH,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IAuBD;;;;;;;OAOG;IACH,YAAY,MAAsB,EAAE,QAAgB,EAAE,UAAkB,IAAI,EAAE,QAAyB,IAAI,EAAE,eAAuC;QA7HpJ;;;;WAIG;QACI,cAAS,GAAG,SAAS,CAAC,aAAa,CAAC;QAE3C;;;WAGG;QACI,mBAAc,GAAG,IAAI,CAAC;QAE7B;;;;WAIG;QACI,sBAAiB,GAAY,KAAK,CAAC;QAElC,gBAAW,GAAG,IAAI,CAAC;QA+CnB,kBAAa,GAAG,KAAK,CAAC;QAmB9B,2CAA2C;QACjC,oBAAe,+BAAuB;QAU/B,YAAO,GAAY,KAAK,CAAC;QACzB,mBAAc,GAAY,KAAK,CAAC;QASzC,mBAAc,GAAoC,EAAE,CAAC;QAQrD,gBAAW,GAAG,KAAK,CAAC;QAsEpB,mBAAc,GAAG,KAAK,CAAC;QA3D3B,IAAI,CAAC,aAAa,GAAG,eAAe,EAAE,YAAY,IAAI,KAAK,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,eAAe,IAAI,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC;QACnG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,iBAAiB,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC;QACvF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAEpB,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM;QACN,wKAAwK;QACxK,0BAA0B;QAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAElF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAChI,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAE9G,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAqB,CAAC;QAE1B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC;gBAChC,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,QAAQ;gBACb,CAAC,GAAG,IAAI,CAAC,QAAQ;gBACjB,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,QAAQ;gBACb,CAAC,GAAG,IAAI,CAAC,QAAQ;gBACjB,CAAC,GAAG,IAAI,CAAC,QAAQ;gBACjB,CAAC,GAAG,IAAI,CAAC,QAAQ;aACpB,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9D,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACJ,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7G,MAAM,IAAI,CAAC,CAAC;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACnH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QACzH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAEnI,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;QAC3D,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC;QAErD,mEAAmE;QACnE,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAClC,CAAC;IAIO,KAAK,CAAC,sBAAsB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5B,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,eAAe,8BAAsB,CAAC;YAE3C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,+BAA+B,CAAC,EAAE,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC;QAC5G,CAAC;aAAM,CAAC;YACJ,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,2BAA2B,CAAC,EAAE,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,cAAc;QAClB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC3C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;QAElC,IAAI,CAAC,gBAAgB,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,iBAAiB,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE9D,IAAI,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1E,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;QAC3E,CAAC;QAED,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,yBAAyB,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACzF,OAAO,IAAI,eAAe,CAAC;QAC/B,CAAC;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO,IAAI,4BAA4B,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CACpD,SAAS,EACT,CAAC,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,CAAC,SAAS,CAAC,EAChG,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,0BAA0B,CAAC,EACzG,CAAC,gBAAgB,CAAC,EAClB,OAAO,EACP,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,IAAI,CAAC,eAAe,CACvB,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC7D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACzC,IAAI,CAAC,iBAAiB,CAAC,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC;IACnF,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CACT,OAAqB,EACrB,SAAiB,EACjB,UAAuB,EACvB,gBAA6B,EAC7B,qBAA8E,IAAI;QAElF,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACtF,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC1C,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;QAE9G,MAAM,MAAM,GAAG,WAAW,CAAC,MAAO,CAAC;QAEnC,QAAQ;QACR,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,oBAAoB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAEjF,UAAU;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAErD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,EAAE,oBAAoB,IAAI,OAAO,CAAC,YAAY,CAAC;QACvF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC/B,SAAS;YACb,CAAC;YAED,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,qFAAqF;YAElI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;YAC3H,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvB,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;gBAC3H,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;gBAC3H,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,CAAC,CAAC;YAC/H,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO;QACX,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC,OAAO,CAAC;QACjD,MAAM,YAAY,GAAG,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC;QAE3D,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QAEpF,SAAS;QACT,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAEjC,MAAM,CAAC,UAAU,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACrC,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAEjD,aAAa;QACb,IAAI,eAAe,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;YAE1B,MAAM;YACN,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;YAC7F,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,aAAa;QACb,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1C,YAAY,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC3B,IAAI,CAAC,kBAAkB,GAAI,MAAqB,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAC7H,CAAC;YACA,MAAqB,CAAC,qBAAqB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACJ,OAAO;YACP,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QACvE,CAAC;QAED,aAAa;QACb,MAAM,CAAC,iBAAiB,CAAC,SAAS,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;QACxG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACtC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAClF,CAAC;iBAAM,CAAC;gBACJ,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtF,CAAC;YACD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;QAED,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,8BAA8B,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,yBAAyB,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC;QAED,uBAAuB;QACvB,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACxG,CAAC;QAED,MAAM,CAAC,wBAAwB,EAAE,CAAC;IACtC,CAAC;IAEO,mBAAmB,CACvB,KAAa,EACb,MAAkB,EAClB,OAAe,EACf,OAAe,EACf,QAAe,EACf,oBAA6B,EAC7B,kBAA2E,EAC3E,oBAA6B;QAE7B,IAAI,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEjD,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,CAAC;aAAM,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAChC,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACrB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpB,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC;YACzB,CAAC;YAED,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAChD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;YAC5F,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/D,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC/B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QACpC,CAAC;QAED,YAAY;QACZ,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACjD,UAAU;QACV,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;QACjD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;QAElD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;QAChD,CAAC;aAAM,CAAC;YACJ,WAAW,IAAI,CAAC,CAAC;QACrB,CAAC;QAED,oCAAoC;QACpC,IAAI,oBAAoB,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3D,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC;QACpE,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAErE,QAAQ;QACR,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxD,CAAC;IAEO,iBAAiB;QACrB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACxB,KAAK,IAAI,CAAC,CAAC;QACf,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,kBAAkB,GAAG,SAAgB,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAExB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC9C,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAQ,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,aAAc,GAAG,IAAI,CAAC;QACrC,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzC,IAAI,CAAC,YAAa,GAAG,IAAI,CAAC;QACpC,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACzB,IAAI,CAAC,OAAsB,CAAC,wBAAwB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACzE,IAAI,CAAC,kBAAmB,GAAG,IAAI,CAAC;QAC1C,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAQ,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,IAAI,CAAC,gBAAgB,EAAE,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;;AAtiBD;;;GAGG;AACW,wBAAS,GAAG,KAAK,AAAR,CAAS","sourcesContent":["import { type Nullable } from \"../types\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type IMatrixLike } from \"../Maths/math.like\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Buffer, VertexBuffer } from \"../Buffers/buffer\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { type ThinSprite } from \"./thinSprite\";\r\nimport { type ISize } from \"../Maths/math.size\";\r\n\r\nimport { type ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport { type Scene } from \"../scene\";\r\nimport { type ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BindLogDepth } from \"../Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\nimport { Vector3 } from \"../Maths/math.vector\";\r\n\r\n/**\r\n * Options for the SpriteRenderer\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface SpriteRendererOptions {\r\n /**\r\n * Sets a boolean indicating if the renderer must render sprites with pixel perfect rendering.\r\n * In this mode, sprites are rendered as \"pixel art\", which means that they appear as pixelated but remain stable when moving or when rotated or scaled.\r\n * Note that for this mode to work as expected, the sprite texture must use the BILINEAR sampling mode, not NEAREST!\r\n * Default is false.\r\n */\r\n pixelPerfect?: boolean;\r\n}\r\n\r\n/**\r\n * Class used to render sprites.\r\n *\r\n * It can be used either to render Sprites or ThinSprites with ThinEngine only.\r\n */\r\nexport class SpriteRenderer {\r\n /**\r\n * Force all the sprites to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Defines the texture of the spritesheet\r\n */\r\n public texture: Nullable<ThinTexture>;\r\n\r\n /**\r\n * Defines the default width of a cell in the spritesheet\r\n */\r\n public cellWidth: number;\r\n\r\n /**\r\n * Defines the default height of a cell in the spritesheet\r\n */\r\n public cellHeight: number;\r\n\r\n /**\r\n * Blend mode use to render the particle, it can be any of\r\n * the static Constants.ALPHA_x properties provided in this class.\r\n * Default value is Constants.ALPHA_COMBINE\r\n */\r\n public blendMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if alpha mode is automatically\r\n * reset.\r\n */\r\n public autoResetAlpha = true;\r\n\r\n /**\r\n * Disables writing to the depth buffer when rendering the sprites.\r\n * It can be handy to disable depth writing when using textures without alpha channel\r\n * and setting some specific blend modes.\r\n */\r\n public disableDepthWrite: boolean = false;\r\n\r\n private _fogEnabled = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the manager must consider scene fog when rendering\r\n */\r\n public get fogEnabled() {\r\n return this._fogEnabled;\r\n }\r\n\r\n public set fogEnabled(value: boolean) {\r\n if (this._fogEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fogEnabled = value;\r\n this._createEffects();\r\n }\r\n\r\n protected _useLogarithmicDepth: boolean;\r\n\r\n /**\r\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\r\n * You can try switching to logarithmic depth.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\r\n */\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n const fragmentDepthSupported = !!this._scene?.getEngine().getCaps().fragmentDepthSupported;\r\n\r\n if (value && !fragmentDepthSupported) {\r\n Logger.Warn(\"Logarithmic depth has been requested for a sprite renderer on a device that doesn't support it.\");\r\n }\r\n\r\n this._useLogarithmicDepth = value && fragmentDepthSupported;\r\n this._createEffects();\r\n }\r\n\r\n /**\r\n * Gets the capacity of the manager\r\n */\r\n public get capacity() {\r\n return this._capacity;\r\n }\r\n\r\n private _pixelPerfect = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the renderer must render sprites with pixel perfect rendering\r\n * Note that pixel perfect mode is not supported in WebGL 1\r\n */\r\n public get pixelPerfect() {\r\n return this._pixelPerfect;\r\n }\r\n\r\n public set pixelPerfect(value: boolean) {\r\n if (this._pixelPerfect === value) {\r\n return;\r\n }\r\n\r\n this._pixelPerfect = value;\r\n this._createEffects();\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _useVAO: boolean = false;\r\n private readonly _useInstancing: boolean = false;\r\n private readonly _scene: Nullable<Scene>;\r\n\r\n private readonly _capacity: number;\r\n private readonly _epsilon: number;\r\n\r\n private _vertexBufferSize: number;\r\n private _vertexData: Float32Array;\r\n private _buffer: Buffer;\r\n private _vertexBuffers: { [key: string]: VertexBuffer } = {};\r\n private _spriteBuffer: Nullable<Buffer>;\r\n private _indexBuffer: DataBuffer;\r\n /** @internal */\r\n public _drawWrapperBase: DrawWrapper;\r\n /** @internal */\r\n public _drawWrapperDepth: DrawWrapper;\r\n private _vertexArrayObject: WebGLVertexArrayObject;\r\n private _isDisposed = false;\r\n\r\n /**\r\n * Creates a new sprite renderer\r\n * @param engine defines the engine the renderer works with\r\n * @param capacity defines the maximum allowed number of sprites\r\n * @param epsilon defines the epsilon value to align texture (0.01 by default)\r\n * @param scene defines the hosting scene\r\n * @param rendererOptions options for the sprite renderer\r\n */\r\n constructor(engine: AbstractEngine, capacity: number, epsilon: number = 0.01, scene: Nullable<Scene> = null, rendererOptions?: SpriteRendererOptions) {\r\n this._pixelPerfect = rendererOptions?.pixelPerfect ?? false;\r\n this._capacity = capacity;\r\n this._epsilon = epsilon;\r\n\r\n this._engine = engine;\r\n this._useInstancing = engine.getCaps().instancedArrays && engine._features.supportSpriteInstancing;\r\n this._useVAO = engine.getCaps().vertexArrayObject && !engine.disableVertexArrayObjects;\r\n this._scene = scene;\r\n\r\n if (!this._useInstancing) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n // VBO\r\n // 18 floats per sprite (x, y, z, angle, sizeX, sizeY, offsetX, offsetY, invertU, invertV, cellLeft, cellTop, cellWidth, cellHeight, color r, color g, color b, color a)\r\n // 16 when using instances\r\n this._vertexBufferSize = this._useInstancing ? 16 : 18;\r\n this._vertexData = new Float32Array(capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4));\r\n this._buffer = new Buffer(engine, this._vertexData, true, this._vertexBufferSize);\r\n\r\n const positions = this._buffer.createVertexBuffer(VertexBuffer.PositionKind, 0, 4, this._vertexBufferSize, this._useInstancing);\r\n const options = this._buffer.createVertexBuffer(\"options\", 4, 2, this._vertexBufferSize, this._useInstancing);\r\n\r\n let offset = 6;\r\n let offsets: VertexBuffer;\r\n\r\n if (this._useInstancing) {\r\n const spriteData = new Float32Array([\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n ]);\r\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\r\n offsets = this._spriteBuffer.createVertexBuffer(\"offsets\", 0, 2);\r\n } else {\r\n offsets = this._buffer.createVertexBuffer(\"offsets\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n offset += 2;\r\n }\r\n\r\n const inverts = this._buffer.createVertexBuffer(\"inverts\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n const cellInfo = this._buffer.createVertexBuffer(\"cellInfo\", offset + 2, 4, this._vertexBufferSize, this._useInstancing);\r\n const colors = this._buffer.createVertexBuffer(VertexBuffer.ColorKind, offset + 6, 4, this._vertexBufferSize, this._useInstancing);\r\n\r\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\r\n this._vertexBuffers[\"options\"] = options;\r\n this._vertexBuffers[\"offsets\"] = offsets;\r\n this._vertexBuffers[\"inverts\"] = inverts;\r\n this._vertexBuffers[\"cellInfo\"] = cellInfo;\r\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._engine;\r\n\r\n if (engine.isWebGPU && !SpriteRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/sprites.vertex\"), import(\"../ShadersWGSL/sprites.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/sprites.vertex\"), import(\"../Shaders/sprites.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n this._createEffects();\r\n }\r\n\r\n private _createEffects() {\r\n if (this._isDisposed || !this._shadersLoaded) {\r\n return;\r\n }\r\n\r\n this._drawWrapperBase?.dispose();\r\n this._drawWrapperDepth?.dispose();\r\n\r\n this._drawWrapperBase = new DrawWrapper(this._engine);\r\n this._drawWrapperDepth = new DrawWrapper(this._engine, false);\r\n\r\n if (this._drawWrapperBase.drawContext) {\r\n this._drawWrapperBase.drawContext.useInstancing = this._useInstancing;\r\n }\r\n if (this._drawWrapperDepth.drawContext) {\r\n this._drawWrapperDepth.drawContext.useInstancing = this._useInstancing;\r\n }\r\n\r\n let defines = \"\";\r\n\r\n if (this._pixelPerfect) {\r\n defines += \"#define PIXEL_PERFECT\\n\";\r\n }\r\n if (this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled) {\r\n defines += \"#define FOG\\n\";\r\n }\r\n if (this._useLogarithmicDepth) {\r\n defines += \"#define LOGARITHMICDEPTH\\n\";\r\n }\r\n\r\n this._drawWrapperBase.effect = this._engine.createEffect(\r\n \"sprites\",\r\n [VertexBuffer.PositionKind, \"options\", \"offsets\", \"inverts\", \"cellInfo\", VertexBuffer.ColorKind],\r\n [\"view\", \"projection\", \"textureInfos\", \"alphaTest\", \"vFogInfos\", \"vFogColor\", \"logarithmicDepthConstant\"],\r\n [\"diffuseSampler\"],\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._shaderLanguage\r\n );\r\n\r\n this._drawWrapperDepth.effect = this._drawWrapperBase.effect;\r\n this._drawWrapperBase.effect._refCount++;\r\n this._drawWrapperDepth.materialContext = this._drawWrapperBase.materialContext;\r\n }\r\n\r\n /**\r\n * Render all child sprites\r\n * @param sprites defines the list of sprites to render\r\n * @param deltaTime defines the time since last frame\r\n * @param viewMatrix defines the viewMatrix to use to render the sprites\r\n * @param projectionMatrix defines the projectionMatrix to use to render the sprites\r\n * @param customSpriteUpdate defines a custom function to update the sprites data before they render\r\n */\r\n public render(\r\n sprites: ThinSprite[],\r\n deltaTime: number,\r\n viewMatrix: IMatrixLike,\r\n projectionMatrix: IMatrixLike,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void> = null\r\n ): void {\r\n if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {\r\n return;\r\n }\r\n\r\n const drawWrapper = this._drawWrapperBase;\r\n const drawWrapperDepth = this._drawWrapperDepth;\r\n const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n // Check\r\n if (!effect.isReady()) {\r\n return;\r\n }\r\n\r\n const engine = this._engine;\r\n const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);\r\n\r\n // Sprites\r\n const max = Math.min(this._capacity, sprites.length);\r\n\r\n let offset = 0;\r\n let noSprite = true;\r\n const floatingOriginOffset = this._scene?.floatingOriginOffset || Vector3.ZeroReadOnly;\r\n for (let index = 0; index < max; index++) {\r\n const sprite = sprites[index];\r\n if (!sprite || !sprite.isVisible) {\r\n continue;\r\n }\r\n\r\n noSprite = false;\r\n sprite._animate(deltaTime);\r\n const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)\r\n\r\n this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);\r\n if (!this._useInstancing) {\r\n this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);\r\n this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);\r\n this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);\r\n }\r\n }\r\n\r\n if (noSprite) {\r\n return;\r\n }\r\n\r\n this._buffer.update(this._vertexData);\r\n\r\n const culling = !!engine.depthCullingState.cull;\r\n const zOffset = engine.depthCullingState.zOffset;\r\n const zOffsetUnits = engine.depthCullingState.zOffsetUnits;\r\n\r\n engine.setState(culling, zOffset, false, false, undefined, undefined, zOffsetUnits);\r\n\r\n // Render\r\n engine.enableEffect(drawWrapper);\r\n\r\n effect.setTexture(\"diffuseSampler\", this.texture);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n // Scene Info\r\n if (shouldRenderFog) {\r\n const scene = this._scene;\r\n\r\n // Fog\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth && this._scene) {\r\n BindLogDepth(drawWrapper.defines, effect, this._scene);\r\n }\r\n\r\n if (this._useVAO) {\r\n if (!this._vertexArrayObject) {\r\n this._vertexArrayObject = (engine as ThinEngine).recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n (engine as ThinEngine).bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);\r\n } else {\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n // Draw order\r\n engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? Constants.GEQUAL : Constants.LEQUAL;\r\n if (!this.disableDepthWrite) {\r\n effect.setBool(\"alphaTest\", true);\r\n engine.setColorWrite(false);\r\n engine.enableEffect(drawWrapperDepth);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n engine.enableEffect(drawWrapper);\r\n engine.setColorWrite(true);\r\n effect.setBool(\"alphaTest\", false);\r\n }\r\n\r\n engine.setAlphaMode(this.blendMode);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n\r\n if (this.autoResetAlpha) {\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n\r\n // Restore Right Handed\r\n if (useRightHandedSystem) {\r\n this._scene.getEngine().setState(culling, zOffset, false, true, undefined, undefined, zOffsetUnits);\r\n }\r\n\r\n engine.unbindInstanceAttributes();\r\n }\r\n\r\n private _appendSpriteVertex(\r\n index: number,\r\n sprite: ThinSprite,\r\n offsetX: number,\r\n offsetY: number,\r\n baseSize: ISize,\r\n useRightHandedSystem: boolean,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void>,\r\n floatingOriginOffset: Vector3\r\n ): void {\r\n let arrayOffset = index * this._vertexBufferSize;\r\n\r\n if (offsetX === 0) {\r\n offsetX = this._epsilon;\r\n } else if (offsetX === 1) {\r\n offsetX = 1 - this._epsilon;\r\n }\r\n\r\n if (offsetY === 0) {\r\n offsetY = this._epsilon;\r\n } else if (offsetY === 1) {\r\n offsetY = 1 - this._epsilon;\r\n }\r\n\r\n if (customSpriteUpdate) {\r\n customSpriteUpdate(sprite, baseSize);\r\n } else {\r\n if (!sprite.cellIndex) {\r\n sprite.cellIndex = 0;\r\n }\r\n\r\n const rowSize = baseSize.width / this.cellWidth;\r\n const offset = (sprite.cellIndex / rowSize) >> 0;\r\n sprite._xOffset = ((sprite.cellIndex - offset * rowSize) * this.cellWidth) / baseSize.width;\r\n sprite._yOffset = (offset * this.cellHeight) / baseSize.height;\r\n sprite._xSize = this.cellWidth;\r\n sprite._ySize = this.cellHeight;\r\n }\r\n\r\n // Positions\r\n this._vertexData[arrayOffset] = sprite.position.x - floatingOriginOffset.x;\r\n this._vertexData[arrayOffset + 1] = sprite.position.y - floatingOriginOffset.y;\r\n this._vertexData[arrayOffset + 2] = sprite.position.z - floatingOriginOffset.z;\r\n this._vertexData[arrayOffset + 3] = sprite.angle;\r\n // Options\r\n this._vertexData[arrayOffset + 4] = sprite.width;\r\n this._vertexData[arrayOffset + 5] = sprite.height;\r\n\r\n if (!this._useInstancing) {\r\n this._vertexData[arrayOffset + 6] = offsetX;\r\n this._vertexData[arrayOffset + 7] = offsetY;\r\n } else {\r\n arrayOffset -= 2;\r\n }\r\n\r\n // Inverts according to Right Handed\r\n if (useRightHandedSystem) {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 0 : 1;\r\n } else {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 1 : 0;\r\n }\r\n\r\n this._vertexData[arrayOffset + 9] = sprite.invertV ? 1 : 0;\r\n\r\n this._vertexData[arrayOffset + 10] = sprite._xOffset;\r\n this._vertexData[arrayOffset + 11] = sprite._yOffset;\r\n this._vertexData[arrayOffset + 12] = sprite._xSize / baseSize.width;\r\n this._vertexData[arrayOffset + 13] = sprite._ySize / baseSize.height;\r\n\r\n // Color\r\n this._vertexData[arrayOffset + 14] = sprite.color.r;\r\n this._vertexData[arrayOffset + 15] = sprite.color.g;\r\n this._vertexData[arrayOffset + 16] = sprite.color.b;\r\n this._vertexData[arrayOffset + 17] = sprite.color.a;\r\n }\r\n\r\n private _buildIndexBuffer(): void {\r\n const indices = [];\r\n let index = 0;\r\n for (let count = 0; count < this._capacity; count++) {\r\n indices.push(index);\r\n indices.push(index + 1);\r\n indices.push(index + 2);\r\n indices.push(index);\r\n indices.push(index + 2);\r\n indices.push(index + 3);\r\n index += 4;\r\n }\r\n\r\n this._indexBuffer = this._engine.createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Rebuilds the renderer (after a context lost, for eg)\r\n */\r\n public rebuild(): void {\r\n if (this._indexBuffer) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n if (this._useVAO) {\r\n this._vertexArrayObject = undefined as any;\r\n }\r\n\r\n this._buffer._rebuild();\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n\r\n this._spriteBuffer?._rebuild();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n if (this._buffer) {\r\n this._buffer.dispose();\r\n (<any>this._buffer) = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n (<any>this._spriteBuffer) = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n (<any>this._indexBuffer) = null;\r\n }\r\n\r\n if (this._vertexArrayObject) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(this._vertexArrayObject);\r\n (<any>this._vertexArrayObject) = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n (<any>this.texture) = null;\r\n }\r\n this._drawWrapperBase?.dispose();\r\n this._drawWrapperDepth?.dispose();\r\n this._isDisposed = true;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"spriteRenderer.js","sourceRoot":"","sources":["../../../../dev/core/src/Sprites/spriteRenderer.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Nullable } from \"../types\";\r\nimport { Constants } from \"../Engines/constants\";\r\nimport { type IMatrixLike } from \"../Maths/math.like\";\r\nimport { type AbstractEngine } from \"../Engines/abstractEngine\";\r\nimport { type DataBuffer } from \"../Buffers/dataBuffer\";\r\nimport { Buffer, VertexBuffer } from \"../Buffers/buffer.pure\";\r\nimport { DrawWrapper } from \"../Materials/drawWrapper\";\r\nimport { type ThinSprite } from \"./thinSprite\";\r\nimport { type ISize } from \"../Maths/math.size\";\r\n\r\nimport { type ThinTexture } from \"../Materials/Textures/thinTexture\";\r\nimport { type Scene } from \"../scene\";\r\nimport { type ThinEngine } from \"../Engines/thinEngine\";\r\nimport { Logger } from \"../Misc/logger\";\r\nimport { BindLogDepth } from \"../Materials/materialHelper.functions\";\r\nimport { ShaderLanguage } from \"../Materials/shaderLanguage\";\r\nimport { Vector3 } from \"../Maths/math.vector.pure\";\r\n\r\n/**\r\n * Options for the SpriteRenderer\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport interface SpriteRendererOptions {\r\n /**\r\n * Sets a boolean indicating if the renderer must render sprites with pixel perfect rendering.\r\n * In this mode, sprites are rendered as \"pixel art\", which means that they appear as pixelated but remain stable when moving or when rotated or scaled.\r\n * Note that for this mode to work as expected, the sprite texture must use the BILINEAR sampling mode, not NEAREST!\r\n * Default is false.\r\n */\r\n pixelPerfect?: boolean;\r\n}\r\n\r\n/**\r\n * Class used to render sprites.\r\n *\r\n * It can be used either to render Sprites or ThinSprites with ThinEngine only.\r\n */\r\nexport class SpriteRenderer {\r\n /**\r\n * Force all the sprites to compile to glsl even on WebGPU engines.\r\n * False by default. This is mostly meant for backward compatibility.\r\n */\r\n public static ForceGLSL = false;\r\n /**\r\n * Defines the texture of the spritesheet\r\n */\r\n public texture: Nullable<ThinTexture>;\r\n\r\n /**\r\n * Defines the default width of a cell in the spritesheet\r\n */\r\n public cellWidth: number;\r\n\r\n /**\r\n * Defines the default height of a cell in the spritesheet\r\n */\r\n public cellHeight: number;\r\n\r\n /**\r\n * Blend mode use to render the particle, it can be any of\r\n * the static Constants.ALPHA_x properties provided in this class.\r\n * Default value is Constants.ALPHA_COMBINE\r\n */\r\n public blendMode = Constants.ALPHA_COMBINE;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if alpha mode is automatically\r\n * reset.\r\n */\r\n public autoResetAlpha = true;\r\n\r\n /**\r\n * Disables writing to the depth buffer when rendering the sprites.\r\n * It can be handy to disable depth writing when using textures without alpha channel\r\n * and setting some specific blend modes.\r\n */\r\n public disableDepthWrite: boolean = false;\r\n\r\n private _fogEnabled = true;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the manager must consider scene fog when rendering\r\n */\r\n public get fogEnabled() {\r\n return this._fogEnabled;\r\n }\r\n\r\n public set fogEnabled(value: boolean) {\r\n if (this._fogEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fogEnabled = value;\r\n this._createEffects();\r\n }\r\n\r\n protected _useLogarithmicDepth: boolean;\r\n\r\n /**\r\n * In case the depth buffer does not allow enough depth precision for your scene (might be the case in large scenes)\r\n * You can try switching to logarithmic depth.\r\n * @see https://doc.babylonjs.com/features/featuresDeepDive/materials/advanced/logarithmicDepthBuffer\r\n */\r\n public get useLogarithmicDepth(): boolean {\r\n return this._useLogarithmicDepth;\r\n }\r\n\r\n public set useLogarithmicDepth(value: boolean) {\r\n const fragmentDepthSupported = !!this._scene?.getEngine().getCaps().fragmentDepthSupported;\r\n\r\n if (value && !fragmentDepthSupported) {\r\n Logger.Warn(\"Logarithmic depth has been requested for a sprite renderer on a device that doesn't support it.\");\r\n }\r\n\r\n this._useLogarithmicDepth = value && fragmentDepthSupported;\r\n this._createEffects();\r\n }\r\n\r\n /**\r\n * Gets the capacity of the manager\r\n */\r\n public get capacity() {\r\n return this._capacity;\r\n }\r\n\r\n private _pixelPerfect = false;\r\n\r\n /**\r\n * Gets or sets a boolean indicating if the renderer must render sprites with pixel perfect rendering\r\n * Note that pixel perfect mode is not supported in WebGL 1\r\n */\r\n public get pixelPerfect() {\r\n return this._pixelPerfect;\r\n }\r\n\r\n public set pixelPerfect(value: boolean) {\r\n if (this._pixelPerfect === value) {\r\n return;\r\n }\r\n\r\n this._pixelPerfect = value;\r\n this._createEffects();\r\n }\r\n\r\n /** Shader language used by the material */\r\n protected _shaderLanguage = ShaderLanguage.GLSL;\r\n\r\n /**\r\n * Gets the shader language used in this renderer.\r\n */\r\n public get shaderLanguage(): ShaderLanguage {\r\n return this._shaderLanguage;\r\n }\r\n\r\n private readonly _engine: AbstractEngine;\r\n private readonly _useVAO: boolean = false;\r\n private readonly _useInstancing: boolean = false;\r\n private readonly _scene: Nullable<Scene>;\r\n\r\n private readonly _capacity: number;\r\n private readonly _epsilon: number;\r\n\r\n private _vertexBufferSize: number;\r\n private _vertexData: Float32Array;\r\n private _buffer: Buffer;\r\n private _vertexBuffers: { [key: string]: VertexBuffer } = {};\r\n private _spriteBuffer: Nullable<Buffer>;\r\n private _indexBuffer: DataBuffer;\r\n /** @internal */\r\n public _drawWrapperBase: DrawWrapper;\r\n /** @internal */\r\n public _drawWrapperDepth: DrawWrapper;\r\n private _vertexArrayObject: WebGLVertexArrayObject;\r\n private _isDisposed = false;\r\n\r\n /**\r\n * Creates a new sprite renderer\r\n * @param engine defines the engine the renderer works with\r\n * @param capacity defines the maximum allowed number of sprites\r\n * @param epsilon defines the epsilon value to align texture (0.01 by default)\r\n * @param scene defines the hosting scene\r\n * @param rendererOptions options for the sprite renderer\r\n */\r\n constructor(engine: AbstractEngine, capacity: number, epsilon: number = 0.01, scene: Nullable<Scene> = null, rendererOptions?: SpriteRendererOptions) {\r\n this._pixelPerfect = rendererOptions?.pixelPerfect ?? false;\r\n this._capacity = capacity;\r\n this._epsilon = epsilon;\r\n\r\n this._engine = engine;\r\n this._useInstancing = engine.getCaps().instancedArrays && engine._features.supportSpriteInstancing;\r\n this._useVAO = engine.getCaps().vertexArrayObject && !engine.disableVertexArrayObjects;\r\n this._scene = scene;\r\n\r\n if (!this._useInstancing) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n // VBO\r\n // 18 floats per sprite (x, y, z, angle, sizeX, sizeY, offsetX, offsetY, invertU, invertV, cellLeft, cellTop, cellWidth, cellHeight, color r, color g, color b, color a)\r\n // 16 when using instances\r\n this._vertexBufferSize = this._useInstancing ? 16 : 18;\r\n this._vertexData = new Float32Array(capacity * this._vertexBufferSize * (this._useInstancing ? 1 : 4));\r\n this._buffer = new Buffer(engine, this._vertexData, true, this._vertexBufferSize);\r\n\r\n const positions = this._buffer.createVertexBuffer(VertexBuffer.PositionKind, 0, 4, this._vertexBufferSize, this._useInstancing);\r\n const options = this._buffer.createVertexBuffer(\"options\", 4, 2, this._vertexBufferSize, this._useInstancing);\r\n\r\n let offset = 6;\r\n let offsets: VertexBuffer;\r\n\r\n if (this._useInstancing) {\r\n const spriteData = new Float32Array([\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n this._epsilon,\r\n this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n 1 - this._epsilon,\r\n ]);\r\n this._spriteBuffer = new Buffer(engine, spriteData, false, 2);\r\n offsets = this._spriteBuffer.createVertexBuffer(\"offsets\", 0, 2);\r\n } else {\r\n offsets = this._buffer.createVertexBuffer(\"offsets\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n offset += 2;\r\n }\r\n\r\n const inverts = this._buffer.createVertexBuffer(\"inverts\", offset, 2, this._vertexBufferSize, this._useInstancing);\r\n const cellInfo = this._buffer.createVertexBuffer(\"cellInfo\", offset + 2, 4, this._vertexBufferSize, this._useInstancing);\r\n const colors = this._buffer.createVertexBuffer(VertexBuffer.ColorKind, offset + 6, 4, this._vertexBufferSize, this._useInstancing);\r\n\r\n this._vertexBuffers[VertexBuffer.PositionKind] = positions;\r\n this._vertexBuffers[\"options\"] = options;\r\n this._vertexBuffers[\"offsets\"] = offsets;\r\n this._vertexBuffers[\"inverts\"] = inverts;\r\n this._vertexBuffers[\"cellInfo\"] = cellInfo;\r\n this._vertexBuffers[VertexBuffer.ColorKind] = colors;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._initShaderSourceAsync();\r\n }\r\n\r\n private _shadersLoaded = false;\r\n\r\n private async _initShaderSourceAsync() {\r\n const engine = this._engine;\r\n\r\n if (engine.isWebGPU && !SpriteRenderer.ForceGLSL) {\r\n this._shaderLanguage = ShaderLanguage.WGSL;\r\n\r\n await Promise.all([import(\"../ShadersWGSL/sprites.vertex\"), import(\"../ShadersWGSL/sprites.fragment\")]);\r\n } else {\r\n await Promise.all([import(\"../Shaders/sprites.vertex\"), import(\"../Shaders/sprites.fragment\")]);\r\n }\r\n\r\n this._shadersLoaded = true;\r\n this._createEffects();\r\n }\r\n\r\n private _createEffects() {\r\n if (this._isDisposed || !this._shadersLoaded) {\r\n return;\r\n }\r\n\r\n this._drawWrapperBase?.dispose();\r\n this._drawWrapperDepth?.dispose();\r\n\r\n this._drawWrapperBase = new DrawWrapper(this._engine);\r\n this._drawWrapperDepth = new DrawWrapper(this._engine, false);\r\n\r\n if (this._drawWrapperBase.drawContext) {\r\n this._drawWrapperBase.drawContext.useInstancing = this._useInstancing;\r\n }\r\n if (this._drawWrapperDepth.drawContext) {\r\n this._drawWrapperDepth.drawContext.useInstancing = this._useInstancing;\r\n }\r\n\r\n let defines = \"\";\r\n\r\n if (this._pixelPerfect) {\r\n defines += \"#define PIXEL_PERFECT\\n\";\r\n }\r\n if (this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0 && this._fogEnabled) {\r\n defines += \"#define FOG\\n\";\r\n }\r\n if (this._useLogarithmicDepth) {\r\n defines += \"#define LOGARITHMICDEPTH\\n\";\r\n }\r\n\r\n this._drawWrapperBase.effect = this._engine.createEffect(\r\n \"sprites\",\r\n [VertexBuffer.PositionKind, \"options\", \"offsets\", \"inverts\", \"cellInfo\", VertexBuffer.ColorKind],\r\n [\"view\", \"projection\", \"textureInfos\", \"alphaTest\", \"vFogInfos\", \"vFogColor\", \"logarithmicDepthConstant\"],\r\n [\"diffuseSampler\"],\r\n defines,\r\n undefined,\r\n undefined,\r\n undefined,\r\n undefined,\r\n this._shaderLanguage\r\n );\r\n\r\n this._drawWrapperDepth.effect = this._drawWrapperBase.effect;\r\n this._drawWrapperBase.effect._refCount++;\r\n this._drawWrapperDepth.materialContext = this._drawWrapperBase.materialContext;\r\n }\r\n\r\n /**\r\n * Render all child sprites\r\n * @param sprites defines the list of sprites to render\r\n * @param deltaTime defines the time since last frame\r\n * @param viewMatrix defines the viewMatrix to use to render the sprites\r\n * @param projectionMatrix defines the projectionMatrix to use to render the sprites\r\n * @param customSpriteUpdate defines a custom function to update the sprites data before they render\r\n */\r\n public render(\r\n sprites: ThinSprite[],\r\n deltaTime: number,\r\n viewMatrix: IMatrixLike,\r\n projectionMatrix: IMatrixLike,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void> = null\r\n ): void {\r\n if (!this._shadersLoaded || !this.texture || !this.texture.isReady() || !sprites.length) {\r\n return;\r\n }\r\n\r\n const drawWrapper = this._drawWrapperBase;\r\n const drawWrapperDepth = this._drawWrapperDepth;\r\n const shouldRenderFog = this.fogEnabled && this._scene && this._scene.fogEnabled && this._scene.fogMode !== 0;\r\n\r\n const effect = drawWrapper.effect!;\r\n\r\n // Check\r\n if (!effect.isReady()) {\r\n return;\r\n }\r\n\r\n const engine = this._engine;\r\n const useRightHandedSystem = !!(this._scene && this._scene.useRightHandedSystem);\r\n\r\n // Sprites\r\n const max = Math.min(this._capacity, sprites.length);\r\n\r\n let offset = 0;\r\n let noSprite = true;\r\n const floatingOriginOffset = this._scene?.floatingOriginOffset || Vector3.ZeroReadOnly;\r\n for (let index = 0; index < max; index++) {\r\n const sprite = sprites[index];\r\n if (!sprite || !sprite.isVisible) {\r\n continue;\r\n }\r\n\r\n noSprite = false;\r\n sprite._animate(deltaTime);\r\n const baseSize = this.texture.getBaseSize(); // This could be change by the user inside the animate callback (like onAnimationEnd)\r\n\r\n this._appendSpriteVertex(offset++, sprite, 0, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);\r\n if (!this._useInstancing) {\r\n this._appendSpriteVertex(offset++, sprite, 1, 0, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);\r\n this._appendSpriteVertex(offset++, sprite, 1, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);\r\n this._appendSpriteVertex(offset++, sprite, 0, 1, baseSize, useRightHandedSystem, customSpriteUpdate, floatingOriginOffset);\r\n }\r\n }\r\n\r\n if (noSprite) {\r\n return;\r\n }\r\n\r\n this._buffer.update(this._vertexData);\r\n\r\n const culling = !!engine.depthCullingState.cull;\r\n const zOffset = engine.depthCullingState.zOffset;\r\n const zOffsetUnits = engine.depthCullingState.zOffsetUnits;\r\n\r\n engine.setState(culling, zOffset, false, false, undefined, undefined, zOffsetUnits);\r\n\r\n // Render\r\n engine.enableEffect(drawWrapper);\r\n\r\n effect.setTexture(\"diffuseSampler\", this.texture);\r\n effect.setMatrix(\"view\", viewMatrix);\r\n effect.setMatrix(\"projection\", projectionMatrix);\r\n\r\n // Scene Info\r\n if (shouldRenderFog) {\r\n const scene = this._scene;\r\n\r\n // Fog\r\n effect.setFloat4(\"vFogInfos\", scene.fogMode, scene.fogStart, scene.fogEnd, scene.fogDensity);\r\n effect.setColor3(\"vFogColor\", scene.fogColor);\r\n }\r\n\r\n // Log. depth\r\n if (this.useLogarithmicDepth && this._scene) {\r\n BindLogDepth(drawWrapper.defines, effect, this._scene);\r\n }\r\n\r\n if (this._useVAO) {\r\n if (!this._vertexArrayObject) {\r\n this._vertexArrayObject = (engine as ThinEngine).recordVertexArrayObject(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n (engine as ThinEngine).bindVertexArrayObject(this._vertexArrayObject, this._indexBuffer);\r\n } else {\r\n // VBOs\r\n engine.bindBuffers(this._vertexBuffers, this._indexBuffer, effect);\r\n }\r\n\r\n // Draw order\r\n engine.depthCullingState.depthFunc = engine.useReverseDepthBuffer ? Constants.GEQUAL : Constants.LEQUAL;\r\n if (!this.disableDepthWrite) {\r\n effect.setBool(\"alphaTest\", true);\r\n engine.setColorWrite(false);\r\n engine.enableEffect(drawWrapperDepth);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n engine.enableEffect(drawWrapper);\r\n engine.setColorWrite(true);\r\n effect.setBool(\"alphaTest\", false);\r\n }\r\n\r\n engine.setAlphaMode(this.blendMode);\r\n if (this._useInstancing) {\r\n engine.drawArraysType(Constants.MATERIAL_TriangleStripDrawMode, 0, 4, offset);\r\n } else {\r\n engine.drawElementsType(Constants.MATERIAL_TriangleFillMode, 0, (offset / 4) * 6);\r\n }\r\n\r\n if (this.autoResetAlpha) {\r\n engine.setAlphaMode(Constants.ALPHA_DISABLE);\r\n }\r\n\r\n // Restore Right Handed\r\n if (useRightHandedSystem) {\r\n this._scene.getEngine().setState(culling, zOffset, false, true, undefined, undefined, zOffsetUnits);\r\n }\r\n\r\n engine.unbindInstanceAttributes();\r\n }\r\n\r\n private _appendSpriteVertex(\r\n index: number,\r\n sprite: ThinSprite,\r\n offsetX: number,\r\n offsetY: number,\r\n baseSize: ISize,\r\n useRightHandedSystem: boolean,\r\n customSpriteUpdate: Nullable<(sprite: ThinSprite, baseSize: ISize) => void>,\r\n floatingOriginOffset: Vector3\r\n ): void {\r\n let arrayOffset = index * this._vertexBufferSize;\r\n\r\n if (offsetX === 0) {\r\n offsetX = this._epsilon;\r\n } else if (offsetX === 1) {\r\n offsetX = 1 - this._epsilon;\r\n }\r\n\r\n if (offsetY === 0) {\r\n offsetY = this._epsilon;\r\n } else if (offsetY === 1) {\r\n offsetY = 1 - this._epsilon;\r\n }\r\n\r\n if (customSpriteUpdate) {\r\n customSpriteUpdate(sprite, baseSize);\r\n } else {\r\n if (!sprite.cellIndex) {\r\n sprite.cellIndex = 0;\r\n }\r\n\r\n const rowSize = baseSize.width / this.cellWidth;\r\n const offset = (sprite.cellIndex / rowSize) >> 0;\r\n sprite._xOffset = ((sprite.cellIndex - offset * rowSize) * this.cellWidth) / baseSize.width;\r\n sprite._yOffset = (offset * this.cellHeight) / baseSize.height;\r\n sprite._xSize = this.cellWidth;\r\n sprite._ySize = this.cellHeight;\r\n }\r\n\r\n // Positions\r\n this._vertexData[arrayOffset] = sprite.position.x - floatingOriginOffset.x;\r\n this._vertexData[arrayOffset + 1] = sprite.position.y - floatingOriginOffset.y;\r\n this._vertexData[arrayOffset + 2] = sprite.position.z - floatingOriginOffset.z;\r\n this._vertexData[arrayOffset + 3] = sprite.angle;\r\n // Options\r\n this._vertexData[arrayOffset + 4] = sprite.width;\r\n this._vertexData[arrayOffset + 5] = sprite.height;\r\n\r\n if (!this._useInstancing) {\r\n this._vertexData[arrayOffset + 6] = offsetX;\r\n this._vertexData[arrayOffset + 7] = offsetY;\r\n } else {\r\n arrayOffset -= 2;\r\n }\r\n\r\n // Inverts according to Right Handed\r\n if (useRightHandedSystem) {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 0 : 1;\r\n } else {\r\n this._vertexData[arrayOffset + 8] = sprite.invertU ? 1 : 0;\r\n }\r\n\r\n this._vertexData[arrayOffset + 9] = sprite.invertV ? 1 : 0;\r\n\r\n this._vertexData[arrayOffset + 10] = sprite._xOffset;\r\n this._vertexData[arrayOffset + 11] = sprite._yOffset;\r\n this._vertexData[arrayOffset + 12] = sprite._xSize / baseSize.width;\r\n this._vertexData[arrayOffset + 13] = sprite._ySize / baseSize.height;\r\n\r\n // Color\r\n this._vertexData[arrayOffset + 14] = sprite.color.r;\r\n this._vertexData[arrayOffset + 15] = sprite.color.g;\r\n this._vertexData[arrayOffset + 16] = sprite.color.b;\r\n this._vertexData[arrayOffset + 17] = sprite.color.a;\r\n }\r\n\r\n private _buildIndexBuffer(): void {\r\n const indices = [];\r\n let index = 0;\r\n for (let count = 0; count < this._capacity; count++) {\r\n indices.push(index);\r\n indices.push(index + 1);\r\n indices.push(index + 2);\r\n indices.push(index);\r\n indices.push(index + 2);\r\n indices.push(index + 3);\r\n index += 4;\r\n }\r\n\r\n this._indexBuffer = this._engine.createIndexBuffer(indices);\r\n }\r\n\r\n /**\r\n * Rebuilds the renderer (after a context lost, for eg)\r\n */\r\n public rebuild(): void {\r\n if (this._indexBuffer) {\r\n this._buildIndexBuffer();\r\n }\r\n\r\n if (this._useVAO) {\r\n this._vertexArrayObject = undefined as any;\r\n }\r\n\r\n this._buffer._rebuild();\r\n\r\n for (const key in this._vertexBuffers) {\r\n const vertexBuffer = this._vertexBuffers[key];\r\n vertexBuffer._rebuild();\r\n }\r\n\r\n this._spriteBuffer?._rebuild();\r\n }\r\n\r\n /**\r\n * Release associated resources\r\n */\r\n public dispose(): void {\r\n if (this._buffer) {\r\n this._buffer.dispose();\r\n (<any>this._buffer) = null;\r\n }\r\n\r\n if (this._spriteBuffer) {\r\n this._spriteBuffer.dispose();\r\n (<any>this._spriteBuffer) = null;\r\n }\r\n\r\n if (this._indexBuffer) {\r\n this._engine._releaseBuffer(this._indexBuffer);\r\n (<any>this._indexBuffer) = null;\r\n }\r\n\r\n if (this._vertexArrayObject) {\r\n (this._engine as ThinEngine).releaseVertexArrayObject(this._vertexArrayObject);\r\n (<any>this._vertexArrayObject) = null;\r\n }\r\n\r\n if (this.texture) {\r\n this.texture.dispose();\r\n (<any>this.texture) = null;\r\n }\r\n this._drawWrapperBase?.dispose();\r\n this._drawWrapperDepth?.dispose();\r\n this._isDisposed = true;\r\n }\r\n}\r\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type IWebXRFeature } from "../webXRFeaturesManager.js";
|
|
2
2
|
import { type WebXRSessionManager } from "../webXRSessionManager.js";
|
|
3
3
|
import { Observable } from "../../Misc/observable.js";
|
|
4
|
-
import { Matrix } from "../../Maths/math.vector.js";
|
|
4
|
+
import { Matrix } from "../../Maths/math.vector.pure.js";
|
|
5
5
|
import { type TransformNode } from "../../Meshes/transformNode.js";
|
|
6
6
|
import { WebXRAbstractFeature } from "./WebXRAbstractFeature.js";
|
|
7
7
|
/**
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { WebXRFeaturesManager, WebXRFeatureName } from "../webXRFeaturesManager.js";
|
|
2
2
|
import { Observable } from "../../Misc/observable.js";
|
|
3
|
-
import { Vector3, Matrix } from "../../Maths/math.vector.js";
|
|
3
|
+
import { Vector3, Matrix } from "../../Maths/math.vector.pure.js";
|
|
4
4
|
import { WebXRAbstractFeature } from "./WebXRAbstractFeature.js";
|
|
5
|
-
import { Tools } from "../../Misc/tools.js";
|
|
5
|
+
import { Tools } from "../../Misc/tools.pure.js";
|
|
6
6
|
/**
|
|
7
7
|
* The currently-working hit-test module.
|
|
8
8
|
* Hit test (or Ray-casting) is used to interact with the real world.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebXRHitTestLegacy.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRHitTestLegacy.ts"],"names":[],"mappings":"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","sourcesContent":["import { type IWebXRFeature, WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager\";\r\nimport { type WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Vector3, Matrix } from \"../../Maths/math.vector\";\r\nimport { type TransformNode } from \"../../Meshes/transformNode\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { Tools } from \"../../Misc/tools\";\r\n\r\n// the plugin is registered at the end of the file\r\n\r\n/**\r\n * An interface for all Hit test features\r\n */\r\nexport interface IWebXRHitTestFeature<T extends IWebXRLegacyHitResult> extends IWebXRFeature {\r\n /**\r\n * Triggered when new babylon (transformed) hit test results are available\r\n */\r\n onHitTestResultObservable: Observable<T[]>;\r\n}\r\n\r\n/**\r\n * Options used for hit testing\r\n */\r\nexport interface IWebXRLegacyHitTestOptions {\r\n /**\r\n * Only test when user interacted with the scene. Default - hit test every frame\r\n */\r\n testOnPointerDownOnly?: boolean;\r\n /**\r\n * The node to use to transform the local results to world coordinates\r\n */\r\n worldParentNode?: TransformNode;\r\n}\r\n\r\n/**\r\n * Interface defining the babylon result of raycasting/hit-test\r\n */\r\nexport interface IWebXRLegacyHitResult {\r\n /**\r\n * Transformation matrix that can be applied to a node that will put it in the hit point location\r\n */\r\n transformationMatrix: Matrix;\r\n /**\r\n * The native hit test result\r\n */\r\n xrHitResult: XRHitResult | XRHitTestResult;\r\n}\r\n\r\n/**\r\n * The currently-working hit-test module.\r\n * Hit test (or Ray-casting) is used to interact with the real world.\r\n * For further information read here - https://github.com/immersive-web/hit-test\r\n */\r\nexport class WebXRHitTestLegacy extends WebXRAbstractFeature implements IWebXRHitTestFeature<IWebXRLegacyHitResult> {\r\n // in XR space z-forward is negative\r\n private _direction = new Vector3(0, 0, -1);\r\n private _mat = new Matrix();\r\n private _onSelectEnabled = false;\r\n private _origin = new Vector3(0, 0, 0);\r\n\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.HIT_TEST;\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 * Populated with the last native XR Hit Results\r\n */\r\n public lastNativeXRHitResults: XRHitResult[] = [];\r\n /**\r\n * Triggered when new babylon (transformed) hit test results are available\r\n */\r\n public onHitTestResultObservable: Observable<IWebXRLegacyHitResult[]> = new Observable();\r\n\r\n /**\r\n * Creates a new instance of the (legacy version) hit test feature\r\n * @param _xrSessionManager an instance of WebXRSessionManager\r\n * @param options options to use when constructing this feature\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n /**\r\n * [Empty Object] options to use when constructing this feature\r\n */\r\n public readonly options: IWebXRLegacyHitTestOptions = {}\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"hit-test\";\r\n Tools.Warn(\"A newer version of this plugin is available\");\r\n }\r\n\r\n /**\r\n * execute a hit test with an XR Ray\r\n *\r\n * @param xrSession a native xrSession that will execute this hit test\r\n * @param xrRay the ray (position and direction) to use for ray-casting\r\n * @param referenceSpace native XR reference space to use for the hit-test\r\n * @param filter filter function that will filter the results\r\n * @returns a promise that resolves with an array of native XR hit result in xr coordinates system\r\n */\r\n public static async XRHitTestWithRay(xrSession: XRSession, xrRay: XRRay, referenceSpace: XRReferenceSpace, filter?: (result: XRHitResult) => boolean): Promise<XRHitResult[]> {\r\n const results = await xrSession.requestHitTest!(xrRay, referenceSpace);\r\n const filterFunction = filter || ((result) => !!result.hitMatrix);\r\n return results.filter(filterFunction);\r\n }\r\n\r\n /**\r\n * Execute a hit test on the current running session using a select event returned from a transient input (such as touch)\r\n * @param event the (select) event to use to select with\r\n * @param referenceSpace the reference space to use for this hit test\r\n * @returns a promise that resolves with an array of native XR hit result in xr coordinates system\r\n */\r\n public static async XRHitTestWithSelectEvent(event: XRInputSourceEvent, referenceSpace: XRReferenceSpace): Promise<XRHitResult[]> {\r\n const targetRayPose = event.frame.getPose(event.inputSource.targetRaySpace, referenceSpace);\r\n if (!targetRayPose) {\r\n return [];\r\n }\r\n const targetRay = new XRRay(targetRayPose.transform);\r\n\r\n return await this.XRHitTestWithRay(event.frame.session, targetRay, referenceSpace);\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 if (this.options.testOnPointerDownOnly) {\r\n this._xrSessionManager.session.addEventListener(\"select\", this._onSelect, false);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * detach 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 detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n // disable select\r\n this._onSelectEnabled = false;\r\n this._xrSessionManager.session.removeEventListener(\"select\", this._onSelect);\r\n return true;\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 this.onHitTestResultObservable.clear();\r\n }\r\n\r\n protected _onXRFrame(frame: XRFrame) {\r\n // make sure we do nothing if (async) not attached\r\n if (!this.attached || this.options.testOnPointerDownOnly) {\r\n return;\r\n }\r\n const pose = frame.getViewerPose(this._xrSessionManager.referenceSpace);\r\n if (!pose) {\r\n return;\r\n }\r\n Matrix.FromArrayToRef(pose.transform.matrix, 0, this._mat);\r\n Vector3.TransformCoordinatesFromFloatsToRef(0, 0, 0, this._mat, this._origin);\r\n Vector3.TransformCoordinatesFromFloatsToRef(0, 0, -1, this._mat, this._direction);\r\n this._direction.subtractInPlace(this._origin);\r\n this._direction.normalize();\r\n const ray = new XRRay(\r\n <DOMPointReadOnly>{ x: this._origin.x, y: this._origin.y, z: this._origin.z, w: 0 },\r\n <DOMPointReadOnly>{ x: this._direction.x, y: this._direction.y, z: this._direction.z, w: 0 }\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n WebXRHitTestLegacy.XRHitTestWithRay(this._xrSessionManager.session, ray, this._xrSessionManager.referenceSpace).then(this._onHitTestResults);\r\n }\r\n\r\n private _onHitTestResults = (xrResults: XRHitResult[]) => {\r\n const mats = xrResults.map((result) => {\r\n const mat = Matrix.FromArray(result.hitMatrix);\r\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\r\n mat.toggleModelMatrixHandInPlace();\r\n }\r\n // if (this.options.coordinatesSpace === Space.WORLD) {\r\n if (this.options.worldParentNode) {\r\n mat.multiplyToRef(this.options.worldParentNode.getWorldMatrix(), mat);\r\n }\r\n return {\r\n xrHitResult: result,\r\n transformationMatrix: mat,\r\n };\r\n });\r\n\r\n this.lastNativeXRHitResults = xrResults;\r\n this.onHitTestResultObservable.notifyObservers(mats);\r\n };\r\n\r\n // can be done using pointerdown event, and xrSessionManager.currentFrame\r\n private _onSelect = (event: XRInputSourceEvent) => {\r\n if (!this._onSelectEnabled) {\r\n return;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n WebXRHitTestLegacy.XRHitTestWithSelectEvent(event, this._xrSessionManager.referenceSpace);\r\n };\r\n}\r\n\r\n//register the plugin versions\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRHitTestLegacy.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRHitTestLegacy(xrSessionManager, options);\r\n },\r\n WebXRHitTestLegacy.Version,\r\n false\r\n);\r\n"]}
|
|
1
|
+
{"version":3,"file":"WebXRHitTestLegacy.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/features/WebXRHitTestLegacy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAErG,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AA0C9C;;;;GAIG;AACH,MAAM,OAAO,kBAAmB,SAAQ,oBAAoB;IA2BxD;;;;OAIG;IACH,YACI,iBAAsC;IACtC;;OAEG;IACa,UAAsC,EAAE;QAExD,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAFT,YAAO,GAAP,OAAO,CAAiC;QApC5D,oCAAoC;QAC5B,eAAU,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnC,SAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QACpB,qBAAgB,GAAG,KAAK,CAAC;QACzB,YAAO,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAavC;;WAEG;QACI,2BAAsB,GAAkB,EAAE,CAAC;QAClD;;WAEG;QACI,8BAAyB,GAAwC,IAAI,UAAU,EAAE,CAAC;QAiHjF,sBAAiB,GAAG,CAAC,SAAwB,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBAClC,MAAM,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;oBACrD,GAAG,CAAC,4BAA4B,EAAE,CAAC;gBACvC,CAAC;gBACD,uDAAuD;gBACvD,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;oBAC/B,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,GAAG,CAAC,CAAC;gBAC1E,CAAC;gBACD,OAAO;oBACH,WAAW,EAAE,MAAM;oBACnB,oBAAoB,EAAE,GAAG;iBAC5B,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;YACxC,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC,CAAC;QAEF,yEAAyE;QACjE,cAAS,GAAG,CAAC,KAAyB,EAAE,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACzB,OAAO;YACX,CAAC;YACD,mEAAmE;YACnE,kBAAkB,CAAC,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QAC9F,CAAC,CAAC;QA7HE,IAAI,CAAC,mBAAmB,GAAG,UAAU,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;;;;OAQG;IACI,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAoB,EAAE,KAAY,EAAE,cAAgC,EAAE,MAAyC;QAChJ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,cAAe,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACvE,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,KAAyB,EAAE,cAAgC;QACpG,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAC5F,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACd,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAErD,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;IACvF,CAAC;IAED;;;;;OAKG;IACa,MAAM;QAClB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACrC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACa,MAAM;QAClB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,iBAAiB;QACjB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7E,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACa,OAAO;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;IAES,UAAU,CAAC,KAAc;QAC/B,kDAAkD;QAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YACvD,OAAO;QACX,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,OAAO,CAAC,mCAAmC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9E,OAAO,CAAC,mCAAmC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClF,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,KAAK,CACC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EACjE,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAC/F,CAAC;QACF,mFAAmF;QACnF,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjJ,CAAC;;AAjID;;GAEG;AACoB,uBAAI,GAAG,gBAAgB,CAAC,QAAQ,AAA5B,CAA6B;AACxD;;;;GAIG;AACoB,0BAAO,GAAG,CAAC,AAAJ,CAAK;AAwJvC,8BAA8B;AAC9B,oBAAoB,CAAC,eAAe,CAChC,kBAAkB,CAAC,IAAI,EACvB,CAAC,gBAAgB,EAAE,OAAO,EAAE,EAAE;IAC1B,OAAO,GAAG,EAAE,CAAC,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC,EACD,kBAAkB,CAAC,OAAO,EAC1B,KAAK,CACR,CAAC","sourcesContent":["import { type IWebXRFeature, WebXRFeaturesManager, WebXRFeatureName } from \"../webXRFeaturesManager\";\r\nimport { type WebXRSessionManager } from \"../webXRSessionManager\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Vector3, Matrix } from \"../../Maths/math.vector.pure\";\r\nimport { type TransformNode } from \"../../Meshes/transformNode\";\r\nimport { WebXRAbstractFeature } from \"./WebXRAbstractFeature\";\r\nimport { Tools } from \"../../Misc/tools.pure\";\r\n\r\n// the plugin is registered at the end of the file\r\n\r\n/**\r\n * An interface for all Hit test features\r\n */\r\nexport interface IWebXRHitTestFeature<T extends IWebXRLegacyHitResult> extends IWebXRFeature {\r\n /**\r\n * Triggered when new babylon (transformed) hit test results are available\r\n */\r\n onHitTestResultObservable: Observable<T[]>;\r\n}\r\n\r\n/**\r\n * Options used for hit testing\r\n */\r\nexport interface IWebXRLegacyHitTestOptions {\r\n /**\r\n * Only test when user interacted with the scene. Default - hit test every frame\r\n */\r\n testOnPointerDownOnly?: boolean;\r\n /**\r\n * The node to use to transform the local results to world coordinates\r\n */\r\n worldParentNode?: TransformNode;\r\n}\r\n\r\n/**\r\n * Interface defining the babylon result of raycasting/hit-test\r\n */\r\nexport interface IWebXRLegacyHitResult {\r\n /**\r\n * Transformation matrix that can be applied to a node that will put it in the hit point location\r\n */\r\n transformationMatrix: Matrix;\r\n /**\r\n * The native hit test result\r\n */\r\n xrHitResult: XRHitResult | XRHitTestResult;\r\n}\r\n\r\n/**\r\n * The currently-working hit-test module.\r\n * Hit test (or Ray-casting) is used to interact with the real world.\r\n * For further information read here - https://github.com/immersive-web/hit-test\r\n */\r\nexport class WebXRHitTestLegacy extends WebXRAbstractFeature implements IWebXRHitTestFeature<IWebXRLegacyHitResult> {\r\n // in XR space z-forward is negative\r\n private _direction = new Vector3(0, 0, -1);\r\n private _mat = new Matrix();\r\n private _onSelectEnabled = false;\r\n private _origin = new Vector3(0, 0, 0);\r\n\r\n /**\r\n * The module's name\r\n */\r\n public static readonly Name = WebXRFeatureName.HIT_TEST;\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 * Populated with the last native XR Hit Results\r\n */\r\n public lastNativeXRHitResults: XRHitResult[] = [];\r\n /**\r\n * Triggered when new babylon (transformed) hit test results are available\r\n */\r\n public onHitTestResultObservable: Observable<IWebXRLegacyHitResult[]> = new Observable();\r\n\r\n /**\r\n * Creates a new instance of the (legacy version) hit test feature\r\n * @param _xrSessionManager an instance of WebXRSessionManager\r\n * @param options options to use when constructing this feature\r\n */\r\n constructor(\r\n _xrSessionManager: WebXRSessionManager,\r\n /**\r\n * [Empty Object] options to use when constructing this feature\r\n */\r\n public readonly options: IWebXRLegacyHitTestOptions = {}\r\n ) {\r\n super(_xrSessionManager);\r\n this.xrNativeFeatureName = \"hit-test\";\r\n Tools.Warn(\"A newer version of this plugin is available\");\r\n }\r\n\r\n /**\r\n * execute a hit test with an XR Ray\r\n *\r\n * @param xrSession a native xrSession that will execute this hit test\r\n * @param xrRay the ray (position and direction) to use for ray-casting\r\n * @param referenceSpace native XR reference space to use for the hit-test\r\n * @param filter filter function that will filter the results\r\n * @returns a promise that resolves with an array of native XR hit result in xr coordinates system\r\n */\r\n public static async XRHitTestWithRay(xrSession: XRSession, xrRay: XRRay, referenceSpace: XRReferenceSpace, filter?: (result: XRHitResult) => boolean): Promise<XRHitResult[]> {\r\n const results = await xrSession.requestHitTest!(xrRay, referenceSpace);\r\n const filterFunction = filter || ((result) => !!result.hitMatrix);\r\n return results.filter(filterFunction);\r\n }\r\n\r\n /**\r\n * Execute a hit test on the current running session using a select event returned from a transient input (such as touch)\r\n * @param event the (select) event to use to select with\r\n * @param referenceSpace the reference space to use for this hit test\r\n * @returns a promise that resolves with an array of native XR hit result in xr coordinates system\r\n */\r\n public static async XRHitTestWithSelectEvent(event: XRInputSourceEvent, referenceSpace: XRReferenceSpace): Promise<XRHitResult[]> {\r\n const targetRayPose = event.frame.getPose(event.inputSource.targetRaySpace, referenceSpace);\r\n if (!targetRayPose) {\r\n return [];\r\n }\r\n const targetRay = new XRRay(targetRayPose.transform);\r\n\r\n return await this.XRHitTestWithRay(event.frame.session, targetRay, referenceSpace);\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 if (this.options.testOnPointerDownOnly) {\r\n this._xrSessionManager.session.addEventListener(\"select\", this._onSelect, false);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * detach 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 detach(): boolean {\r\n if (!super.detach()) {\r\n return false;\r\n }\r\n // disable select\r\n this._onSelectEnabled = false;\r\n this._xrSessionManager.session.removeEventListener(\"select\", this._onSelect);\r\n return true;\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 this.onHitTestResultObservable.clear();\r\n }\r\n\r\n protected _onXRFrame(frame: XRFrame) {\r\n // make sure we do nothing if (async) not attached\r\n if (!this.attached || this.options.testOnPointerDownOnly) {\r\n return;\r\n }\r\n const pose = frame.getViewerPose(this._xrSessionManager.referenceSpace);\r\n if (!pose) {\r\n return;\r\n }\r\n Matrix.FromArrayToRef(pose.transform.matrix, 0, this._mat);\r\n Vector3.TransformCoordinatesFromFloatsToRef(0, 0, 0, this._mat, this._origin);\r\n Vector3.TransformCoordinatesFromFloatsToRef(0, 0, -1, this._mat, this._direction);\r\n this._direction.subtractInPlace(this._origin);\r\n this._direction.normalize();\r\n const ray = new XRRay(\r\n <DOMPointReadOnly>{ x: this._origin.x, y: this._origin.y, z: this._origin.z, w: 0 },\r\n <DOMPointReadOnly>{ x: this._direction.x, y: this._direction.y, z: this._direction.z, w: 0 }\r\n );\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises, github/no-then\r\n WebXRHitTestLegacy.XRHitTestWithRay(this._xrSessionManager.session, ray, this._xrSessionManager.referenceSpace).then(this._onHitTestResults);\r\n }\r\n\r\n private _onHitTestResults = (xrResults: XRHitResult[]) => {\r\n const mats = xrResults.map((result) => {\r\n const mat = Matrix.FromArray(result.hitMatrix);\r\n if (!this._xrSessionManager.scene.useRightHandedSystem) {\r\n mat.toggleModelMatrixHandInPlace();\r\n }\r\n // if (this.options.coordinatesSpace === Space.WORLD) {\r\n if (this.options.worldParentNode) {\r\n mat.multiplyToRef(this.options.worldParentNode.getWorldMatrix(), mat);\r\n }\r\n return {\r\n xrHitResult: result,\r\n transformationMatrix: mat,\r\n };\r\n });\r\n\r\n this.lastNativeXRHitResults = xrResults;\r\n this.onHitTestResultObservable.notifyObservers(mats);\r\n };\r\n\r\n // can be done using pointerdown event, and xrSessionManager.currentFrame\r\n private _onSelect = (event: XRInputSourceEvent) => {\r\n if (!this._onSelectEnabled) {\r\n return;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n WebXRHitTestLegacy.XRHitTestWithSelectEvent(event, this._xrSessionManager.referenceSpace);\r\n };\r\n}\r\n\r\n//register the plugin versions\r\nWebXRFeaturesManager.AddWebXRFeature(\r\n WebXRHitTestLegacy.Name,\r\n (xrSessionManager, options) => {\r\n return () => new WebXRHitTestLegacy(xrSessionManager, options);\r\n },\r\n WebXRHitTestLegacy.Version,\r\n false\r\n);\r\n"]}
|
|
@@ -2,8 +2,8 @@ import { WebXRControllerComponent } from "./webXRControllerComponent.js";
|
|
|
2
2
|
import { Observable } from "../../Misc/observable.js";
|
|
3
3
|
import { Logger } from "../../Misc/logger.js";
|
|
4
4
|
import { SceneLoader } from "../../Loading/sceneLoader.js";
|
|
5
|
-
import { Quaternion, Vector3 } from "../../Maths/math.vector.js";
|
|
6
|
-
import { Mesh } from "../../Meshes/mesh.js";
|
|
5
|
+
import { Quaternion, Vector3 } from "../../Maths/math.vector.pure.js";
|
|
6
|
+
import { Mesh } from "../../Meshes/mesh.pure.js";
|
|
7
7
|
/**
|
|
8
8
|
* An Abstract Motion controller
|
|
9
9
|
* This class receives an xrInput and a profile layout and uses those to initialize the components
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webXRAbstractMotionController.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/webXRAbstractMotionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAyNzC;;;;GAIG;AACH,MAAM,OAAgB,6BAA6B;IA4C/C;;;;;;;;OAQG;IACH;IACI,gEAAgE;IACtD,KAAY;IACtB,gEAAgE;IACtD,MAA+B;IACzC;;OAEG;IACI,aAA6C;IACpD;;OAEG;IACI,UAAsC;IAC7C;;;OAGG;IACI,2BAAoC,KAAK,EACxC,gBAIN;QApBQ,UAAK,GAAL,KAAK,CAAO;QAEZ,WAAM,GAAN,MAAM,CAAyB;QAIlC,kBAAa,GAAb,aAAa,CAAgC;QAI7C,eAAU,GAAV,UAAU,CAA4B;QAKtC,6BAAwB,GAAxB,wBAAwB,CAAiB;QACxC,qBAAgB,GAAhB,gBAAgB,CAItB;QA1EE,mBAAc,GAAG,CAAC,EAAU,EAAE,EAAE;YACpC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACN,OAAO;YACX,CAAC;YACD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC;YAC/B,MAAM,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC;YACvD,kBAAkB;YAClB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,YAAY,CAAC,cAAc,CAAC,KAAK,KAAK,SAAS,IAAI,YAAY,CAAC,cAAc,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACrG,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACpF,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,wBAAwB,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACpF,CAAC,CAAC;QAEM,gBAAW,GAAY,KAAK,CAAC;QAErC;;;WAGG;QACa,eAAU,GAEtB,EAAE,CAAC;QAEP;;WAEG;QACI,qBAAgB,GAAY,KAAK,CAAC;QACzC;;WAEG;QACI,4BAAuB,GAA8C,IAAI,UAAU,EAAE,CAAC;QA2CzF,4BAA4B;QAC5B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;gBACrB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QACD,gCAAgC;IACpC,CAAC;IAED;;OAEG;IACI,OAAO;QACV,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YACzD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,sBAAsB,CAAC,IAAmC;QAC7D,OAAO,IAAI,CAAC,eAAe,EAAE;aACxB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;aAChC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACI,eAAe;QAClB,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,IAAmC;QACzD,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACxD,CAAC;IAED;;;OAGG;IACI,gBAAgB;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,gEAAgE;IACzD,KAAK,CAAC,SAAS;QAClB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACvD,IAAI,aAAa,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACtD,oCAAoC;QACpC,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,MAAM,YAAY,GAAG,CAAC,MAAsB,EAAE,EAAE;gBAC5C,IAAI,UAAU,EAAE,CAAC;oBACb,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,2BAA2B;gBAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC7C,OAAO,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,CAAC;gBAClF,CAAC,CAAC,CAAC;gBACH,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACX,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;wBACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBAC1B,CAAC;oBACD,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC9B,OAAO;oBACP,gCAAgC;gBACpC,CAAC;YACL,CAAC;YACD,WAAW,CAAC,UAAU,CAClB,EAAE,EACF,aAAa,CAAC,IAAI,EAClB,aAAa,CAAC,QAAQ,EACtB,IAAI,CAAC,KAAK,EACV,CAAC,MAAM,EAAE,EAAE;gBACP,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;wBACvB,GAAG,aAAa;wBAChB,MAAM;qBACT,CAAC,CAAC;gBACP,CAAC;gBACD,YAAY,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC,EACD,IAAI,EACJ,CAAC,MAAa,EAAE,OAAe,EAAE,EAAE;gBAC/B,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,CAAC,+CAA+C,IAAI,CAAC,SAAS,4BAA4B,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACpJ,2EAA2E;gBAC3E,MAAM,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,OAAgB;QACrC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrD,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;;;;;;;;OASG;IACH,gEAAgE;IACzD,KAAK,CAAC,KAAK,CAAC,KAAa,EAAE,QAAgB,EAAE,sBAA8B,CAAC;QAC/E,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAChG,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAChG,CAAC;aAAM,CAAC;YACJ,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED,sGAAsG;IAC5F,eAAe,CAAC,IAAkB,EAAE,IAAY;QACtD,OAAiC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,qGAAqG;IAC3F,wBAAwB,CAAC,IAAkB,EAAE,IAAY;QAC/D,OAAiC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED;;;;;OAKG;IACO,cAAc,CAAC,OAAiC,EAAE,SAAiB,EAAE,mBAA6B;QACxG,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC7D,OAAO;QACX,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACtH,OAAO;QACX,CAAC;QAED,qEAAqE;QACrE,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1E,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC/I,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACjH,CAAC;IAED;;;OAGG;IACH,gEAAgE;IACtD,WAAW,CAAC,OAAgB;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IA+BO,0BAA0B;QAC9B,OAAO;YACH,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,4CAA4C;SACrD,CAAC;IACN,CAAC;IAEO,qBAAqB,CAAC,MAAsB;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7E,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACf,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;CACJ","sourcesContent":["import { type IDisposable, type Scene } from \"../../scene\";\r\nimport { WebXRControllerComponent } from \"./webXRControllerComponent\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { SceneLoader } from \"../../Loading/sceneLoader\";\r\nimport { type AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { Quaternion, Vector3 } from \"../../Maths/math.vector\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\n\r\n/**\r\n * Handedness type in xrInput profiles. These can be used to define layouts in the Layout Map.\r\n */\r\nexport type MotionControllerHandedness = \"none\" | \"left\" | \"right\";\r\n/**\r\n * The type of components available in motion controllers.\r\n * This is not the name of the component.\r\n */\r\nexport type MotionControllerComponentType = \"trigger\" | \"squeeze\" | \"touchpad\" | \"thumbstick\" | \"button\";\r\n\r\n/**\r\n * The state of a controller component\r\n */\r\nexport type MotionControllerComponentStateType = \"default\" | \"touched\" | \"pressed\";\r\n\r\n/**\r\n * The schema of motion controller layout.\r\n * No object will be initialized using this interface\r\n * This is used just to define the profile.\r\n */\r\nexport interface IMotionControllerLayout {\r\n /**\r\n * Path to load the assets. Usually relative to the base path\r\n */\r\n assetPath: string;\r\n /**\r\n * Available components (unsorted)\r\n */\r\n components: {\r\n /**\r\n * A map of component Ids\r\n */\r\n [componentId: string]: {\r\n /**\r\n * The type of input the component outputs\r\n */\r\n type: MotionControllerComponentType;\r\n /**\r\n * The indices of this component in the gamepad object\r\n */\r\n gamepadIndices: {\r\n /**\r\n * Index of button\r\n */\r\n button?: number;\r\n /**\r\n * If available, index of x-axis\r\n */\r\n xAxis?: number;\r\n /**\r\n * If available, index of y-axis\r\n */\r\n yAxis?: number;\r\n };\r\n /**\r\n * The mesh's root node name\r\n */\r\n rootNodeName: string;\r\n /**\r\n * Animation definitions for this model\r\n */\r\n visualResponses: {\r\n [stateKey: string]: {\r\n /**\r\n * What property will be animated\r\n */\r\n componentProperty: \"xAxis\" | \"yAxis\" | \"button\" | \"state\";\r\n /**\r\n * What states influence this visual response\r\n */\r\n states: MotionControllerComponentStateType[];\r\n /**\r\n * Type of animation - movement or visibility\r\n */\r\n valueNodeProperty: \"transform\" | \"visibility\";\r\n /**\r\n * Base node name to move. Its position will be calculated according to the min and max nodes\r\n */\r\n valueNodeName?: string;\r\n /**\r\n * Minimum movement node\r\n */\r\n minNodeName?: string;\r\n /**\r\n * Max movement node\r\n */\r\n maxNodeName?: string;\r\n };\r\n };\r\n /**\r\n * If touch enabled, what is the name of node to display user feedback\r\n */\r\n touchPointNodeName?: string;\r\n };\r\n };\r\n /**\r\n * Is it xr standard mapping or not\r\n */\r\n gamepadMapping: \"\" | \"xr-standard\";\r\n /**\r\n * Base root node of this entire model\r\n */\r\n rootNodeName: string;\r\n /**\r\n * Defines the main button component id\r\n */\r\n selectComponentId: string;\r\n}\r\n\r\n/**\r\n * A definition for the layout map in the input profile\r\n */\r\nexport interface IMotionControllerLayoutMap {\r\n /**\r\n * Layouts with handedness type as a key\r\n */\r\n [handedness: string /* handedness */]: IMotionControllerLayout;\r\n}\r\n\r\n/**\r\n * The XR Input profile schema\r\n * Profiles can be found here:\r\n * https://github.com/immersive-web/webxr-input-profiles/tree/master/packages/registry/profiles\r\n */\r\nexport interface IMotionControllerProfile {\r\n /**\r\n * fallback profiles for this profileId\r\n */\r\n fallbackProfileIds: string[];\r\n /**\r\n * The layout map, with handedness as key\r\n */\r\n layouts: IMotionControllerLayoutMap;\r\n /**\r\n * The id of this profile\r\n * correlates to the profile(s) in the xrInput.profiles array\r\n */\r\n profileId: string;\r\n}\r\n\r\n/**\r\n * A helper-interface for the 3 meshes needed for controller button animation\r\n * The meshes are provided to the _lerpButtonTransform function to calculate the current position of the value mesh\r\n */\r\nexport interface IMotionControllerButtonMeshMap {\r\n /**\r\n * the mesh that defines the pressed value mesh position.\r\n * This is used to find the max-position of this button\r\n */\r\n pressedMesh: AbstractMesh;\r\n /**\r\n * the mesh that defines the unpressed value mesh position.\r\n * This is used to find the min (or initial) position of this button\r\n */\r\n unpressedMesh: AbstractMesh;\r\n /**\r\n * The mesh that will be changed when value changes\r\n */\r\n valueMesh: AbstractMesh;\r\n}\r\n\r\n/**\r\n * A helper-interface for the 3 meshes needed for controller axis animation.\r\n * This will be expanded when touchpad animations are fully supported\r\n * The meshes are provided to the _lerpAxisTransform function to calculate the current position of the value mesh\r\n */\r\nexport interface IMotionControllerMeshMap {\r\n /**\r\n * the mesh that defines the maximum value mesh position.\r\n */\r\n maxMesh?: AbstractMesh;\r\n /**\r\n * the mesh that defines the minimum value mesh position.\r\n */\r\n minMesh?: AbstractMesh;\r\n /**\r\n * The mesh that will be changed when axis value changes\r\n */\r\n valueMesh?: AbstractMesh;\r\n}\r\n\r\n/**\r\n * The elements needed for change-detection of the gamepad objects in motion controllers\r\n */\r\nexport interface IMinimalMotionControllerObject {\r\n /**\r\n * Available axes of this controller\r\n */\r\n axes: number[];\r\n /**\r\n * An array of available buttons\r\n */\r\n buttons: Array<{\r\n /**\r\n * Value of the button/trigger\r\n */\r\n value: number;\r\n /**\r\n * If the button/trigger is currently touched\r\n */\r\n touched: boolean;\r\n /**\r\n * If the button/trigger is currently pressed\r\n */\r\n pressed: boolean;\r\n }>;\r\n\r\n /**\r\n * EXPERIMENTAL haptic support.\r\n */\r\n hapticActuators?: Array<{\r\n pulse: (value: number, duration: number) => Promise<boolean>;\r\n }>;\r\n}\r\n\r\n/**\r\n * An Abstract Motion controller\r\n * This class receives an xrInput and a profile layout and uses those to initialize the components\r\n * Each component has an observable to check for changes in value and state\r\n */\r\nexport abstract class WebXRAbstractMotionController implements IDisposable {\r\n private _initComponent = (id: string) => {\r\n if (!id) {\r\n return;\r\n }\r\n const componentDef = this.layout.components[id];\r\n const type = componentDef.type;\r\n const buttonIndex = componentDef.gamepadIndices.button;\r\n // search for axes\r\n const axes: number[] = [];\r\n if (componentDef.gamepadIndices.xAxis !== undefined && componentDef.gamepadIndices.yAxis !== undefined) {\r\n axes.push(componentDef.gamepadIndices.xAxis, componentDef.gamepadIndices.yAxis);\r\n }\r\n\r\n this.components[id] = new WebXRControllerComponent(id, type, buttonIndex, axes);\r\n };\r\n\r\n private _modelReady: boolean = false;\r\n\r\n /**\r\n * A map of components (WebXRControllerComponent) in this motion controller\r\n * Components have a ComponentType and can also have both button and axis definitions\r\n */\r\n public readonly components: {\r\n [id: string]: WebXRControllerComponent;\r\n } = {};\r\n\r\n /**\r\n * Disable the model's animation. Can be set at any time.\r\n */\r\n public disableAnimation: boolean = false;\r\n /**\r\n * Observers registered here will be triggered when the model of this controller is done loading\r\n */\r\n public onModelLoadedObservable: Observable<WebXRAbstractMotionController> = new Observable();\r\n /**\r\n * The profile id of this motion controller\r\n */\r\n public abstract profileId: string;\r\n /**\r\n * The root mesh of the model. It is null if the model was not yet initialized\r\n */\r\n public rootMesh: Nullable<AbstractMesh>;\r\n\r\n /**\r\n * constructs a new abstract motion controller\r\n * @param scene the scene to which the model of the controller will be added\r\n * @param layout The profile layout to load\r\n * @param gamepadObject The gamepad object correlating to this controller\r\n * @param handedness handedness (left/right/none) of this controller\r\n * @param _doNotLoadControllerMesh set this flag to ignore the mesh loading\r\n * @param _controllerCache a cache holding controller models already loaded in this session\r\n */\r\n constructor(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected scene: Scene,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected layout: IMotionControllerLayout,\r\n /**\r\n * The gamepad object correlating to this controller\r\n */\r\n public gamepadObject: IMinimalMotionControllerObject,\r\n /**\r\n * handedness (left/right/none) of this controller\r\n */\r\n public handedness: MotionControllerHandedness,\r\n /**\r\n * @internal\r\n * [false]\r\n */\r\n public _doNotLoadControllerMesh: boolean = false,\r\n private _controllerCache?: Array<{\r\n filename: string;\r\n path: string;\r\n meshes: AbstractMesh[];\r\n }>\r\n ) {\r\n // initialize the components\r\n if (layout.components) {\r\n const keys = Object.keys(layout.components);\r\n for (const key of keys) {\r\n this._initComponent(key);\r\n }\r\n }\r\n // Model is loaded in WebXRInput\r\n }\r\n\r\n /**\r\n * Dispose this controller, the model mesh and all its components\r\n */\r\n public dispose(): void {\r\n const ids = this.getComponentIds();\r\n for (const id of ids) {\r\n this.getComponent(id).dispose();\r\n }\r\n if (this.rootMesh) {\r\n const nodes = this.rootMesh.getChildren(undefined, true);\r\n for (const node of nodes) {\r\n node.setEnabled(false);\r\n }\r\n this.rootMesh.dispose(!!this._controllerCache, !this._controllerCache);\r\n }\r\n this.onModelLoadedObservable.clear();\r\n }\r\n\r\n /**\r\n * Returns all components of specific type\r\n * @param type the type to search for\r\n * @returns an array of components with this type\r\n */\r\n public getAllComponentsOfType(type: MotionControllerComponentType): WebXRControllerComponent[] {\r\n return this.getComponentIds()\r\n .map((id) => this.components[id])\r\n .filter((component) => component.type === type);\r\n }\r\n\r\n /**\r\n * get a component based an its component id as defined in layout.components\r\n * @param id the id of the component\r\n * @returns the component correlates to the id or undefined if not found\r\n */\r\n public getComponent(id: string): WebXRControllerComponent {\r\n return this.components[id];\r\n }\r\n\r\n /**\r\n * Get the list of components available in this motion controller\r\n * @returns an array of strings correlating to available components\r\n */\r\n public getComponentIds(): string[] {\r\n return Object.keys(this.components);\r\n }\r\n\r\n /**\r\n * Get the first component of specific type\r\n * @param type type of component to find\r\n * @returns a controller component or null if not found\r\n */\r\n public getComponentOfType(type: MotionControllerComponentType): Nullable<WebXRControllerComponent> {\r\n return this.getAllComponentsOfType(type)[0] || null;\r\n }\r\n\r\n /**\r\n * Get the main (Select) component of this controller as defined in the layout\r\n * @returns the main component of this controller\r\n */\r\n public getMainComponent(): WebXRControllerComponent {\r\n return this.getComponent(this.layout.selectComponentId);\r\n }\r\n\r\n /**\r\n * Loads the model correlating to this controller\r\n * When the mesh is loaded, the onModelLoadedObservable will be triggered\r\n * @returns A promise fulfilled with the result of the model loading\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async loadModel(): Promise<boolean> {\r\n const useGeneric = !this._getModelLoadingConstraints();\r\n let loadingParams = this._getGenericFilenameAndPath();\r\n // Checking if GLB loader is present\r\n if (useGeneric) {\r\n Logger.Warn(\"Falling back to generic models\");\r\n } else {\r\n loadingParams = this._getFilenameAndPath();\r\n }\r\n return await new Promise((resolve, reject) => {\r\n const meshesLoaded = (meshes: AbstractMesh[]) => {\r\n if (useGeneric) {\r\n this._getGenericParentMesh(meshes);\r\n } else {\r\n this._setRootMesh(meshes);\r\n }\r\n this._processLoadedModel(meshes);\r\n this._modelReady = true;\r\n this.onModelLoadedObservable.notifyObservers(this);\r\n resolve(true);\r\n };\r\n if (this._controllerCache) {\r\n // look for it in the cache\r\n const found = this._controllerCache.filter((c) => {\r\n return c.filename === loadingParams.filename && c.path === loadingParams.path;\r\n });\r\n if (found[0]) {\r\n for (const mesh of found[0].meshes) {\r\n mesh.setEnabled(true);\r\n }\r\n meshesLoaded(found[0].meshes);\r\n return;\r\n // found, don't continue to load\r\n }\r\n }\r\n SceneLoader.ImportMesh(\r\n \"\",\r\n loadingParams.path,\r\n loadingParams.filename,\r\n this.scene,\r\n (meshes) => {\r\n if (this._controllerCache) {\r\n this._controllerCache.push({\r\n ...loadingParams,\r\n meshes,\r\n });\r\n }\r\n meshesLoaded(meshes);\r\n },\r\n null,\r\n (_scene: Scene, message: string) => {\r\n Logger.Log(message);\r\n Logger.Warn(`Failed to retrieve controller model of type ${this.profileId} from the remote server: ${loadingParams.path}${loadingParams.filename}`);\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(message);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Update this model using the current XRFrame\r\n * @param xrFrame the current xr frame to use and update the model\r\n */\r\n public updateFromXRFrame(xrFrame: XRFrame): void {\r\n for (const id of this.getComponentIds()) {\r\n this.getComponent(id).update(this.gamepadObject);\r\n }\r\n this.updateModel(xrFrame);\r\n }\r\n\r\n /**\r\n * Backwards compatibility due to a deeply-integrated typo\r\n */\r\n public get handness() {\r\n return this.handedness;\r\n }\r\n\r\n /**\r\n * Pulse (vibrate) this controller\r\n * If the controller does not support pulses, this function will fail silently and return Promise<false> directly after called\r\n * Consecutive calls to this function will cancel the last pulse call\r\n *\r\n * @param value the strength of the pulse in 0.0...1.0 range\r\n * @param duration Duration of the pulse in milliseconds\r\n * @param hapticActuatorIndex optional index of actuator (will usually be 0)\r\n * @returns a promise that will send true when the pulse has ended and false if the device doesn't support pulse or an error accrued\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async pulse(value: number, duration: number, hapticActuatorIndex: number = 0): Promise<boolean> {\r\n if (this.gamepadObject.hapticActuators && this.gamepadObject.hapticActuators[hapticActuatorIndex]) {\r\n return await this.gamepadObject.hapticActuators[hapticActuatorIndex].pulse(value, duration);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // Look through all children recursively. This will return null if no mesh exists with the given name.\r\n protected _getChildByName(node: AbstractMesh, name: string): AbstractMesh | undefined {\r\n return <AbstractMesh | undefined>node.getChildren((n) => n.name === name, false)[0];\r\n }\r\n\r\n // Look through only immediate children. This will return null if no mesh exists with the given name.\r\n protected _getImmediateChildByName(node: AbstractMesh, name: string): AbstractMesh | undefined {\r\n return <AbstractMesh | undefined>node.getChildren((n) => n.name == name, true)[0];\r\n }\r\n\r\n /**\r\n * Moves the axis on the controller mesh based on its current state\r\n * @param axisMap\r\n * @param axisValue the value of the axis which determines the meshes new position\r\n * @internal\r\n */\r\n protected _lerpTransform(axisMap: IMotionControllerMeshMap, axisValue: number, fixValueCoordinates?: boolean): void {\r\n if (!axisMap.minMesh || !axisMap.maxMesh || !axisMap.valueMesh) {\r\n return;\r\n }\r\n\r\n if (!axisMap.minMesh.rotationQuaternion || !axisMap.maxMesh.rotationQuaternion || !axisMap.valueMesh.rotationQuaternion) {\r\n return;\r\n }\r\n\r\n // Convert from gamepad value range (-1 to +1) to lerp range (0 to 1)\r\n const lerpValue = fixValueCoordinates ? axisValue * 0.5 + 0.5 : axisValue;\r\n Quaternion.SlerpToRef(axisMap.minMesh.rotationQuaternion, axisMap.maxMesh.rotationQuaternion, lerpValue, axisMap.valueMesh.rotationQuaternion);\r\n Vector3.LerpToRef(axisMap.minMesh.position, axisMap.maxMesh.position, lerpValue, axisMap.valueMesh.position);\r\n }\r\n\r\n /**\r\n * Update the model itself with the current frame data\r\n * @param xrFrame the frame to use for updating the model mesh\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected updateModel(xrFrame: XRFrame): void {\r\n if (!this._modelReady) {\r\n return;\r\n }\r\n this._updateModel(xrFrame);\r\n }\r\n\r\n /**\r\n * Get the filename and path for this controller's model\r\n * @returns a map of filename and path\r\n */\r\n protected abstract _getFilenameAndPath(): { filename: string; path: string };\r\n /**\r\n * This function is called before the mesh is loaded. It checks for loading constraints.\r\n * For example, this function can check if the GLB loader is available\r\n * If this function returns false, the generic controller will be loaded instead\r\n * @returns Is the client ready to load the mesh\r\n */\r\n protected abstract _getModelLoadingConstraints(): boolean;\r\n /**\r\n * This function will be called after the model was successfully loaded and can be used\r\n * for mesh transformations before it is available for the user\r\n * @param meshes the loaded meshes\r\n */\r\n protected abstract _processLoadedModel(meshes: AbstractMesh[]): void;\r\n /**\r\n * Set the root mesh for this controller. Important for the WebXR controller class\r\n * @param meshes the loaded meshes\r\n */\r\n protected abstract _setRootMesh(meshes: AbstractMesh[]): void;\r\n /**\r\n * A function executed each frame that updates the mesh (if needed)\r\n * @param xrFrame the current xrFrame\r\n */\r\n protected abstract _updateModel(xrFrame: XRFrame): void;\r\n\r\n private _getGenericFilenameAndPath(): { filename: string; path: string } {\r\n return {\r\n filename: \"generic.babylon\",\r\n path: \"https://controllers.babylonjs.com/generic/\",\r\n };\r\n }\r\n\r\n private _getGenericParentMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n for (const mesh of meshes) {\r\n if (!mesh.parent) {\r\n mesh.isPickable = false;\r\n mesh.setParent(this.rootMesh);\r\n }\r\n }\r\n\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webXRAbstractMotionController.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/webXRAbstractMotionController.ts"],"names":[],"mappings":"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","sourcesContent":["import { type IDisposable, type Scene } from \"../../scene\";\r\nimport { WebXRControllerComponent } from \"./webXRControllerComponent\";\r\nimport { Observable } from \"../../Misc/observable\";\r\nimport { Logger } from \"../../Misc/logger\";\r\nimport { SceneLoader } from \"../../Loading/sceneLoader\";\r\nimport { type AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { type Nullable } from \"../../types\";\r\nimport { Quaternion, Vector3 } from \"../../Maths/math.vector.pure\";\r\nimport { Mesh } from \"../../Meshes/mesh.pure\";\r\n\r\n/**\r\n * Handedness type in xrInput profiles. These can be used to define layouts in the Layout Map.\r\n */\r\nexport type MotionControllerHandedness = \"none\" | \"left\" | \"right\";\r\n/**\r\n * The type of components available in motion controllers.\r\n * This is not the name of the component.\r\n */\r\nexport type MotionControllerComponentType = \"trigger\" | \"squeeze\" | \"touchpad\" | \"thumbstick\" | \"button\";\r\n\r\n/**\r\n * The state of a controller component\r\n */\r\nexport type MotionControllerComponentStateType = \"default\" | \"touched\" | \"pressed\";\r\n\r\n/**\r\n * The schema of motion controller layout.\r\n * No object will be initialized using this interface\r\n * This is used just to define the profile.\r\n */\r\nexport interface IMotionControllerLayout {\r\n /**\r\n * Path to load the assets. Usually relative to the base path\r\n */\r\n assetPath: string;\r\n /**\r\n * Available components (unsorted)\r\n */\r\n components: {\r\n /**\r\n * A map of component Ids\r\n */\r\n [componentId: string]: {\r\n /**\r\n * The type of input the component outputs\r\n */\r\n type: MotionControllerComponentType;\r\n /**\r\n * The indices of this component in the gamepad object\r\n */\r\n gamepadIndices: {\r\n /**\r\n * Index of button\r\n */\r\n button?: number;\r\n /**\r\n * If available, index of x-axis\r\n */\r\n xAxis?: number;\r\n /**\r\n * If available, index of y-axis\r\n */\r\n yAxis?: number;\r\n };\r\n /**\r\n * The mesh's root node name\r\n */\r\n rootNodeName: string;\r\n /**\r\n * Animation definitions for this model\r\n */\r\n visualResponses: {\r\n [stateKey: string]: {\r\n /**\r\n * What property will be animated\r\n */\r\n componentProperty: \"xAxis\" | \"yAxis\" | \"button\" | \"state\";\r\n /**\r\n * What states influence this visual response\r\n */\r\n states: MotionControllerComponentStateType[];\r\n /**\r\n * Type of animation - movement or visibility\r\n */\r\n valueNodeProperty: \"transform\" | \"visibility\";\r\n /**\r\n * Base node name to move. Its position will be calculated according to the min and max nodes\r\n */\r\n valueNodeName?: string;\r\n /**\r\n * Minimum movement node\r\n */\r\n minNodeName?: string;\r\n /**\r\n * Max movement node\r\n */\r\n maxNodeName?: string;\r\n };\r\n };\r\n /**\r\n * If touch enabled, what is the name of node to display user feedback\r\n */\r\n touchPointNodeName?: string;\r\n };\r\n };\r\n /**\r\n * Is it xr standard mapping or not\r\n */\r\n gamepadMapping: \"\" | \"xr-standard\";\r\n /**\r\n * Base root node of this entire model\r\n */\r\n rootNodeName: string;\r\n /**\r\n * Defines the main button component id\r\n */\r\n selectComponentId: string;\r\n}\r\n\r\n/**\r\n * A definition for the layout map in the input profile\r\n */\r\nexport interface IMotionControllerLayoutMap {\r\n /**\r\n * Layouts with handedness type as a key\r\n */\r\n [handedness: string /* handedness */]: IMotionControllerLayout;\r\n}\r\n\r\n/**\r\n * The XR Input profile schema\r\n * Profiles can be found here:\r\n * https://github.com/immersive-web/webxr-input-profiles/tree/master/packages/registry/profiles\r\n */\r\nexport interface IMotionControllerProfile {\r\n /**\r\n * fallback profiles for this profileId\r\n */\r\n fallbackProfileIds: string[];\r\n /**\r\n * The layout map, with handedness as key\r\n */\r\n layouts: IMotionControllerLayoutMap;\r\n /**\r\n * The id of this profile\r\n * correlates to the profile(s) in the xrInput.profiles array\r\n */\r\n profileId: string;\r\n}\r\n\r\n/**\r\n * A helper-interface for the 3 meshes needed for controller button animation\r\n * The meshes are provided to the _lerpButtonTransform function to calculate the current position of the value mesh\r\n */\r\nexport interface IMotionControllerButtonMeshMap {\r\n /**\r\n * the mesh that defines the pressed value mesh position.\r\n * This is used to find the max-position of this button\r\n */\r\n pressedMesh: AbstractMesh;\r\n /**\r\n * the mesh that defines the unpressed value mesh position.\r\n * This is used to find the min (or initial) position of this button\r\n */\r\n unpressedMesh: AbstractMesh;\r\n /**\r\n * The mesh that will be changed when value changes\r\n */\r\n valueMesh: AbstractMesh;\r\n}\r\n\r\n/**\r\n * A helper-interface for the 3 meshes needed for controller axis animation.\r\n * This will be expanded when touchpad animations are fully supported\r\n * The meshes are provided to the _lerpAxisTransform function to calculate the current position of the value mesh\r\n */\r\nexport interface IMotionControllerMeshMap {\r\n /**\r\n * the mesh that defines the maximum value mesh position.\r\n */\r\n maxMesh?: AbstractMesh;\r\n /**\r\n * the mesh that defines the minimum value mesh position.\r\n */\r\n minMesh?: AbstractMesh;\r\n /**\r\n * The mesh that will be changed when axis value changes\r\n */\r\n valueMesh?: AbstractMesh;\r\n}\r\n\r\n/**\r\n * The elements needed for change-detection of the gamepad objects in motion controllers\r\n */\r\nexport interface IMinimalMotionControllerObject {\r\n /**\r\n * Available axes of this controller\r\n */\r\n axes: number[];\r\n /**\r\n * An array of available buttons\r\n */\r\n buttons: Array<{\r\n /**\r\n * Value of the button/trigger\r\n */\r\n value: number;\r\n /**\r\n * If the button/trigger is currently touched\r\n */\r\n touched: boolean;\r\n /**\r\n * If the button/trigger is currently pressed\r\n */\r\n pressed: boolean;\r\n }>;\r\n\r\n /**\r\n * EXPERIMENTAL haptic support.\r\n */\r\n hapticActuators?: Array<{\r\n pulse: (value: number, duration: number) => Promise<boolean>;\r\n }>;\r\n}\r\n\r\n/**\r\n * An Abstract Motion controller\r\n * This class receives an xrInput and a profile layout and uses those to initialize the components\r\n * Each component has an observable to check for changes in value and state\r\n */\r\nexport abstract class WebXRAbstractMotionController implements IDisposable {\r\n private _initComponent = (id: string) => {\r\n if (!id) {\r\n return;\r\n }\r\n const componentDef = this.layout.components[id];\r\n const type = componentDef.type;\r\n const buttonIndex = componentDef.gamepadIndices.button;\r\n // search for axes\r\n const axes: number[] = [];\r\n if (componentDef.gamepadIndices.xAxis !== undefined && componentDef.gamepadIndices.yAxis !== undefined) {\r\n axes.push(componentDef.gamepadIndices.xAxis, componentDef.gamepadIndices.yAxis);\r\n }\r\n\r\n this.components[id] = new WebXRControllerComponent(id, type, buttonIndex, axes);\r\n };\r\n\r\n private _modelReady: boolean = false;\r\n\r\n /**\r\n * A map of components (WebXRControllerComponent) in this motion controller\r\n * Components have a ComponentType and can also have both button and axis definitions\r\n */\r\n public readonly components: {\r\n [id: string]: WebXRControllerComponent;\r\n } = {};\r\n\r\n /**\r\n * Disable the model's animation. Can be set at any time.\r\n */\r\n public disableAnimation: boolean = false;\r\n /**\r\n * Observers registered here will be triggered when the model of this controller is done loading\r\n */\r\n public onModelLoadedObservable: Observable<WebXRAbstractMotionController> = new Observable();\r\n /**\r\n * The profile id of this motion controller\r\n */\r\n public abstract profileId: string;\r\n /**\r\n * The root mesh of the model. It is null if the model was not yet initialized\r\n */\r\n public rootMesh: Nullable<AbstractMesh>;\r\n\r\n /**\r\n * constructs a new abstract motion controller\r\n * @param scene the scene to which the model of the controller will be added\r\n * @param layout The profile layout to load\r\n * @param gamepadObject The gamepad object correlating to this controller\r\n * @param handedness handedness (left/right/none) of this controller\r\n * @param _doNotLoadControllerMesh set this flag to ignore the mesh loading\r\n * @param _controllerCache a cache holding controller models already loaded in this session\r\n */\r\n constructor(\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected scene: Scene,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected layout: IMotionControllerLayout,\r\n /**\r\n * The gamepad object correlating to this controller\r\n */\r\n public gamepadObject: IMinimalMotionControllerObject,\r\n /**\r\n * handedness (left/right/none) of this controller\r\n */\r\n public handedness: MotionControllerHandedness,\r\n /**\r\n * @internal\r\n * [false]\r\n */\r\n public _doNotLoadControllerMesh: boolean = false,\r\n private _controllerCache?: Array<{\r\n filename: string;\r\n path: string;\r\n meshes: AbstractMesh[];\r\n }>\r\n ) {\r\n // initialize the components\r\n if (layout.components) {\r\n const keys = Object.keys(layout.components);\r\n for (const key of keys) {\r\n this._initComponent(key);\r\n }\r\n }\r\n // Model is loaded in WebXRInput\r\n }\r\n\r\n /**\r\n * Dispose this controller, the model mesh and all its components\r\n */\r\n public dispose(): void {\r\n const ids = this.getComponentIds();\r\n for (const id of ids) {\r\n this.getComponent(id).dispose();\r\n }\r\n if (this.rootMesh) {\r\n const nodes = this.rootMesh.getChildren(undefined, true);\r\n for (const node of nodes) {\r\n node.setEnabled(false);\r\n }\r\n this.rootMesh.dispose(!!this._controllerCache, !this._controllerCache);\r\n }\r\n this.onModelLoadedObservable.clear();\r\n }\r\n\r\n /**\r\n * Returns all components of specific type\r\n * @param type the type to search for\r\n * @returns an array of components with this type\r\n */\r\n public getAllComponentsOfType(type: MotionControllerComponentType): WebXRControllerComponent[] {\r\n return this.getComponentIds()\r\n .map((id) => this.components[id])\r\n .filter((component) => component.type === type);\r\n }\r\n\r\n /**\r\n * get a component based an its component id as defined in layout.components\r\n * @param id the id of the component\r\n * @returns the component correlates to the id or undefined if not found\r\n */\r\n public getComponent(id: string): WebXRControllerComponent {\r\n return this.components[id];\r\n }\r\n\r\n /**\r\n * Get the list of components available in this motion controller\r\n * @returns an array of strings correlating to available components\r\n */\r\n public getComponentIds(): string[] {\r\n return Object.keys(this.components);\r\n }\r\n\r\n /**\r\n * Get the first component of specific type\r\n * @param type type of component to find\r\n * @returns a controller component or null if not found\r\n */\r\n public getComponentOfType(type: MotionControllerComponentType): Nullable<WebXRControllerComponent> {\r\n return this.getAllComponentsOfType(type)[0] || null;\r\n }\r\n\r\n /**\r\n * Get the main (Select) component of this controller as defined in the layout\r\n * @returns the main component of this controller\r\n */\r\n public getMainComponent(): WebXRControllerComponent {\r\n return this.getComponent(this.layout.selectComponentId);\r\n }\r\n\r\n /**\r\n * Loads the model correlating to this controller\r\n * When the mesh is loaded, the onModelLoadedObservable will be triggered\r\n * @returns A promise fulfilled with the result of the model loading\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async loadModel(): Promise<boolean> {\r\n const useGeneric = !this._getModelLoadingConstraints();\r\n let loadingParams = this._getGenericFilenameAndPath();\r\n // Checking if GLB loader is present\r\n if (useGeneric) {\r\n Logger.Warn(\"Falling back to generic models\");\r\n } else {\r\n loadingParams = this._getFilenameAndPath();\r\n }\r\n return await new Promise((resolve, reject) => {\r\n const meshesLoaded = (meshes: AbstractMesh[]) => {\r\n if (useGeneric) {\r\n this._getGenericParentMesh(meshes);\r\n } else {\r\n this._setRootMesh(meshes);\r\n }\r\n this._processLoadedModel(meshes);\r\n this._modelReady = true;\r\n this.onModelLoadedObservable.notifyObservers(this);\r\n resolve(true);\r\n };\r\n if (this._controllerCache) {\r\n // look for it in the cache\r\n const found = this._controllerCache.filter((c) => {\r\n return c.filename === loadingParams.filename && c.path === loadingParams.path;\r\n });\r\n if (found[0]) {\r\n for (const mesh of found[0].meshes) {\r\n mesh.setEnabled(true);\r\n }\r\n meshesLoaded(found[0].meshes);\r\n return;\r\n // found, don't continue to load\r\n }\r\n }\r\n SceneLoader.ImportMesh(\r\n \"\",\r\n loadingParams.path,\r\n loadingParams.filename,\r\n this.scene,\r\n (meshes) => {\r\n if (this._controllerCache) {\r\n this._controllerCache.push({\r\n ...loadingParams,\r\n meshes,\r\n });\r\n }\r\n meshesLoaded(meshes);\r\n },\r\n null,\r\n (_scene: Scene, message: string) => {\r\n Logger.Log(message);\r\n Logger.Warn(`Failed to retrieve controller model of type ${this.profileId} from the remote server: ${loadingParams.path}${loadingParams.filename}`);\r\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\r\n reject(message);\r\n }\r\n );\r\n });\r\n }\r\n\r\n /**\r\n * Update this model using the current XRFrame\r\n * @param xrFrame the current xr frame to use and update the model\r\n */\r\n public updateFromXRFrame(xrFrame: XRFrame): void {\r\n for (const id of this.getComponentIds()) {\r\n this.getComponent(id).update(this.gamepadObject);\r\n }\r\n this.updateModel(xrFrame);\r\n }\r\n\r\n /**\r\n * Backwards compatibility due to a deeply-integrated typo\r\n */\r\n public get handness() {\r\n return this.handedness;\r\n }\r\n\r\n /**\r\n * Pulse (vibrate) this controller\r\n * If the controller does not support pulses, this function will fail silently and return Promise<false> directly after called\r\n * Consecutive calls to this function will cancel the last pulse call\r\n *\r\n * @param value the strength of the pulse in 0.0...1.0 range\r\n * @param duration Duration of the pulse in milliseconds\r\n * @param hapticActuatorIndex optional index of actuator (will usually be 0)\r\n * @returns a promise that will send true when the pulse has ended and false if the device doesn't support pulse or an error accrued\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public async pulse(value: number, duration: number, hapticActuatorIndex: number = 0): Promise<boolean> {\r\n if (this.gamepadObject.hapticActuators && this.gamepadObject.hapticActuators[hapticActuatorIndex]) {\r\n return await this.gamepadObject.hapticActuators[hapticActuatorIndex].pulse(value, duration);\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // Look through all children recursively. This will return null if no mesh exists with the given name.\r\n protected _getChildByName(node: AbstractMesh, name: string): AbstractMesh | undefined {\r\n return <AbstractMesh | undefined>node.getChildren((n) => n.name === name, false)[0];\r\n }\r\n\r\n // Look through only immediate children. This will return null if no mesh exists with the given name.\r\n protected _getImmediateChildByName(node: AbstractMesh, name: string): AbstractMesh | undefined {\r\n return <AbstractMesh | undefined>node.getChildren((n) => n.name == name, true)[0];\r\n }\r\n\r\n /**\r\n * Moves the axis on the controller mesh based on its current state\r\n * @param axisMap\r\n * @param axisValue the value of the axis which determines the meshes new position\r\n * @internal\r\n */\r\n protected _lerpTransform(axisMap: IMotionControllerMeshMap, axisValue: number, fixValueCoordinates?: boolean): void {\r\n if (!axisMap.minMesh || !axisMap.maxMesh || !axisMap.valueMesh) {\r\n return;\r\n }\r\n\r\n if (!axisMap.minMesh.rotationQuaternion || !axisMap.maxMesh.rotationQuaternion || !axisMap.valueMesh.rotationQuaternion) {\r\n return;\r\n }\r\n\r\n // Convert from gamepad value range (-1 to +1) to lerp range (0 to 1)\r\n const lerpValue = fixValueCoordinates ? axisValue * 0.5 + 0.5 : axisValue;\r\n Quaternion.SlerpToRef(axisMap.minMesh.rotationQuaternion, axisMap.maxMesh.rotationQuaternion, lerpValue, axisMap.valueMesh.rotationQuaternion);\r\n Vector3.LerpToRef(axisMap.minMesh.position, axisMap.maxMesh.position, lerpValue, axisMap.valueMesh.position);\r\n }\r\n\r\n /**\r\n * Update the model itself with the current frame data\r\n * @param xrFrame the frame to use for updating the model mesh\r\n */\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n protected updateModel(xrFrame: XRFrame): void {\r\n if (!this._modelReady) {\r\n return;\r\n }\r\n this._updateModel(xrFrame);\r\n }\r\n\r\n /**\r\n * Get the filename and path for this controller's model\r\n * @returns a map of filename and path\r\n */\r\n protected abstract _getFilenameAndPath(): { filename: string; path: string };\r\n /**\r\n * This function is called before the mesh is loaded. It checks for loading constraints.\r\n * For example, this function can check if the GLB loader is available\r\n * If this function returns false, the generic controller will be loaded instead\r\n * @returns Is the client ready to load the mesh\r\n */\r\n protected abstract _getModelLoadingConstraints(): boolean;\r\n /**\r\n * This function will be called after the model was successfully loaded and can be used\r\n * for mesh transformations before it is available for the user\r\n * @param meshes the loaded meshes\r\n */\r\n protected abstract _processLoadedModel(meshes: AbstractMesh[]): void;\r\n /**\r\n * Set the root mesh for this controller. Important for the WebXR controller class\r\n * @param meshes the loaded meshes\r\n */\r\n protected abstract _setRootMesh(meshes: AbstractMesh[]): void;\r\n /**\r\n * A function executed each frame that updates the mesh (if needed)\r\n * @param xrFrame the current xrFrame\r\n */\r\n protected abstract _updateModel(xrFrame: XRFrame): void;\r\n\r\n private _getGenericFilenameAndPath(): { filename: string; path: string } {\r\n return {\r\n filename: \"generic.babylon\",\r\n path: \"https://controllers.babylonjs.com/generic/\",\r\n };\r\n }\r\n\r\n private _getGenericParentMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n for (const mesh of meshes) {\r\n if (!mesh.parent) {\r\n mesh.isPickable = false;\r\n mesh.setParent(this.rootMesh);\r\n }\r\n }\r\n\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n}\r\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { WebXRAbstractMotionController, } from "./webXRAbstractMotionController.js";
|
|
2
|
-
import { Mesh } from "../../Meshes/mesh.js";
|
|
3
|
-
import { Quaternion } from "../../Maths/math.vector.js";
|
|
2
|
+
import { Mesh } from "../../Meshes/mesh.pure.js";
|
|
3
|
+
import { Quaternion } from "../../Maths/math.vector.pure.js";
|
|
4
4
|
/**
|
|
5
5
|
* A generic trigger-only motion controller for WebXR
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webXRGenericMotionController.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/webXRGenericMotionController.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,6BAA6B,GAChC,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,IAAI,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"webXRGenericMotionController.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/webXRGenericMotionController.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,6BAA6B,GAChC,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D;;GAEG;AACH,MAAM,OAAO,mCAAoC,SAAQ,6BAA6B;IAQlF,YAAY,KAAY,EAAE,aAA6C,EAAE,UAAsC;QAC3G,KAAK,CAAC,KAAK,EAAE,oBAAoB,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;QAHvE,cAAS,GAAG,mCAAmC,CAAC,SAAS,CAAC;IAIjE,CAAC;IAES,mBAAmB;QACzB,OAAO;YACH,QAAQ,EAAE,iBAAiB;YAC3B,IAAI,EAAE,4CAA4C;SACrD,CAAC;IACN,CAAC;IAES,2BAA2B;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,6DAA6D;IACnD,mBAAmB,CAAC,MAAsB;QAChD,gBAAgB;IACpB,CAAC;IAES,YAAY,CAAC,MAAsB;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAE7E,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAES,YAAY;QAClB,QAAQ;IACZ,CAAC;;AA1CD;;GAEG;AACW,6CAAS,GAAG,iBAAiB,AAApB,CAAqB;AA0ChD,gJAAgJ;AAChJ,MAAM,oBAAoB,GAA+B;IACrD,IAAI,EAAE;QACF,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,UAAU;KACxB;IACD,KAAK,EAAE;QACH,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,uBAAuB;QACrC,SAAS,EAAE,WAAW;KACzB;IACD,IAAI,EAAE;QACF,iBAAiB,EAAE,qBAAqB;QACxC,UAAU,EAAE;YACR,gEAAgE;YAChE,qBAAqB,EAAE;gBACnB,IAAI,EAAE,SAAS;gBACf,cAAc,EAAE;oBACZ,MAAM,EAAE,CAAC;iBACZ;gBACD,YAAY,EAAE,qBAAqB;gBACnC,eAAe,EAAE,EAAE;aACtB;SACJ;QACD,cAAc,EAAE,aAAa;QAC7B,YAAY,EAAE,sBAAsB;QACpC,SAAS,EAAE,UAAU;KACxB;CACJ,CAAC","sourcesContent":["import {\r\n type IMinimalMotionControllerObject,\r\n type MotionControllerHandedness,\r\n type IMotionControllerLayoutMap,\r\n WebXRAbstractMotionController,\r\n} from \"./webXRAbstractMotionController\";\r\nimport { type AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { Mesh } from \"../../Meshes/mesh.pure\";\r\nimport { Quaternion } from \"../../Maths/math.vector.pure\";\r\n\r\n/**\r\n * A generic trigger-only motion controller for WebXR\r\n */\r\nexport class WebXRGenericTriggerMotionController extends WebXRAbstractMotionController {\r\n /**\r\n * Static version of the profile id of this controller\r\n */\r\n public static ProfileId = \"generic-trigger\";\r\n\r\n public profileId = WebXRGenericTriggerMotionController.ProfileId;\r\n\r\n constructor(scene: Scene, gamepadObject: IMinimalMotionControllerObject, handedness: MotionControllerHandedness) {\r\n super(scene, GenericTriggerLayout[handedness], gamepadObject, handedness);\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n return {\r\n filename: \"generic.babylon\",\r\n path: \"https://controllers.babylonjs.com/generic/\",\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n return true;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n protected _processLoadedModel(meshes: AbstractMesh[]): void {\r\n // nothing to do\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \" \" + this.handedness, this.scene);\r\n\r\n for (const mesh of meshes) {\r\n mesh.isPickable = false;\r\n if (!mesh.parent) {\r\n mesh.setParent(this.rootMesh);\r\n }\r\n }\r\n\r\n this.rootMesh.rotationQuaternion = Quaternion.FromEulerAngles(0, Math.PI, 0);\r\n }\r\n\r\n protected _updateModel(): void {\r\n // no-op\r\n }\r\n}\r\n\r\n// https://github.com/immersive-web/webxr-input-profiles/blob/master/packages/registry/profiles/generic/generic-trigger-touchpad-thumbstick.json\r\nconst GenericTriggerLayout: IMotionControllerLayoutMap = {\r\n left: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-left\",\r\n assetPath: \"left.glb\",\r\n },\r\n right: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-right\",\r\n assetPath: \"right.glb\",\r\n },\r\n none: {\r\n selectComponentId: \"xr-standard-trigger\",\r\n components: {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n \"xr-standard-trigger\": {\r\n type: \"trigger\",\r\n gamepadIndices: {\r\n button: 0,\r\n },\r\n rootNodeName: \"xr_standard_trigger\",\r\n visualResponses: {},\r\n },\r\n },\r\n gamepadMapping: \"xr-standard\",\r\n rootNodeName: \"generic-trigger-none\",\r\n assetPath: \"none.glb\",\r\n },\r\n};\r\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { WebXRAbstractMotionController } from "./webXRAbstractMotionController.js";
|
|
2
2
|
import { SceneLoader } from "../../Loading/sceneLoader.js";
|
|
3
|
-
import { Mesh } from "../../Meshes/mesh.js";
|
|
3
|
+
import { Mesh } from "../../Meshes/mesh.pure.js";
|
|
4
4
|
import { Axis } from "../../Maths/math.axis.js";
|
|
5
|
-
import { Color3 } from "../../Maths/math.color.js";
|
|
5
|
+
import { Color3 } from "../../Maths/math.color.pure.js";
|
|
6
6
|
import { WebXRControllerComponent } from "./webXRControllerComponent.js";
|
|
7
|
-
import { CreateSphere } from "../../Meshes/Builders/sphereBuilder.js";
|
|
8
|
-
import { StandardMaterial } from "../../Materials/standardMaterial.js";
|
|
7
|
+
import { CreateSphere } from "../../Meshes/Builders/sphereBuilder.pure.js";
|
|
8
|
+
import { StandardMaterial } from "../../Materials/standardMaterial.pure.js";
|
|
9
9
|
import { Logger } from "../../Misc/logger.js";
|
|
10
10
|
/**
|
|
11
11
|
* A profiled motion controller has its profile loaded from an online repository.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webXRProfiledMotionController.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/webXRProfiledMotionController.ts"],"names":[],"mappings":"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","sourcesContent":["import { type AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { type IMotionControllerProfile, type IMotionControllerMeshMap, WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { SceneLoader } from \"../../Loading/sceneLoader\";\r\nimport { Mesh } from \"../../Meshes/mesh\";\r\nimport { Axis, Space } from \"../../Maths/math.axis\";\r\nimport { Color3 } from \"../../Maths/math.color\";\r\nimport { WebXRControllerComponent } from \"./webXRControllerComponent\";\r\nimport { CreateSphere } from \"../../Meshes/Builders/sphereBuilder\";\r\nimport { StandardMaterial } from \"../../Materials/standardMaterial\";\r\nimport { Logger } from \"../../Misc/logger\";\r\n\r\n/**\r\n * A profiled motion controller has its profile loaded from an online repository.\r\n * The class is responsible of loading the model, mapping the keys and enabling model-animations\r\n */\r\nexport class WebXRProfiledMotionController extends WebXRAbstractMotionController {\r\n private _buttonMeshMapping: {\r\n [buttonName: string]: {\r\n mainMesh?: AbstractMesh;\r\n states: {\r\n [state: string]: IMotionControllerMeshMap;\r\n };\r\n };\r\n } = {};\r\n private _touchDots: { [visKey: string]: AbstractMesh } = {};\r\n\r\n /**\r\n * The profile ID of this controller. Will be populated when the controller initializes.\r\n */\r\n public profileId: string;\r\n\r\n constructor(\r\n scene: Scene,\r\n xrInput: XRInputSource,\r\n _profile: IMotionControllerProfile,\r\n private _repositoryUrl: string,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private controllerCache?: Array<{\r\n filename: string;\r\n path: string;\r\n meshes: AbstractMesh[];\r\n }>\r\n ) {\r\n super(scene, _profile.layouts[xrInput.handedness || \"none\"], xrInput.gamepad as any, xrInput.handedness, undefined, controllerCache);\r\n this.profileId = _profile.profileId;\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n if (!this.controllerCache) {\r\n const keys = Object.keys(this._touchDots);\r\n for (const visResKey of keys) {\r\n this._touchDots[visResKey].dispose();\r\n }\r\n }\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n return {\r\n filename: this.layout.assetPath,\r\n path: `${this._repositoryUrl}/profiles/${this.profileId}/`,\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n const glbLoaded = SceneLoader.IsPluginForExtensionAvailable(\".glb\");\r\n if (!glbLoaded) {\r\n Logger.Warn(\"glTF / glb loader was not registered, using generic controller instead\");\r\n }\r\n return glbLoaded;\r\n }\r\n\r\n protected _processLoadedModel(_meshes: AbstractMesh[]): void {\r\n const ids = this.getComponentIds();\r\n\r\n for (const type of ids) {\r\n const componentInLayout = this.layout.components[type];\r\n this._buttonMeshMapping[type] = {\r\n mainMesh: this._getChildByName(this.rootMesh!, componentInLayout.rootNodeName),\r\n states: {},\r\n };\r\n const keys = Object.keys(componentInLayout.visualResponses);\r\n for (const visualResponseKey of keys) {\r\n const visResponse = componentInLayout.visualResponses[visualResponseKey];\r\n if (visResponse.valueNodeProperty === \"transform\") {\r\n this._buttonMeshMapping[type].states[visualResponseKey] = {\r\n valueMesh: this._getChildByName(this.rootMesh!, visResponse.valueNodeName!),\r\n minMesh: this._getChildByName(this.rootMesh!, visResponse.minNodeName!),\r\n maxMesh: this._getChildByName(this.rootMesh!, visResponse.maxNodeName!),\r\n };\r\n } else {\r\n // visibility, usually for touchpads\r\n const nameOfMesh =\r\n componentInLayout.type === WebXRControllerComponent.TOUCHPAD_TYPE && componentInLayout.touchPointNodeName\r\n ? componentInLayout.touchPointNodeName\r\n : visResponse.valueNodeName!;\r\n this._buttonMeshMapping[type].states[visualResponseKey] = {\r\n valueMesh: this._getChildByName(this.rootMesh!, nameOfMesh),\r\n };\r\n if (componentInLayout.type === WebXRControllerComponent.TOUCHPAD_TYPE && !this._touchDots[visualResponseKey]) {\r\n const dot = CreateSphere(\r\n visualResponseKey + \"dot\",\r\n {\r\n diameter: 0.0015,\r\n segments: 8,\r\n },\r\n this.scene\r\n );\r\n dot.material = new StandardMaterial(visualResponseKey + \"mat\", this.scene);\r\n (<StandardMaterial>dot.material).diffuseColor = Color3.Red();\r\n dot.parent = this._buttonMeshMapping[type].states[visualResponseKey].valueMesh || null;\r\n dot.isVisible = false;\r\n this._touchDots[visualResponseKey] = dot;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \"-\" + this.handedness, this.scene);\r\n this.rootMesh.isPickable = false;\r\n let rootMesh;\r\n // Find the root node in the loaded glTF scene, and attach it as a child of 'parentMesh'\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n\r\n mesh.isPickable = false;\r\n\r\n if (!mesh.parent) {\r\n // Handle root node, attach to the new parentMesh\r\n rootMesh = mesh;\r\n }\r\n }\r\n\r\n if (rootMesh) {\r\n rootMesh.setParent(this.rootMesh);\r\n }\r\n if (!this.scene.useRightHandedSystem) {\r\n this.rootMesh.rotate(Axis.Y, Math.PI, Space.WORLD);\r\n }\r\n }\r\n\r\n protected _updateModel(_xrFrame: XRFrame): void {\r\n if (this.disableAnimation) {\r\n return;\r\n }\r\n const ids = this.getComponentIds();\r\n\r\n for (const id of ids) {\r\n const component = this.getComponent(id);\r\n if (!component.hasChanges) {\r\n continue;\r\n }\r\n const meshes = this._buttonMeshMapping[id];\r\n const componentInLayout = this.layout.components[id];\r\n const keys = Object.keys(componentInLayout.visualResponses);\r\n for (const visualResponseKey of keys) {\r\n const visResponse = componentInLayout.visualResponses[visualResponseKey];\r\n let value = component.value;\r\n if (visResponse.componentProperty === \"xAxis\") {\r\n value = component.axes.x;\r\n } else if (visResponse.componentProperty === \"yAxis\") {\r\n value = component.axes.y;\r\n }\r\n if (visResponse.valueNodeProperty === \"transform\") {\r\n this._lerpTransform(meshes.states[visualResponseKey], value, visResponse.componentProperty !== \"button\");\r\n } else {\r\n // visibility\r\n const valueMesh = meshes.states[visualResponseKey].valueMesh;\r\n if (valueMesh) {\r\n valueMesh.isVisible = component.touched || component.pressed;\r\n }\r\n if (this._touchDots[visualResponseKey]) {\r\n this._touchDots[visualResponseKey].isVisible = component.touched || component.pressed;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"webXRProfiledMotionController.js","sourceRoot":"","sources":["../../../../../dev/core/src/XR/motionController/webXRProfiledMotionController.ts"],"names":[],"mappings":"AACA,OAAO,EAAgE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAE9I,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAS,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,6BAA8B,SAAQ,6BAA6B;IAgB5E,YACI,KAAY,EACZ,OAAsB,EACtB,QAAkC,EAC1B,cAAsB;IAC9B,gEAAgE;IACxD,eAIN;QAEF,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,EAAE,OAAO,CAAC,OAAc,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QAR7H,mBAAc,GAAd,cAAc,CAAQ;QAEtB,oBAAe,GAAf,eAAe,CAIrB;QAzBE,uBAAkB,GAOtB,EAAE,CAAC;QACC,eAAU,GAAuC,EAAE,CAAC;QAoBxD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;IACxC,CAAC;IAEe,OAAO;QACnB,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC1C,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YACzC,CAAC;QACL,CAAC;IACL,CAAC;IAES,mBAAmB;QACzB,OAAO;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAC/B,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,aAAa,IAAI,CAAC,SAAS,GAAG;SAC7D,CAAC;IACN,CAAC;IAES,2BAA2B;QACjC,MAAM,SAAS,GAAG,WAAW,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;IAES,mBAAmB,CAAC,OAAuB;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG;gBAC5B,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAS,EAAE,iBAAiB,CAAC,YAAY,CAAC;gBAC9E,MAAM,EAAE,EAAE;aACb,CAAC;YACF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;YAC5D,KAAK,MAAM,iBAAiB,IAAI,IAAI,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,iBAAiB,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;gBACzE,IAAI,WAAW,CAAC,iBAAiB,KAAK,WAAW,EAAE,CAAC;oBAChD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG;wBACtD,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAS,EAAE,WAAW,CAAC,aAAc,CAAC;wBAC3E,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAS,EAAE,WAAW,CAAC,WAAY,CAAC;wBACvE,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAS,EAAE,WAAW,CAAC,WAAY,CAAC;qBAC1E,CAAC;gBACN,CAAC;qBAAM,CAAC;oBACJ,oCAAoC;oBACpC,MAAM,UAAU,GACZ,iBAAiB,CAAC,IAAI,KAAK,wBAAwB,CAAC,aAAa,IAAI,iBAAiB,CAAC,kBAAkB;wBACrG,CAAC,CAAC,iBAAiB,CAAC,kBAAkB;wBACtC,CAAC,CAAC,WAAW,CAAC,aAAc,CAAC;oBACrC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG;wBACtD,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAS,EAAE,UAAU,CAAC;qBAC9D,CAAC;oBACF,IAAI,iBAAiB,CAAC,IAAI,KAAK,wBAAwB,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;wBAC3G,MAAM,GAAG,GAAG,YAAY,CACpB,iBAAiB,GAAG,KAAK,EACzB;4BACI,QAAQ,EAAE,MAAM;4BAChB,QAAQ,EAAE,CAAC;yBACd,EACD,IAAI,CAAC,KAAK,CACb,CAAC;wBACF,GAAG,CAAC,QAAQ,GAAG,IAAI,gBAAgB,CAAC,iBAAiB,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;wBACxD,GAAG,CAAC,QAAS,CAAC,YAAY,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;wBAC7D,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC;wBACvF,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;wBACtB,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,GAAG,GAAG,CAAC;oBAC7C,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAES,YAAY,CAAC,MAAsB;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7E,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;QACjC,IAAI,QAAQ,CAAC;QACb,wFAAwF;QACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAEvB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAExB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACf,iDAAiD;gBACjD,QAAQ,GAAG,IAAI,CAAC;YACpB,CAAC;QACL,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,sBAAc,CAAC;QACvD,CAAC;IACL,CAAC;IAES,YAAY,CAAC,QAAiB;QACpC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QAEnC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACnB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;gBACxB,SAAS;YACb,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAC3C,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;YAC5D,KAAK,MAAM,iBAAiB,IAAI,IAAI,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,iBAAiB,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;gBACzE,IAAI,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC5B,IAAI,WAAW,CAAC,iBAAiB,KAAK,OAAO,EAAE,CAAC;oBAC5C,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7B,CAAC;qBAAM,IAAI,WAAW,CAAC,iBAAiB,KAAK,OAAO,EAAE,CAAC;oBACnD,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7B,CAAC;gBACD,IAAI,WAAW,CAAC,iBAAiB,KAAK,WAAW,EAAE,CAAC;oBAChD,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC;gBAC7G,CAAC;qBAAM,CAAC;oBACJ,aAAa;oBACb,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC;oBAC7D,IAAI,SAAS,EAAE,CAAC;wBACZ,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;oBACjE,CAAC;oBACD,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;wBACrC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC;oBAC1F,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;CACJ","sourcesContent":["import { type AbstractMesh } from \"../../Meshes/abstractMesh\";\r\nimport { type IMotionControllerProfile, type IMotionControllerMeshMap, WebXRAbstractMotionController } from \"./webXRAbstractMotionController\";\r\nimport { type Scene } from \"../../scene\";\r\nimport { SceneLoader } from \"../../Loading/sceneLoader\";\r\nimport { Mesh } from \"../../Meshes/mesh.pure\";\r\nimport { Axis, Space } from \"../../Maths/math.axis\";\r\nimport { Color3 } from \"../../Maths/math.color.pure\";\r\nimport { WebXRControllerComponent } from \"./webXRControllerComponent\";\r\nimport { CreateSphere } from \"../../Meshes/Builders/sphereBuilder.pure\";\r\nimport { StandardMaterial } from \"../../Materials/standardMaterial.pure\";\r\nimport { Logger } from \"../../Misc/logger\";\r\n\r\n/**\r\n * A profiled motion controller has its profile loaded from an online repository.\r\n * The class is responsible of loading the model, mapping the keys and enabling model-animations\r\n */\r\nexport class WebXRProfiledMotionController extends WebXRAbstractMotionController {\r\n private _buttonMeshMapping: {\r\n [buttonName: string]: {\r\n mainMesh?: AbstractMesh;\r\n states: {\r\n [state: string]: IMotionControllerMeshMap;\r\n };\r\n };\r\n } = {};\r\n private _touchDots: { [visKey: string]: AbstractMesh } = {};\r\n\r\n /**\r\n * The profile ID of this controller. Will be populated when the controller initializes.\r\n */\r\n public profileId: string;\r\n\r\n constructor(\r\n scene: Scene,\r\n xrInput: XRInputSource,\r\n _profile: IMotionControllerProfile,\r\n private _repositoryUrl: string,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private controllerCache?: Array<{\r\n filename: string;\r\n path: string;\r\n meshes: AbstractMesh[];\r\n }>\r\n ) {\r\n super(scene, _profile.layouts[xrInput.handedness || \"none\"], xrInput.gamepad as any, xrInput.handedness, undefined, controllerCache);\r\n this.profileId = _profile.profileId;\r\n }\r\n\r\n public override dispose() {\r\n super.dispose();\r\n if (!this.controllerCache) {\r\n const keys = Object.keys(this._touchDots);\r\n for (const visResKey of keys) {\r\n this._touchDots[visResKey].dispose();\r\n }\r\n }\r\n }\r\n\r\n protected _getFilenameAndPath(): { filename: string; path: string } {\r\n return {\r\n filename: this.layout.assetPath,\r\n path: `${this._repositoryUrl}/profiles/${this.profileId}/`,\r\n };\r\n }\r\n\r\n protected _getModelLoadingConstraints(): boolean {\r\n const glbLoaded = SceneLoader.IsPluginForExtensionAvailable(\".glb\");\r\n if (!glbLoaded) {\r\n Logger.Warn(\"glTF / glb loader was not registered, using generic controller instead\");\r\n }\r\n return glbLoaded;\r\n }\r\n\r\n protected _processLoadedModel(_meshes: AbstractMesh[]): void {\r\n const ids = this.getComponentIds();\r\n\r\n for (const type of ids) {\r\n const componentInLayout = this.layout.components[type];\r\n this._buttonMeshMapping[type] = {\r\n mainMesh: this._getChildByName(this.rootMesh!, componentInLayout.rootNodeName),\r\n states: {},\r\n };\r\n const keys = Object.keys(componentInLayout.visualResponses);\r\n for (const visualResponseKey of keys) {\r\n const visResponse = componentInLayout.visualResponses[visualResponseKey];\r\n if (visResponse.valueNodeProperty === \"transform\") {\r\n this._buttonMeshMapping[type].states[visualResponseKey] = {\r\n valueMesh: this._getChildByName(this.rootMesh!, visResponse.valueNodeName!),\r\n minMesh: this._getChildByName(this.rootMesh!, visResponse.minNodeName!),\r\n maxMesh: this._getChildByName(this.rootMesh!, visResponse.maxNodeName!),\r\n };\r\n } else {\r\n // visibility, usually for touchpads\r\n const nameOfMesh =\r\n componentInLayout.type === WebXRControllerComponent.TOUCHPAD_TYPE && componentInLayout.touchPointNodeName\r\n ? componentInLayout.touchPointNodeName\r\n : visResponse.valueNodeName!;\r\n this._buttonMeshMapping[type].states[visualResponseKey] = {\r\n valueMesh: this._getChildByName(this.rootMesh!, nameOfMesh),\r\n };\r\n if (componentInLayout.type === WebXRControllerComponent.TOUCHPAD_TYPE && !this._touchDots[visualResponseKey]) {\r\n const dot = CreateSphere(\r\n visualResponseKey + \"dot\",\r\n {\r\n diameter: 0.0015,\r\n segments: 8,\r\n },\r\n this.scene\r\n );\r\n dot.material = new StandardMaterial(visualResponseKey + \"mat\", this.scene);\r\n (<StandardMaterial>dot.material).diffuseColor = Color3.Red();\r\n dot.parent = this._buttonMeshMapping[type].states[visualResponseKey].valueMesh || null;\r\n dot.isVisible = false;\r\n this._touchDots[visualResponseKey] = dot;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected _setRootMesh(meshes: AbstractMesh[]): void {\r\n this.rootMesh = new Mesh(this.profileId + \"-\" + this.handedness, this.scene);\r\n this.rootMesh.isPickable = false;\r\n let rootMesh;\r\n // Find the root node in the loaded glTF scene, and attach it as a child of 'parentMesh'\r\n for (let i = 0; i < meshes.length; i++) {\r\n const mesh = meshes[i];\r\n\r\n mesh.isPickable = false;\r\n\r\n if (!mesh.parent) {\r\n // Handle root node, attach to the new parentMesh\r\n rootMesh = mesh;\r\n }\r\n }\r\n\r\n if (rootMesh) {\r\n rootMesh.setParent(this.rootMesh);\r\n }\r\n if (!this.scene.useRightHandedSystem) {\r\n this.rootMesh.rotate(Axis.Y, Math.PI, Space.WORLD);\r\n }\r\n }\r\n\r\n protected _updateModel(_xrFrame: XRFrame): void {\r\n if (this.disableAnimation) {\r\n return;\r\n }\r\n const ids = this.getComponentIds();\r\n\r\n for (const id of ids) {\r\n const component = this.getComponent(id);\r\n if (!component.hasChanges) {\r\n continue;\r\n }\r\n const meshes = this._buttonMeshMapping[id];\r\n const componentInLayout = this.layout.components[id];\r\n const keys = Object.keys(componentInLayout.visualResponses);\r\n for (const visualResponseKey of keys) {\r\n const visResponse = componentInLayout.visualResponses[visualResponseKey];\r\n let value = component.value;\r\n if (visResponse.componentProperty === \"xAxis\") {\r\n value = component.axes.x;\r\n } else if (visResponse.componentProperty === \"yAxis\") {\r\n value = component.axes.y;\r\n }\r\n if (visResponse.valueNodeProperty === \"transform\") {\r\n this._lerpTransform(meshes.states[visualResponseKey], value, visResponse.componentProperty !== \"button\");\r\n } else {\r\n // visibility\r\n const valueMesh = meshes.states[visualResponseKey].valueMesh;\r\n if (valueMesh) {\r\n valueMesh.isVisible = component.touched || component.pressed;\r\n }\r\n if (this._touchDots[visualResponseKey]) {\r\n this._touchDots[visualResponseKey].isVisible = component.touched || component.pressed;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
package/XR/webXRCamera.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Vector3, Quaternion } from "../Maths/math.vector.js";
|
|
1
|
+
import { Vector3, Quaternion } from "../Maths/math.vector.pure.js";
|
|
2
2
|
import { type Scene } from "../scene.js";
|
|
3
|
-
import { Camera } from "../Cameras/camera.js";
|
|
4
|
-
import { FreeCamera } from "../Cameras/freeCamera.js";
|
|
3
|
+
import { Camera } from "../Cameras/camera.pure.js";
|
|
4
|
+
import { FreeCamera } from "../Cameras/freeCamera.pure.js";
|
|
5
5
|
import { type WebXRSessionManager } from "./webXRSessionManager.js";
|
|
6
6
|
import { Observable } from "../Misc/observable.js";
|
|
7
7
|
import { WebXRTrackingState } from "./webXRTypes.js";
|