Skip to content

Commit 3e3a980

Browse files
authored
Merge pull request #9338 from keveleigh/fix-wmr
Update XR SDK loader checking in data providers
2 parents 3ff4f46 + 67502b9 commit 3e3a980

File tree

7 files changed

+151
-73
lines changed

7 files changed

+151
-73
lines changed

Assets/MRTK/Providers/Oculus/XRSDK/OculusXRSDKDeviceManager.cs

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,16 @@
55
using Microsoft.MixedReality.Toolkit.Utilities;
66
using Microsoft.MixedReality.Toolkit.XRSDK.Input;
77
using System;
8-
using System.Linq;
9-
using System.Collections.Generic;
10-
#if OCULUSINTEGRATION_PRESENT
8+
using UnityEngine.XR;
9+
10+
#if OCULUS_ENABLED
1111
using Unity.XR.Oculus;
12-
#endif
12+
#endif // OCULUS_ENABLED
13+
14+
#if OCULUSINTEGRATION_PRESENT
15+
using System.Collections.Generic;
1316
using UnityEngine;
14-
using UnityEngine.XR;
15-
using UnityEngine.XR.Management;
17+
#endif // OCULUSINTEGRATION_PRESENT
1618

1719
namespace Microsoft.MixedReality.Toolkit.XRSDK.Oculus.Input
1820
{
@@ -55,14 +57,11 @@ public override void Initialize()
5557
private OVRCameraRig cameraRig;
5658

5759
private OVRHand rightHand;
58-
private OVRMeshRenderer rightMeshRenderer;
5960
private OVRSkeleton rightSkeleton;
6061

6162
private OVRHand leftHand;
62-
private OVRMeshRenderer leftMeshRenderer;
6363
private OVRSkeleton leftSkeleton;
6464

65-
6665
/// <summary>
6766
/// The profile that contains settings for the Oculus XRSDK Device Manager input data provider. This profile is nested under
6867
/// Input > Input Data Providers > Oculus XRSDK Device Manager in the MixedRealityToolkit object in the hierarchy.
@@ -139,26 +138,50 @@ protected override SupportedControllerType GetCurrentControllerType(InputDevice
139138

140139
#endregion Controller Utilities
141140

142-
#if OCULUSINTEGRATION_PRESENT
141+
private bool? isActiveLoader = null;
142+
private bool IsActiveLoader
143+
{
144+
get
145+
{
146+
#if OCULUS_ENABLED
147+
if (!isActiveLoader.HasValue)
148+
{
149+
isActiveLoader = IsLoaderActive<OculusLoader>();
150+
}
151+
#endif // OCULUS_ENABLED
152+
153+
return isActiveLoader ?? false;
154+
}
155+
}
156+
143157
/// <inheritdoc/>
144158
public override void Enable()
145159
{
146-
base.Enable();
147-
148-
if (!XRGeneralSettings.Instance.Manager.loaders.Any(l => l is OculusLoader loader && loader.displaySubsystem != null))
160+
if (!IsActiveLoader)
149161
{
162+
IsEnabled = false;
150163
return;
151164
}
152165

166+
base.Enable();
167+
168+
#if OCULUSINTEGRATION_PRESENT
153169
SetupInput();
154170
ConfigurePerformancePreferences();
171+
#endif // OCULUSINTEGRATION_PRESENT
155172
}
156173

157-
174+
#if OCULUSINTEGRATION_PRESENT
158175
/// <inheritdoc/>
159176
public override void Update()
160177
{
178+
if (!IsEnabled)
179+
{
180+
return;
181+
}
182+
161183
base.Update();
184+
162185
if (OVRPlugin.GetHandTrackingEnabled())
163186
{
164187
UpdateHands();
@@ -203,7 +226,7 @@ private void SetupInput()
203226
}
204227

205228
bool useAvatarHands = SettingsProfile.RenderAvatarHandsInsteadOfController;
206-
// If using Avatar hands, de-activate ovr controller rendering
229+
// If using Avatar hands, deactivate ovr controller rendering
207230
foreach (var controllerHelper in cameraRig.gameObject.GetComponentsInChildren<OVRControllerHelper>())
208231
{
209232
controllerHelper.gameObject.SetActive(!useAvatarHands);
@@ -280,8 +303,7 @@ private OculusHand GetOrAddHand(Handedness handedness, OVRHand ovrHand)
280303
var pointers = RequestPointers(SupportedControllerType.ArticulatedHand, handedness);
281304
var inputSourceType = InputSourceType.Hand;
282305

283-
IMixedRealityInputSystem inputSystem = Service as IMixedRealityInputSystem;
284-
var inputSource = inputSystem?.RequestNewGenericInputSource($"Oculus Quest {handedness} Hand", pointers, inputSourceType);
306+
var inputSource = Service?.RequestNewGenericInputSource($"Oculus Quest {handedness} Hand", pointers, inputSourceType);
285307

286308

287309
OculusHand handDevice = new OculusHand(TrackingState.Tracked, handedness, inputSource);
@@ -292,7 +314,7 @@ private OculusHand GetOrAddHand(Handedness handedness, OVRHand ovrHand)
292314
handDevice.InputSource.Pointers[i].Controller = handDevice;
293315
}
294316

295-
inputSystem?.RaiseSourceDetected(handDevice.InputSource, handDevice);
317+
Service?.RaiseSourceDetected(handDevice.InputSource, handDevice);
296318

297319
trackedHands.Add(handedness, handDevice);
298320

@@ -330,6 +352,6 @@ private void RemoveHandDevice(OculusHand handDevice)
330352
}
331353

332354
#endregion
333-
#endif
355+
#endif // OCULUSINTEGRATION_PRESENT
334356
}
335357
}

