Skip to content

Commit 284754f

Browse files
committed
Update XRMeshSubsystem getter to refresh at runtime instead of just Initialize
This helps fix the holographic remoting case
1 parent 35ed161 commit 284754f

File tree

1 file changed

+39
-33
lines changed

1 file changed

+39
-33
lines changed

Assets/MRTK/Providers/XRSDK/GenericXRSDKSpatialMeshObserver.cs

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,26 @@ public GenericXRSDKSpatialMeshObserver(
4141
BaseMixedRealityProfile profile = null) : base(spatialAwarenessSystem, name, priority, profile)
4242
{ }
4343

44-
protected virtual bool? IsActiveLoader => true;
44+
private IReadOnlyList<GenericXRSDKSpatialMeshObserver> observersCache;
45+
46+
protected virtual bool? IsActiveLoader
47+
{
48+
get
49+
{
50+
#if XR_MANAGEMENT_ENABLED
51+
if (XRGeneralSettings.Instance != null
52+
&& XRGeneralSettings.Instance.Manager != null
53+
&& XRGeneralSettings.Instance.Manager.activeLoader != null)
54+
{
55+
return true;
56+
}
57+
58+
return null;
59+
#else
60+
return false;
61+
#endif
62+
}
63+
}
4564

4665
/// <inheritdoc />
4766
public override void Enable()
@@ -58,6 +77,7 @@ public override void Enable()
5877
return;
5978
}
6079

80+
ConfigureObserverVolume();
6181
base.Enable();
6282
}
6383

@@ -73,30 +93,16 @@ private async void EnableIfLoaderBecomesActive()
7393
#region BaseSpatialObserver Implementation
7494

