Skip to content

Commit b7b9fb9

Browse files
authored
Merge pull request #6989 from keveleigh/refactor-wmrutilities
Refactor WMRUtilities to support Unity legacy XR and XR SDK
2 parents 80c430a + 8dd387a commit b7b9fb9

9 files changed

+113
-22
lines changed

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/Definitions/HolographicFrameNativeData.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ public struct HolographicFrameNativeData
2424
public uint MaxNumberOfCameras;
2525

2626
/// <summary>
27-
/// The current native root <see href="https://docs.microsoft.com/uwp/api/windows.perception.spatial.spatialcoordinatesystem">ISpatialCoordinateSystem</see>).
27+
/// The current native root <see href="https://docs.microsoft.com/uwp/api/windows.perception.spatial.spatialcoordinatesystem">ISpatialCoordinateSystem</see>.
2828
/// </summary>
2929
public IntPtr ISpatialCoordinateSystemPtr;
3030

3131
/// <summary>
32-
/// The current native <see href="https://docs.microsoft.com/uwp/api/Windows.Graphics.Holographic.HolographicFrame">IHolographicFrame</see>).
32+
/// The current native <see href="https://docs.microsoft.com/uwp/api/Windows.Graphics.Holographic.HolographicFrame">IHolographicFrame</see>.
3333
/// </summary>
3434
public IntPtr IHolographicFramePtr;
3535

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
using System;
5+
6+
namespace Microsoft.MixedReality.Toolkit.WindowsMixedReality
7+
{
8+
/// <summary>
9+
/// Defines a set of IntPtr properties that are used by the static <see cref="WindowsMixedRealityUtilities"/>
10+
/// to provide access to specific underlying native objects relevant to Windows Mixed Reality.
11+
/// </summary>
12+
/// <remarks>
13+
/// This is intended to be used to support both XR SDK and Unity's legacy XR pipeline, which provide
14+
/// different APIs to access these native objects.
15+
/// </remarks>
16+
public interface IWindowsMixedRealityUtilitiesProvider
17+
{
18+
/// <summary>
19+
/// The current native root <see href="https://docs.microsoft.com/uwp/api/windows.perception.spatial.spatialcoordinatesystem">ISpatialCoordinateSystem</see>.
20+
/// </summary>
21+
IntPtr ISpatialCoordinateSystemPtr { get; }
22+
23+
/// <summary>
24+
/// The current native <see href="https://docs.microsoft.com/uwp/api/Windows.Graphics.Holographic.HolographicFrame">IHolographicFrame</see>.
25+
/// </summary>
26+
IntPtr IHolographicFramePtr { get; }
27+
}
28+
}

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/Shared/Definitions/IWindowsMixedRealityUtilitiesProvider.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/Shared/WindowsMixedRealityReprojectionUpdater.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ private void OnPostRender()
3131
if (isDepthReprojectionModeSupported &&
3232
(ReprojectionMethod == HolographicDepthReprojectionMethod.AutoPlanar))
3333
{
34-
Microsoft.Windows.Graphics.Holographic.HolographicFrame frame = Input.WindowsMixedRealityUtilities.CurrentHolographicFrame;
34+
Microsoft.Windows.Graphics.Holographic.HolographicFrame frame = WindowsMixedRealityUtilities.CurrentHolographicFrame;
3535
foreach (var cameraPose in frame?.CurrentPrediction.CameraPoses)
3636
{
3737
if (CameraSupportsAutoPlanar(cameraPose.HolographicCamera))

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityUtilities.cs renamed to Assets/MixedRealityToolkit.Providers/WindowsMixedReality/Shared/WindowsMixedRealityUtilities.cs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
#if (UNITY_WSA && DOTNETWINRT_PRESENT) || WINDOWS_UWP
55
using System;
66
using System.Runtime.InteropServices;
7-
using UnityEngine.XR.WSA;
87
#if WINDOWS_UWP
98
using Windows.Perception.Spatial;
109
#if DOTNETWINRT_PRESENT
@@ -18,7 +17,7 @@
1817
#endif
1918
#endif // (UNITY_WSA && DOTNETWINRT_PRESENT) || WINDOWS_UWP
2019

21-
namespace Microsoft.MixedReality.Toolkit.WindowsMixedReality.Input
20+
namespace Microsoft.MixedReality.Toolkit.WindowsMixedReality
2221
{
2322
public static class WindowsMixedRealityUtilities
2423
{
@@ -40,7 +39,8 @@ private static SpatialCoordinateSystem GetSpatialCoordinateSystem(IntPtr nativeP
4039
{
4140
try
4241
{
43-
GetSpatialCoordinateSystem(nativePtr, out SpatialCoordinateSystem coordinateSystem);
42+
SpatialCoordinateSystem coordinateSystem;
43+
GetSpatialCoordinateSystem(nativePtr, out coordinateSystem);
4444
return coordinateSystem;
4545
}
4646
catch
@@ -51,6 +51,8 @@ private static SpatialCoordinateSystem GetSpatialCoordinateSystem(IntPtr nativeP
5151
}
5252
#endif //ENABLE_DOTNET
5353

54+
public static IWindowsMixedRealityUtilitiesProvider UtilitiesProvider { get; set; } = null;
55+
5456
/// <summary>
5557
/// Access the underlying native spatial coordinate system.
5658
/// </summary>
@@ -62,18 +64,17 @@ public static SpatialCoordinateSystem SpatialCoordinateSystem
6264
{
6365
get
6466
{
67+
if (spatialCoordinateSystem == null && UtilitiesProvider != null)
68+
{
6569
#if ENABLE_DOTNET
66-
return spatialCoordinateSystem ?? (spatialCoordinateSystem = GetSpatialCoordinateSystem(WorldManager.GetNativeISpatialCoordinateSystemPtr()));
70+
spatialCoordinateSystem = GetSpatialCoordinateSystem(UtilitiesProvider.ISpatialCoordinateSystemPtr);
6771
#elif WINDOWS_UWP
68-
return spatialCoordinateSystem ?? (spatialCoordinateSystem = Marshal.GetObjectForIUnknown(WorldManager.GetNativeISpatialCoordinateSystemPtr()) as SpatialCoordinateSystem);
72+
spatialCoordinateSystem = Marshal.GetObjectForIUnknown(UtilitiesProvider.ISpatialCoordinateSystemPtr) as SpatialCoordinateSystem;
6973
#elif DOTNETWINRT_PRESENT
70-
var spatialCoordinateSystemPtr = WorldManager.GetNativeISpatialCoordinateSystemPtr();
71-
if (spatialCoordinateSystem == null && spatialCoordinateSystemPtr != IntPtr.Zero)
72-
{
73-
spatialCoordinateSystem = SpatialCoordinateSystem.FromNativePtr(WorldManager.GetNativeISpatialCoordinateSystemPtr());
74+
spatialCoordinateSystem = SpatialCoordinateSystem.FromNativePtr(UtilitiesProvider.ISpatialCoordinateSystemPtr);
75+
#endif
7476
}
7577
return spatialCoordinateSystem;
76-
#endif
7778
}
7879
}
7980

@@ -88,14 +89,15 @@ public static HolographicFrame CurrentHolographicFrame
8889
{
8990
get
9091
{
92+
if (UtilitiesProvider == null)
93+
{
94+
return null;
95+
}
96+
9197
#if DOTNETWINRT_PRESENT
92-
IntPtr nativePtr = UnityEngine.XR.XRDevice.GetNativePtr();
93-
HolographicFrameNativeData hfd = Marshal.PtrToStructure<HolographicFrameNativeData>(nativePtr);
94-
return HolographicFrame.FromNativePtr(hfd.IHolographicFramePtr);
98+
return HolographicFrame.FromNativePtr(UtilitiesProvider.IHolographicFramePtr);
9599
#elif WINDOWS_UWP
96-
IntPtr nativePtr = UnityEngine.XR.XRDevice.GetNativePtr();
97-
HolographicFrameNativeData hfd = Marshal.PtrToStructure<HolographicFrameNativeData>(nativePtr);
98-
return Marshal.GetObjectForIUnknown(hfd.IHolographicFramePtr) as HolographicFrame;
100+
return Marshal.GetObjectForIUnknown(UtilitiesProvider.IHolographicFramePtr) as HolographicFrame;
99101
#else
100102
return null;
101103
#endif

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityUtilities.cs.meta renamed to Assets/MixedRealityToolkit.Providers/WindowsMixedReality/Shared/WindowsMixedRealityUtilities.cs.meta

File renamed without changes.

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityDeviceManager.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
using Microsoft.MixedReality.Toolkit.Input;
66
using Microsoft.MixedReality.Toolkit.Windows.Input;
77
using Microsoft.MixedReality.Toolkit.Windows.Utilities;
8-
using UnityEngine;
98
using System;
10-
using Microsoft.MixedReality.Toolkit.Utilities.Editor;
9+
using UnityEngine;
1110

1211
#if UNITY_WSA
1312
using System.Collections.Generic;
@@ -99,7 +98,6 @@ public bool CheckCapability(MixedRealityCapability capability)
9998
#endregion IMixedRealityCapabilityCheck Implementation
10099

101100
#if UNITY_WSA
102-
103101
/// <summary>
104102
/// The initial size of interactionmanagerStates.
105103
/// </summary>
@@ -321,6 +319,13 @@ public override void Enable()
321319

322320
if (InputSystemProfile == null) { return; }
323321

322+
#if (UNITY_WSA && DOTNETWINRT_PRESENT) || WINDOWS_UWP
323+
if (WindowsMixedRealityUtilities.UtilitiesProvider == null)
324+
{
325+
WindowsMixedRealityUtilities.UtilitiesProvider = new WindowsMixedRealityUtilitiesProvider();
326+
}
327+
#endif // (UNITY_WSA && DOTNETWINRT_PRESENT) || WINDOWS_UWP
328+
324329
if (InputSystemProfile.GesturesProfile != null)
325330
{
326331
var gestureProfile = InputSystemProfile.GesturesProfile;
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
using System;
5+
using System.Runtime.InteropServices;
6+
7+
#if UNITY_WSA
8+
using UnityEngine.XR.WSA;
9+
#endif // UNITY_WSA
10+
11+
namespace Microsoft.MixedReality.Toolkit.WindowsMixedReality
12+
{
13+
public class WindowsMixedRealityUtilitiesProvider : IWindowsMixedRealityUtilitiesProvider
14+
{
15+
/// <inheritdoc />
16+
IntPtr IWindowsMixedRealityUtilitiesProvider.ISpatialCoordinateSystemPtr =>
17+
#if UNITY_WSA
18+
WorldManager.GetNativeISpatialCoordinateSystemPtr();
19+
#else
20+
IntPtr.Zero;
21+
#endif
22+
23+
/// <inheritdoc />
24+
IntPtr IWindowsMixedRealityUtilitiesProvider.IHolographicFramePtr
25+
{
26+
get
27+
{
28+
IntPtr nativePtr = UnityEngine.XR.XRDevice.GetNativePtr();
29+
HolographicFrameNativeData hfd = Marshal.PtrToStructure<HolographicFrameNativeData>(nativePtr);
30+
return hfd.IHolographicFramePtr;
31+
}
32+
}
33+
}
34+
}

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityUtilitiesProvider.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)