From 09aef700b875f966fb421218862bc1b08f2547f1 Mon Sep 17 00:00:00 2001 From: Mike Baldwin <7369476+ropemonkey@users.noreply.github.com> Date: Wed, 14 Jan 2026 14:29:12 -0800 Subject: [PATCH] Fix permission issues related to gaze-based foveated rendering (#2) --- com.valvesoftware.openxr.utils/CHANGELOG.md | 4 ++ .../ValveOpenXRFoveatedRenderingBuildHooks.cs | 58 ------------------- .../ValveOpenXRFoveatedRenderingFeature.cs | 30 ++++++---- com.valvesoftware.openxr.utils/package.json | 2 +- 4 files changed, 23 insertions(+), 71 deletions(-) diff --git a/com.valvesoftware.openxr.utils/CHANGELOG.md b/com.valvesoftware.openxr.utils/CHANGELOG.md index 297d976..a845b4b 100644 --- a/com.valvesoftware.openxr.utils/CHANGELOG.md +++ b/com.valvesoftware.openxr.utils/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [1.0.2] - 2026-01-14 +### Fixed +- Fixed app permissions preventing gaze-based foveated rendering from being enabled. + ## [1.0.1] - 2026-01-12 ### Updating Frame Controller Interaction Path ### Added diff --git a/com.valvesoftware.openxr.utils/Editor/Features/ValveOpenXRFoveatedRenderingBuildHooks.cs b/com.valvesoftware.openxr.utils/Editor/Features/ValveOpenXRFoveatedRenderingBuildHooks.cs index b9c5aff..da1e222 100644 --- a/com.valvesoftware.openxr.utils/Editor/Features/ValveOpenXRFoveatedRenderingBuildHooks.cs +++ b/com.valvesoftware.openxr.utils/Editor/Features/ValveOpenXRFoveatedRenderingBuildHooks.cs @@ -24,63 +24,5 @@ protected override void OnProcessBootConfigExt(BuildReport report, BootConfigBui builder.SetBootConfigValue("xr-meta-enabled", "1"); #endif } - - protected override ManifestRequirement ProvideManifestRequirementExt() - { - var elementsToRemove = new List() - { - }; - - var elementsToAdd = new List() - { - new ManifestElement() - { - ElementPath = new List { "manifest", "uses-feature" }, - Attributes = new Dictionary - { - { "name", "oculus.software.eye_tracking" }, - { "required", "true" } - } - }, - - new ManifestElement() - { - ElementPath = new List { "manifest", "uses-permission" }, - Attributes = new Dictionary - { - { "name", "com.oculus.permission.EYE_TRACKING" } - } - }, - - new ManifestElement() - { - ElementPath = new List { "manifest", "uses-permission" }, - Attributes = new Dictionary - { - { "name", "android.permission.EYE_TRACKING" } - - } - }, - - new ManifestElement() - { - ElementPath = new List { "manifest", "uses-permission" }, - Attributes = new Dictionary - { - { "name", "android.permission.EYE_TRACKING_FINE" } - } - } - }; - - return new ManifestRequirement - { - SupportedXRLoaders = new HashSet() - { - typeof(OpenXRLoader) - }, - NewElements = elementsToAdd, - RemoveElements = elementsToRemove - }; - } } } \ No newline at end of file diff --git a/com.valvesoftware.openxr.utils/Runtime/Features/ValveOpenXRFoveatedRenderingFeature.cs b/com.valvesoftware.openxr.utils/Runtime/Features/ValveOpenXRFoveatedRenderingFeature.cs index c068ff2..c85e7b3 100644 --- a/com.valvesoftware.openxr.utils/Runtime/Features/ValveOpenXRFoveatedRenderingFeature.cs +++ b/com.valvesoftware.openxr.utils/Runtime/Features/ValveOpenXRFoveatedRenderingFeature.cs @@ -154,10 +154,10 @@ public bool eyeTrackedFoveation #else NativeMethods.MetaSetFoveationEyeTracked(_xrSession, value); #endif -#endif +#endif } } - + public bool GetFoveationEyeTrackedCenter(ref Vector2 leftEye, ref Vector2 rightEye) { if (_xrGetFoveationEyeTrackedStateMETA == null) @@ -169,7 +169,7 @@ public bool GetFoveationEyeTrackedCenter(ref Vector2 leftEye, ref Vector2 rightE { return false; } - + XrFoveationEyeTrackedStateMETA eyeTrackedState = new XrFoveationEyeTrackedStateMETA{type = XrStructureType.XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META}; XrResult result = _xrGetFoveationEyeTrackedStateMETA(_xrSession, ref eyeTrackedState); @@ -182,7 +182,7 @@ public bool GetFoveationEyeTrackedCenter(ref Vector2 leftEye, ref Vector2 rightE rightEye.Set(eyeTrackedState.foveationCenter[1].X, eyeTrackedState.foveationCenter[1].Y); return true; } - + #if UNITY_EDITOR protected override void GetValidationChecks(List results, BuildTargetGroup target) { @@ -238,14 +238,17 @@ protected override void GetValidationChecks(List r fixItMessage = "Enable Unity's Foveated Rendering feature" }); #endif - } -#endif + } +#endif protected override void OnSessionCreate(ulong xrSession) { _xrSession = xrSession; + + // Work around for Lepton not knowing about eye-tracking related permissions. + NativeMethods.Internal_SetHasEyeTrackingPermissions(true); } - + protected override void OnSessionStateChange(int oldState, int newState) { if (oldState == (int)XrSessionState.XR_SESSION_STATE_VISIBLE && @@ -258,7 +261,7 @@ protected override void OnSessionStateChange(int oldState, int newState) } } } - + #region OpenXR Plugin DLL Imports and Dependencies internal static class NativeMethods @@ -277,8 +280,11 @@ internal static class NativeMethods [DllImport("UnityOpenXR", EntryPoint = "MetaGetFoveationEyeTracked")] internal static extern void MetaGetFoveationEyeTracked(out bool isEyeTracked); + + [DllImport("UnityOpenXR", EntryPoint = "OculusFoveation_SetHasEyeTrackingPermissions")] + internal static extern void Internal_SetHasEyeTrackingPermissions([MarshalAs(UnmanagedType.I1)] bool value); } - + [StructLayout(LayoutKind.Sequential)] private struct XrFoveationEyeTrackedStateMETA { @@ -288,7 +294,7 @@ private struct XrFoveationEyeTrackedStateMETA public XrVector2f[] foveationCenter; public XrFoveationEyeTrackedStateFlagsMETA flags; } - + [Flags] private enum XrFoveationEyeTrackedStateFlagsMETA { @@ -296,7 +302,7 @@ private enum XrFoveationEyeTrackedStateFlagsMETA } #endregion - + #if UNITY_EDITOR internal class ValveOpenXRFoveatedRenderingFeatureEditorWindow : EditorWindow { @@ -332,7 +338,7 @@ internal enum XrSessionState XR_SESSION_STATE_EXITING = 8, XR_SESSION_STATE_MAX_ENUM = 0x7FFFFFFF } - + internal enum FoveatedRenderingLevel { Off = 0, diff --git a/com.valvesoftware.openxr.utils/package.json b/com.valvesoftware.openxr.utils/package.json index 38af848..b4ec618 100644 --- a/com.valvesoftware.openxr.utils/package.json +++ b/com.valvesoftware.openxr.utils/package.json @@ -1,7 +1,7 @@ { "name": "com.valvesoftware.openxr.utils", "displayName": "Valve OpenXR Utilities", - "version": "1.0.1", + "version": "1.0.2", "description": "The Valve OpenXR Utilities package provides support for OpenXR projects and their access to Unity's OpenXR functionality.", "dependencies": { "com.unity.xr.openxr": "1.10.0",