// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using Microsoft.MixedReality.Toolkit.CameraSystem; using Microsoft.MixedReality.Toolkit.Utilities; #if SPATIALTRACKING_ENABLED using UnityEngine.SpatialTracking; #endif // SPATIALTRACKING_ENABLED namespace Microsoft.MixedReality.Toolkit.XRSDK { /// /// Camera settings provider for use with XR SDK. /// [MixedRealityDataProvider( typeof(IMixedRealityCameraSystem), (SupportedPlatforms)(-1), "XR SDK Camera Settings", supportedUnityXRPipelines: SupportedUnityXRPipelines.XRSDK)] public class GenericXRSDKCameraSettings : BaseCameraSettingsProvider { /// /// Constructor. /// /// The instance of the camera system which is managing this provider. /// Friendly name of the provider. /// Provider priority. Used to determine order of instantiation. /// The provider's configuration profile. public GenericXRSDKCameraSettings( IMixedRealityCameraSystem cameraSystem, string name = null, uint priority = DefaultPriority, BaseCameraSettingsProfile profile = null) : base(cameraSystem, name, priority, profile) { } #if SPATIALTRACKING_ENABLED private TrackedPoseDriver trackedPoseDriver = null; #endif // SPATIALTRACKING_ENABLED #region IMixedRealityCameraSettings /// public override bool IsOpaque => XRSubsystemHelpers.DisplaySubsystem == null || !XRSubsystemHelpers.DisplaySubsystem.running || XRSubsystemHelpers.DisplaySubsystem.displayOpaque; #if SPATIALTRACKING_ENABLED /// public override void Enable() { base.Enable(); // Only track the TrackedPoseDriver if we added it ourselves. // There may be a pre-configured TrackedPoseDriver on the camera. if (!CameraCache.Main.GetComponent()) { trackedPoseDriver = CameraCache.Main.gameObject.AddComponent(); } } /// public override void Disable() { if (trackedPoseDriver != null) { UnityObjectExtensions.DestroyObject(trackedPoseDriver); trackedPoseDriver = null; } base.Disable(); } #endif // SPATIALTRACKING_ENABLED #endregion IMixedRealityCameraSettings } }