7595
private XRMeshSubsystem meshSubsystem;
76-
77-
/// <summary>
78-
/// Creates the XRMeshSubsystem and handles the desired startup behavior.
79-
/// </summary>
80-
protected override void CreateObserver()
81-
{
82-
if (Service == null
96+
private XRMeshSubsystem MeshSubsystem => meshSubsystem != null && meshSubsystem.running
97+
? meshSubsystem :
8398
#if XR_MANAGEMENT_ENABLED
84-
|| XRGeneralSettings.Instance == null || XRGeneralSettings.Instance.Manager == null || XRGeneralSettings.Instance.Manager.activeLoader == null
85-
#endif // XR_MANAGEMENT_ENABLED
86-
) { return; }
87-
88-
#if XR_MANAGEMENT_ENABLED
89-
meshSubsystem = XRGeneralSettings.Instance.Manager.activeLoader.GetLoadedSubsystem<XRMeshSubsystem>();
99+
meshSubsystem = IsActiveLoader ?? false
100+
? XRGeneralSettings.Instance.Manager.activeLoader.GetLoadedSubsystem<XRMeshSubsystem>()
101+
: null;
90102
#else
91103
meshSubsystem = XRSubsystemHelpers.MeshSubsystem;
92104
#endif // XR_MANAGEMENT_ENABLED
93105

94-
if (meshSubsystem != null)
95-
{
96-
ConfigureObserverVolume();
97-
}
98-
}
99-
100106
/// <summary>
101107
/// Implements proper cleanup of the SurfaceObserver.
102108
/// </summary>
@@ -119,15 +125,15 @@ protected override int LookupTriangleDensity(SpatialAwarenessMeshLevelOfDetail l
119125
{
120126
// For non-custom levels, the enum value is the appropriate triangles per cubic meter.
121127
int level = (int)levelOfDetail;
122-
if (meshSubsystem != null)
128+
if (MeshSubsystem != null)
123129
{
124130
if (levelOfDetail == SpatialAwarenessMeshLevelOfDetail.Unlimited)
125131
{
126-
meshSubsystem.meshDensity = 1;
132+
MeshSubsystem.meshDensity = 1;
127133
}
128134
else
129135
{
130-
meshSubsystem.meshDensity = level / (float)SpatialAwarenessMeshLevelOfDetail.Fine; // For now, map Coarse to 0.0 and Fine to 1.0
136+
MeshSubsystem.meshDensity = level / (float)SpatialAwarenessMeshLevelOfDetail.Fine; // For now, map Coarse to 0.0 and Fine to 1.0
131137
}
132138
}
133139
return level;
@@ -215,9 +221,9 @@ public override void Resume()
215221

216222
using (ResumePerfMarker.Auto())
217223
{
218-
if (meshSubsystem != null && !meshSubsystem.running)
224+
if (MeshSubsystem != null && !MeshSubsystem.running)
219225
{
220-
meshSubsystem.Start();
226+
MeshSubsystem.Start();
221227
}
222228

223229
// We want the first update immediately.
@@ -241,9 +247,9 @@ public override void Suspend()
241247

242248
using (SuspendPerfMarker.Auto())
243249
{
244-
if (meshSubsystem != null && meshSubsystem.running)
250+
if (MeshSubsystem != null && MeshSubsystem.running)
245251
{
246-
meshSubsystem.Stop();
252+
MeshSubsystem.Stop();
247253
}
248254

249255
// UpdateObserver keys off of this value to stop observing.
@@ -293,7 +299,7 @@ public override void ClearObservations()
293299
/// </summary>
294300
private void UpdateObserver()
295301
{
296-
if (Service == null || meshSubsystem == null) { return; }
302+
if (Service == null || MeshSubsystem == null) { return; }
297303

298304
using (UpdateObserverPerfMarker.Auto())
299305
{
@@ -325,7 +331,7 @@ private void UpdateObserver()
325331
// The application can update the observer volume at any time, make sure we are using the latest.
326332
ConfigureObserverVolume();
327333

328-
if (meshSubsystem.TryGetMeshInfos(meshInfos))
334+
if (MeshSubsystem.TryGetMeshInfos(meshInfos))
329335
{
330336
UpdateMeshes(meshInfos);
331337
}
@@ -368,7 +374,7 @@ private void RequestMesh(MeshId meshId)
368374
newMesh.GameObject.SetActive(true);
369375
}
370376

371-
meshSubsystem.GenerateMeshAsync(meshId, newMesh.Filter.mesh, newMesh.Collider, MeshVertexAttributes.Normals, (MeshGenerationResult meshGenerationResult) => MeshGenerationAction(meshGenerationResult));
377+
MeshSubsystem.GenerateMeshAsync(meshId, newMesh.Filter.mesh, newMesh.Collider, MeshVertexAttributes.Normals, (MeshGenerationResult meshGenerationResult) => MeshGenerationAction(meshGenerationResult));
372378
outstandingMeshObject = newMesh;
373379
}
374380
}
@@ -439,7 +445,7 @@ protected void ReclaimMeshObject(SpatialAwarenessMeshObject availableMeshObject)
439445
/// </summary>
440446
protected virtual void ConfigureObserverVolume()
441447
{
442-
if (meshSubsystem == null
448+
if (MeshSubsystem == null
443449
|| (oldObserverOrigin == ObserverOrigin
444450
&& oldObservationExtents == ObservationExtents
445451
&& oldObserverVolumeType == ObserverVolumeType))
@@ -453,7 +459,7 @@ protected virtual void ConfigureObserverVolume()
453459
switch (ObserverVolumeType)
454460
{
455461
case VolumeType.AxisAlignedCube:
456-
meshSubsystem.SetBoundingVolume(ObserverOrigin, ObservationExtents);
462+
MeshSubsystem.SetBoundingVolume(ObserverOrigin, ObservationExtents);
457463
break;
458464

459465
default:
@@ -590,7 +596,7 @@ public override void Initialize()
590596
{
591597
base.Initialize();
592598

593-
if (Service == null || meshSubsystem == null) { return; }
599+
if (Service == null || MeshSubsystem == null) { return; }
594600

595601
if (RuntimeSpatialMeshPrefab != null)
596602
{

0 commit comments

Comments
 (0)