Assets/MRTK/Providers/OpenXR/MRTK.OpenXR.asmdef

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"Microsoft.MixedReality.OpenXR",
66
"Microsoft.MixedReality.Toolkit",
77
"Microsoft.MixedReality.Toolkit.Providers.XRSDK",
8+
"Unity.XR.Management",
89
"Unity.XR.OpenXR"
910
],
1011
"includePlatforms": [

Assets/MRTK/Providers/OpenXR/Scripts/OpenXRDeviceManager.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
using Unity.Profiling;
99
using UnityEngine.XR;
1010

11+
#if UNITY_OPENXR
12+
using UnityEngine.XR.OpenXR;
13+
#endif // UNITY_OPENXR
14+
1115
namespace Microsoft.MixedReality.Toolkit.XRSDK.OpenXR
1216
{
1317
[MixedRealityDataProvider(
@@ -29,6 +33,34 @@ public OpenXRDeviceManager(
2933
uint priority = DefaultPriority,
3034
BaseMixedRealityProfile profile = null) : base(inputSystem, name, priority, profile) { }
3135

36+
private bool? isActiveLoader = null;
37+
private bool IsActiveLoader
38+
{
39+
get
40+
{
41+
#if UNITY_OPENXR
42+
if (!isActiveLoader.HasValue)
43+
{
44+
isActiveLoader = IsLoaderActive<OpenXRLoader>();
45+
}
46+
#endif // UNITY_OPENXR
47+
48+
return isActiveLoader ?? false;
49+
}
50+
}
51+
52+
/// <inheritdoc />
53+
public override void Enable()
54+
{
55+
if (!IsActiveLoader)
56+
{
57+
IsEnabled = false;
58+
return;
59+
}
60+
61+
base.Enable();
62+
}
63+
3264
#region Controller Utilities
3365

3466
private static readonly ProfilerMarker GetOrAddControllerPerfMarker = new ProfilerMarker("[MRTK] OpenXRDeviceManager.GetOrAddController");

Assets/MRTK/Providers/WindowsMixedReality/XRSDK/MRTK.WMR.XRSDK.asmdef

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
"Microsoft.MixedReality.Toolkit",
55
"Microsoft.MixedReality.Toolkit.Providers.WindowsMixedReality.Shared",
66
"Microsoft.MixedReality.Toolkit.Providers.XRSDK",
7-
"Unity.XR.WindowsMixedReality",
8-
"Unity.XR.Management"
7+
"Unity.XR.WindowsMixedReality"
98
],
109
"includePlatforms": [
1110
"Editor",

Assets/MRTK/Providers/WindowsMixedReality/XRSDK/WindowsMixedRealityDeviceManager.cs

Lines changed: 42 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,16 @@
44
using Microsoft.MixedReality.Toolkit.Input;
55
using Microsoft.MixedReality.Toolkit.Utilities;
66
using Microsoft.MixedReality.Toolkit.Windows.Utilities;
7+
using Microsoft.MixedReality.Toolkit.WindowsMixedReality;
78
using Microsoft.MixedReality.Toolkit.XRSDK.Input;
89
using System;
9-
using System.Linq;
10-
using System.Collections.Generic;
11-
using UnityEngine;
1210
using UnityEngine.XR;
13-
using UnityEngine.XR.Management;
14-
#if WMR_ENABLED
15-
using UnityEngine.XR.WindowsMR;
16-
#endif
17-
using Unity.Profiling;
18-
using Microsoft.MixedReality.Toolkit.WindowsMixedReality;
1911

2012
#if HP_CONTROLLER_ENABLED
2113
using Microsoft.MixedReality.Input;
2214
using MotionControllerHandedness = Microsoft.MixedReality.Input.Handedness;
23-
using Handedness = Microsoft.MixedReality.Toolkit.Utilities.Handedness;
15+
using System.Collections.Generic;
16+
using Unity.Profiling;
2417
#endif
2518

2619
#if WINDOWS_UWP
@@ -57,42 +50,64 @@ public WindowsMixedRealityDeviceManager(
5750
uint priority = DefaultPriority,
5851
BaseMixedRealityProfile profile = null) : base(inputSystem, name, priority, profile) { }
5952

60-
#region IMixedRealityDeviceManager Interface
53+
private bool? isActiveLoader = null;
54+
private bool IsActiveLoader
55+
{
56+
get
57+
{
58+
#if WMR_ENABLED
59+
if (!isActiveLoader.HasValue)
60+
{
61+
isActiveLoader = IsLoaderActive("Windows MR Loader");
62+
}
63+
#endif // WMR_ENABLED
6164

62-
#if (UNITY_WSA && DOTNETWINRT_PRESENT) || WINDOWS_UWP
63-
private IMixedRealityGazeProviderHeadOverride mixedRealityGazeProviderHeadOverride = null;
65+
return isActiveLoader ?? false;
66+
}
67+
}
68+
69+
#region IMixedRealityDeviceManager Interface
6470

6571
/// <inheritdoc />
6672
public override void Enable()
6773
{
68-
base.Enable();
69-
70-
#if WMR_ENABLED
71-
if (!XRGeneralSettings.Instance.Manager.loaders.Any(l => l is WindowsMRLoader loader && loader.displaySubsystem != null))
74+
if (!IsActiveLoader)
7275
{
76+
IsEnabled = false;
7377
return;
7478
}
75-
#endif
79+
80+
base.Enable();
7681

7782
if (WindowsMixedRealityUtilities.UtilitiesProvider == null)
7883
{
7984
WindowsMixedRealityUtilities.UtilitiesProvider = new XRSDKWindowsMixedRealityUtilitiesProvider();
8085
}
8186

87+
#if (UNITY_WSA && DOTNETWINRT_PRESENT) || WINDOWS_UWP
8288
mixedRealityGazeProviderHeadOverride = Service?.GazeProvider as IMixedRealityGazeProviderHeadOverride;
89+
#endif // (UNITY_WSA && DOTNETWINRT_PRESENT) || WINDOWS_UWP
8390

8491
#if HP_CONTROLLER_ENABLED
8592
// Listens to events to track the HP Motion Controller
8693
motionControllerWatcher = new MotionControllerWatcher();
8794
motionControllerWatcher.MotionControllerAdded += AddTrackedMotionController;
8895
motionControllerWatcher.MotionControllerRemoved += RemoveTrackedMotionController;
8996
var nowait = motionControllerWatcher.StartAsync();
90-
#endif
97+
#endif // HP_CONTROLLER_ENABLED
9198
}
9299

100+
#if (UNITY_WSA && DOTNETWINRT_PRESENT) || WINDOWS_UWP
101+
private IMixedRealityGazeProviderHeadOverride mixedRealityGazeProviderHeadOverride = null;
102+
93103
/// <inheritdoc />
94104
public override void Update()
95105
{
106+
if (!IsEnabled)
107+
{
108+
return;
109+
}
110+
96111
// Override gaze before base.Update() updates the controllers
97112
if (mixedRealityGazeProviderHeadOverride != null && mixedRealityGazeProviderHeadOverride.UseHeadGazeOverride && WindowsMixedRealityUtilities.SpatialCoordinateSystem != null)
98113
{
@@ -152,6 +167,10 @@ public override bool CheckCapability(MixedRealityCapability capability)
152167
return false;
153168
}
154169

170+
#endregion IMixedRealityCapabilityCheck Implementation
171+
172+
#region Controller Utilities
173+
155174
#if HP_CONTROLLER_ENABLED
156175
private MotionControllerWatcher motionControllerWatcher;
157176

@@ -161,24 +180,11 @@ public override bool CheckCapability(MixedRealityCapability capability)
161180
private readonly Dictionary<uint, MotionControllerState> trackedMotionControllerStates = new Dictionary<uint, MotionControllerState>();
162181

163182
private readonly Dictionary<uint, GenericXRSDKController> activeMotionControllers = new Dictionary<uint, GenericXRSDKController>();
164-
#endif
165-
166-
#endregion IMixedRealityCapabilityCheck Implementation
167-
168-
#region Controller Utilities
169183

170-
#if HP_CONTROLLER_ENABLED
171184
private static readonly ProfilerMarker GetOrAddControllerPerfMarker = new ProfilerMarker("[MRTK] WindwosMixedRealityXRSDKDeviceManager.GetOrAddController");
172185

173186
protected override GenericXRSDKController GetOrAddController(InputDevice inputDevice)
174187
{
175-
#if WMR_ENABLED
176-
if (!XRGeneralSettings.Instance.Manager.loaders.Any(l => l is WindowsMRLoader loader && loader.displaySubsystem != null))
177-
{
178-
return null;
179-
}
180-
#endif
181-
182188
using (GetOrAddControllerPerfMarker.Auto())
183189
{
184190
GenericXRSDKController detectedController = base.GetOrAddController(inputDevice);
@@ -228,39 +234,29 @@ private void RemoveTrackedMotionController(object sender, MotionController motio
228234
}
229235
}
230236
}
231-
#endif
232237

233-
#if HP_CONTROLLER_ENABLED
234-
// Creates a unique key for the controller based on it's vendor ID, product ID, version number, and handedness
238+
// Creates a unique key for the controller based on its vendor ID, product ID, version number, and handedness
235239
private uint GetControllerId(uint handedness)
236240
{
237241
return handedness;
238242
}
239243

240-
#if HP_CONTROLLER_ENABLED
241244
private uint GetControllerId(MotionController mc)
242245
{
243-
var handedness = ((uint)(mc.Handedness == MotionControllerHandedness.Right ? 2 : (mc.Handedness == MotionControllerHandedness.Left ? 1 : 0)));
246+
var handedness = (uint)(mc.Handedness == MotionControllerHandedness.Right ? 2 : (mc.Handedness == MotionControllerHandedness.Left ? 1 : 0));
244247
return GetControllerId(handedness);
245248
}
246-
#endif
247249

248250
private uint GetControllerId(InputDevice inputDevice)
249251
{
250-
var handedness = ((uint)(inputDevice.characteristics.HasFlag(InputDeviceCharacteristics.Right) ? 2 : inputDevice.characteristics.HasFlag(InputDeviceCharacteristics.Left) ? 1 : 0));
252+
var handedness = (uint)(inputDevice.characteristics.HasFlag(InputDeviceCharacteristics.Right) ? 2 : (inputDevice.characteristics.HasFlag(InputDeviceCharacteristics.Left) ? 1 : 0));
251253
return GetControllerId(handedness);
252254
}
253-
#endif
255+
#endif // HP_CONTROLLER_ENABLED
254256

255257
/// <inheritdoc />
256258
protected override Type GetControllerType(SupportedControllerType supportedControllerType)
257259
{
258-
#if WMR_ENABLED
259-
if (!XRGeneralSettings.Instance.Manager.loaders.Any(l => l is WindowsMRLoader loader && loader.displaySubsystem != null))
260-
{
261-
return null;
262-
}
263-
#endif
264260
switch (supportedControllerType)
265261
{
266262
case SupportedControllerType.WindowsMixedReality:

Assets/MRTK/Providers/XRSDK/MRTK.XRSDK.asmdef

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
"name": "Microsoft.MixedReality.Toolkit.Providers.XRSDK",
33
"references": [
44
"Microsoft.MixedReality.Toolkit",
5+
"Unity.XR.Management",
56
"UnityEngine.SpatialTracking"
67
],
78
"includePlatforms": [],
@@ -18,6 +19,11 @@
1819
"name": "com.unity.xr.legacyinputhelpers",
1920
"expression": "",
2021
"define": "SPATIALTRACKING_ENABLED"
22+
},
23+
{
24+
"name": "com.unity.xr.management",
25+
"expression": "",
26+
"define": "XR_MANAGEMENT_ENABLED"
2127
}
2228
],
2329
"noEngineReferences": false

0 commit comments

Comments
 (0)