diff --git a/CHANGELOG.md b/CHANGELOG.md index 28d54169..f4fcfae2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,29 @@ All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -# Notes -When updating the Changelog, please ensure we follow the standards for ordering headers as outlined here: [US-0039](https://standards.ds.unity3d.com/Standards/US-0039/). Specifically: -``` -Under ## headers, ### \ headers are listed in this order: Added, Changed, Deprecated, Removed, Fixed, Security -``` + + +## [1.10.0] - 2024-01-26 + +### Added +* Added `OpenXRSettings.VulkanAdditionalGraphicsQueue` property to request at startup an additional Vulkan graphics queue in devices that require it. The setting can be enabled through the Project settings UI and build code. +* Added `Optimize Buffer Discards (Vulkan)` feature setting option within MetaQuestFeature. +* Added a new optional validation rule to switch to use InputSystem.Controls.StickControl instead of Vector2Control for thumbsticks. StickControl allows more input options for thumbstick-based control, such as acting as both a combined 2D vector, two independent axes or a four-way Dpad with 4 independent buttons. + +### Changed +* Updated project validation rule for Meta Quest Feature - "Select Oculus Touch Interaction Profile or Meta Quest Pro Touch Interaction Profile to pair with." from error to warning to allow other interaction profiles to be enabled as well, like eye gaze or palm pose. + +### Fixed +* Fixed Meta XR `Space Warp` feature crashing issue when trying to access the depth swapchain. +* Fixed Meta XR `Space Warp` depth subimage imageArrayIndex setup wrong issue for multiview render mode. +* Fixed a bug where Palm Pose won't work if the Eye Gaze Interaction Profile is added to the project. +* Fixed "The type 'AnalyticsResult' is defined in an assembly that is not referenced" error thrown. +* Fixed UnitySwapchain destructor to completely destroy swapchains to avoid memory leak. +* Fixed OpenXR Settings UI to not render settings on platforms that aren't supported. +* Fixed Android manifest entries were added when the feature was not enabled. ## [1.9.1] - 2023-10-19 @@ -29,7 +47,7 @@ Under ## headers, ### \ headers are listed in this order: Added, Changed, * Changed MockRuntime and its FeatureSet to public. ### Fixed -* Fixed incorect XR Validation rules after regenerating the OpenXR package settings asset. +* Fixed incorrect XR Validation rules after regenerating the OpenXR package settings asset. * Fixed analytics code being called when disabled. * Fixed latency issue with controller poses. * Fixed an XR_ERROR_SESSION_NOT_RUNNING error if xrRequestExitSession is called when the session is not running. diff --git a/ConformanceAutomation/android.meta b/ConformanceAutomation/android.meta index 622619f0..86ba1b44 100644 --- a/ConformanceAutomation/android.meta +++ b/ConformanceAutomation/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2e30ec8b529b4a7c9d9717dc9c2d5f33 +guid: 0aa9c2f143a4409bb17ea109a3085a69 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/android/arm64.meta b/ConformanceAutomation/android/arm64.meta index 3889e010..d84ff76d 100644 --- a/ConformanceAutomation/android/arm64.meta +++ b/ConformanceAutomation/android/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6789168395dd4015b47018fbbb84e55c +guid: 83d45bca26134f63b412a5ececd064f8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/android/arm64/ConformanceAutomationExt.so.meta b/ConformanceAutomation/android/arm64/ConformanceAutomationExt.so.meta index 094d7bdf..3a0046a9 100644 --- a/ConformanceAutomation/android/arm64/ConformanceAutomationExt.so.meta +++ b/ConformanceAutomation/android/arm64/ConformanceAutomationExt.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aeacd2efb7474576b3675eceb2b6a394 +guid: 809c6d6f30cc4dbd8797a505093b1ee7 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/ConformanceAutomation/android/x64.meta b/ConformanceAutomation/android/x64.meta index 4b28c1fc..bbef0b5f 100644 --- a/ConformanceAutomation/android/x64.meta +++ b/ConformanceAutomation/android/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cb289775e83948c1a1f739764925c913 +guid: 81ca9b4c924d424381a4a595baffaa43 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/android/x64/ConformanceAutomationExt.so.meta b/ConformanceAutomation/android/x64/ConformanceAutomationExt.so.meta index 95b39756..335fbfc3 100644 --- a/ConformanceAutomation/android/x64/ConformanceAutomationExt.so.meta +++ b/ConformanceAutomation/android/x64/ConformanceAutomationExt.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0284db659b84447a9bdfae53d13a1e54 +guid: c34e37aa33f54098800bc3f35aca95a9 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/ConformanceAutomation/osx.meta b/ConformanceAutomation/osx.meta index ac93cb4f..3fd0ba5e 100644 --- a/ConformanceAutomation/osx.meta +++ b/ConformanceAutomation/osx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 71eacc2d60584d35bb0ca6299887cf26 +guid: c08015d3d50343f1af297794429152b6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/osx/ConformanceAutomationExt.dylib b/ConformanceAutomation/osx/ConformanceAutomationExt.dylib index a54c0b78..97bb1701 100644 Binary files a/ConformanceAutomation/osx/ConformanceAutomationExt.dylib and b/ConformanceAutomation/osx/ConformanceAutomationExt.dylib differ diff --git a/ConformanceAutomation/osx/ConformanceAutomationExt.dylib.meta b/ConformanceAutomation/osx/ConformanceAutomationExt.dylib.meta index d04f6000..41bc47d0 100644 --- a/ConformanceAutomation/osx/ConformanceAutomationExt.dylib.meta +++ b/ConformanceAutomation/osx/ConformanceAutomationExt.dylib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 194c7e785fdf433197dd3555c613c90d +guid: cf70c07af7c04bc8a38930c2cd5670de PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/ConformanceAutomation/universalwindows.meta b/ConformanceAutomation/universalwindows.meta index 7c787193..d3b7f425 100644 --- a/ConformanceAutomation/universalwindows.meta +++ b/ConformanceAutomation/universalwindows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dfd5f48fd8424b0d9cd8ead110eaab46 +guid: 28770ebfca054e06970655830d69af81 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/universalwindows/arm32.meta b/ConformanceAutomation/universalwindows/arm32.meta index e3becd5c..953ab997 100644 --- a/ConformanceAutomation/universalwindows/arm32.meta +++ b/ConformanceAutomation/universalwindows/arm32.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 15315425b61f46a6ac0f0b887f28a26d +guid: 333fb991a2d34815b2f500764d10b70e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll b/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll index 60f65feb..c202d963 100644 Binary files a/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll and b/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll differ diff --git a/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll.meta b/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll.meta index 864c87d4..4b60b688 100644 --- a/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll.meta +++ b/ConformanceAutomation/universalwindows/arm32/ConformanceAutomationExt.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f4a40f15fdf24ae5ac57c1b34639b5b3 +guid: 46b9f811e5fb48fba0f3c588004b96b5 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/ConformanceAutomation/universalwindows/arm64.meta b/ConformanceAutomation/universalwindows/arm64.meta index f9d50291..a7e4b073 100644 --- a/ConformanceAutomation/universalwindows/arm64.meta +++ b/ConformanceAutomation/universalwindows/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8a0d6d8bce0743779f35bd3b5cee5acc +guid: 4379251c161a4844be6a373cf4ea000e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll b/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll index 5922d224..6a00d556 100644 Binary files a/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll and b/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll differ diff --git a/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll.meta b/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll.meta index bd095c06..5e0411e1 100644 --- a/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll.meta +++ b/ConformanceAutomation/universalwindows/arm64/ConformanceAutomationExt.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d86c1c9235974b8095a40b5acac4b135 +guid: a03aa70953654467af17954e109c8696 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/ConformanceAutomation/universalwindows/x64.meta b/ConformanceAutomation/universalwindows/x64.meta index 24d0b218..bc1ee608 100644 --- a/ConformanceAutomation/universalwindows/x64.meta +++ b/ConformanceAutomation/universalwindows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dfbf77d9f4ba4af9ae7d1ccbced408d3 +guid: 0f1a350b2c614422bb052f4d3e53bc1e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll b/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll index 961bd93e..39b273f9 100644 Binary files a/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll and b/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll differ diff --git a/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll.meta b/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll.meta index ee8635b2..20a672fb 100644 --- a/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll.meta +++ b/ConformanceAutomation/universalwindows/x64/ConformanceAutomationExt.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 304ba2d06f1244c0a14ebcc09879ddc8 +guid: 51e8e38594a44ea48c535730e4cd86e5 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/ConformanceAutomation/windows.meta b/ConformanceAutomation/windows.meta index c0e62673..209bf985 100644 --- a/ConformanceAutomation/windows.meta +++ b/ConformanceAutomation/windows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6f7948f09dc64dbab043578ae62ed53f +guid: 866e32dc33b547da99d435129cfa60be folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/windows/x64.meta b/ConformanceAutomation/windows/x64.meta index 4223ed2e..c5318ccb 100644 --- a/ConformanceAutomation/windows/x64.meta +++ b/ConformanceAutomation/windows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b63294efe79c47e4a3ef01811e916c9b +guid: 863dd6e8d8ac461f87fd384f02f3c638 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/ConformanceAutomation/windows/x64/ConformanceAutomationExt.dll b/ConformanceAutomation/windows/x64/ConformanceAutomationExt.dll index e714be58..8e3ca0a4 100644 Binary files a/ConformanceAutomation/windows/x64/ConformanceAutomationExt.dll and b/ConformanceAutomation/windows/x64/ConformanceAutomationExt.dll differ diff --git a/ConformanceAutomation/windows/x64/ConformanceAutomationExt.dll.meta b/ConformanceAutomation/windows/x64/ConformanceAutomationExt.dll.meta index df8767b4..a81589de 100644 --- a/ConformanceAutomation/windows/x64/ConformanceAutomationExt.dll.meta +++ b/ConformanceAutomation/windows/x64/ConformanceAutomationExt.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a91af3fb8e584370b217898f1dfc5c4a +guid: a4a9a820cb2c4b758333d4bcb1aae3b2 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Documentation~/index.md b/Documentation~/index.md index f5f10c40..ea11354c 100644 --- a/Documentation~/index.md +++ b/Documentation~/index.md @@ -17,10 +17,11 @@ Unity's OpenXR plug-in should work with any device that supports conformant Open |**Runtime**|**Build target**|**Preferred Graphics API**|**Feature Parity**|**Known Limitations**| |---|---|---|---|---| -|Windows Mixed Reality|Windows 64-bit|DX11|Full feature parity via [Mixed Reality OpenXR Plugin for Unity](https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/openxr-getting-started)|| -|HoloLens 2|UWP arm64|DX11|Full feature parity via [Mixed Reality OpenXR Plugin for Unity](https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/openxr-getting-started)|| +|Windows Mixed Reality|Windows 64-bit|DX11|Full feature parity via [Mixed Reality OpenXR Plugin for Unity](https://learn.microsoft.com/en-us/windows/mixed-reality/develop/unity/unity-development-wmr-overview)|| +|HoloLens 2|UWP arm64|DX11|Full feature parity via [Mixed Reality OpenXR Plugin for Unity](https://learn.microsoft.com/en-us/windows/mixed-reality/develop/unity/unity-development-overview)|| |Oculus PC + Link|Windows 64-bit|DX11|HMD + Controllers|Oculus Integration package features not available| |Meta Quest|Android arm64|Vulkan|HMD + Controllers via [Meta Quest Support Feature](./features/metaquest.md)| +|Magic Leap 2|Android x64|Vulkan|Full feature parity via [Magic Leap Unity Overview OpenXR](https://developer-docs.magicleap.cloud/docs/guides/unity/unity-overview-openxr/)|| |All other conformant runtimes (eg. SteamVR)|Windows 64-bit|DX11|HMD + Controllers|Given the unbounded combinations of possible hardware/software configurations, Unity is unable to test or guarantee that all configurations will work optimally.

SteamVR Plugin features not available| To help the community as a whole, Unity will continue to submit any runtime issues, and contribute conformance tests and specification changes to the Khronos working group. @@ -35,7 +36,7 @@ Additionally, you can access the current OpenXR Runtime through the scripting AP ## Considerations before porting to OpenXR -Unity does not yet provide out-of-the-box solutions to the following when using OpenXR, however there may be platform-specific plugins (eg. [Mixed Reality OpenXR Plugin for Unity](https://docs.microsoft.com/en-us/windows/mixed-reality/develop/unity/openxr-getting-started)) or third party solutions available: +Unity does not yet provide out-of-the-box solutions to the following when using OpenXR, however there may be platform-specific plugins or third party solutions available: * Controller / hand models * Finger tracking @@ -58,7 +59,7 @@ See [Project configuration](xref:openxr-project-config) for additional informati ## Project validation -Project validation is a feature OpenXR has to assess configuration correctness of your project depending on the platform you are planning to build for. Unity will raise errors and warnings at build time if your project is not compatible with OpenXR. +Project validation is a feature the Unity OpenXR package has to assess configuration correctness of your project depending on the platform you are planning to build for. Unity will raise errors and warnings at build time if your project is not compatible with OpenXR. For more information on how project validation works in OpenXR, see [Project validation](xref:openxr-project-config#project-validation). diff --git a/Editor/FeatureSupport/OpenXRFeatureBuildHooks.cs b/Editor/FeatureSupport/OpenXRFeatureBuildHooks.cs index dc88ecef..cad67d03 100644 --- a/Editor/FeatureSupport/OpenXRFeatureBuildHooks.cs +++ b/Editor/FeatureSupport/OpenXRFeatureBuildHooks.cs @@ -15,7 +15,9 @@ namespace UnityEditor.XR.OpenXR.Features /// /// Inherit from this class to get callbacks to hook into the build process when your OpenXR Extension is enabled. /// +#pragma warning disable 0618 public abstract class OpenXRFeatureBuildHooks : IPostGenerateGradleAndroidProject, IPostprocessBuildWithReport, IPreprocessBuildWithReport +#pragma warning restore 0618 #if XR_MGMT_4_4_0_OR_NEWER , IAndroidManifestRequirementProvider #endif @@ -129,13 +131,23 @@ protected virtual void OnProcessBootConfigExt(BuildReport report, BootConfigBuil #if XR_MGMT_4_4_0_OR_NEWER /// - /// Called during build process when collecting requirements for Android Manifest. Implement this function to add, override or remove Android manifest entries. + /// Post process build step for checking if the hooks' related feature is enabled for Android builds If so, the hook can safely provide its Android manifest requirements. /// public virtual ManifestRequirement ProvideManifestRequirement() { - return null; + if (!IsExtensionEnabled(BuildTarget.Android, BuildTargetGroup.Android)) + return null; + + return ProvideManifestRequirementExt(); } + /// + /// Called during build process when collecting requirements for Android Manifest. Implement this function to add, override or remove Android manifest entries. + /// + protected virtual ManifestRequirement ProvideManifestRequirementExt() + { + return null; + } #endif } } diff --git a/Editor/OpenXRBuildProcessor.cs b/Editor/OpenXRBuildProcessor.cs index 9cc91c50..ddfd117b 100644 --- a/Editor/OpenXRBuildProcessor.cs +++ b/Editor/OpenXRBuildProcessor.cs @@ -1,12 +1,18 @@ +using UnityEditor.Build.Reporting; using UnityEditor.XR.Management; +using UnityEditor.XR.OpenXR.Features; using UnityEngine.XR.OpenXR; namespace UnityEditor.XR.OpenXR { internal class OpenXRBuildProcessor : XRBuildHelper { + private const string kRequestAdditionalVulkanGraphicsQueue = "xr-request-additional-vulkan-graphics-queue"; + public override string BuildSettingsKey => Constants.k_SettingsKey; + private readonly BootConfigBuilder _bootConfigBuilder = new BootConfigBuilder(); + public override UnityEngine.Object SettingsForBuildTargetGroup(BuildTargetGroup buildTargetGroup) { EditorBuildSettings.TryGetConfigObject(Constants.k_SettingsKey, out OpenXRPackageSettings packageSettings); @@ -14,5 +20,20 @@ public override UnityEngine.Object SettingsForBuildTargetGroup(BuildTargetGroup return null; return packageSettings.GetSettingsForBuildTargetGroup(buildTargetGroup); } + + public override void OnPreprocessBuild(BuildReport report) + { + base.OnPreprocessBuild(report); + + _bootConfigBuilder.ReadBootConfig(report); + +#if UNITY_STANDALONE_WIN || UNITY_ANDROID + var settings = OpenXREditorSettings.Instance; + if (settings != null) + { + _bootConfigBuilder.SetBootConfigBoolean(kRequestAdditionalVulkanGraphicsQueue, settings.VulkanAdditionalGraphicsQueue); + } +#endif + } } } diff --git a/Editor/OpenXREditorSettings.cs b/Editor/OpenXREditorSettings.cs index ff118b95..18a7c42c 100644 --- a/Editor/OpenXREditorSettings.cs +++ b/Editor/OpenXREditorSettings.cs @@ -103,6 +103,23 @@ struct BuildTargetFeatureSets Dictionary selectedFeatureSets = new Dictionary(); + [SerializeField] bool m_vulkanAdditionalGraphicsQueue = false; + + /// + /// If enabled, when the application begins it will request an additional Vulkan graphics queue. + /// + public bool VulkanAdditionalGraphicsQueue + { + get + { + return m_vulkanAdditionalGraphicsQueue; + } + set + { + m_vulkanAdditionalGraphicsQueue = value; + } + } + public void OnBeforeSerialize() { Keys.Clear(); diff --git a/Editor/PackageSettingsEditor.cs b/Editor/PackageSettingsEditor.cs index 91ae4d90..b637b730 100644 --- a/Editor/PackageSettingsEditor.cs +++ b/Editor/PackageSettingsEditor.cs @@ -3,6 +3,7 @@ using UnityEngine; using UnityEngine.XR.OpenXR; using UnityEditor.XR.OpenXR.Features; +using UnityEngine.Rendering; namespace UnityEditor.XR.OpenXR { @@ -11,6 +12,9 @@ internal class PackageSettingsEditor : UnityEditor.Editor { OpenXRFeatureEditor m_FeatureEditor = null; Vector2 scrollPos = Vector2.zero; +#if XR_MGMT_3_2_0_OR_NEWER + OpenXRManagementSettings managementSettings = new(); +#endif #if XR_MGMT_4_1_0_OR_OLDER static PackageSettingsEditor s_LastPackageSettingsEditor = null; @@ -21,6 +25,7 @@ static class Content public const float k_Space = 15.0f; public static readonly GUIContent k_renderModeLabel = new GUIContent("Render Mode"); + public static readonly GUIContent k_vulkanAdditionalGraphicsQueue = new GUIContent("Additional Graphics Queue (Vulkan)"); public static readonly GUIContent[] k_renderModeOptions = new GUIContent[2] { @@ -70,6 +75,14 @@ public override void OnInspectorGUI() var buildTargetGroup = EditorGUILayout.BeginBuildTargetSelectionGrouping(); OpenXRProjectValidationRulesSetup.SetSelectedBuildTargetGroup(buildTargetGroup); +#if XR_MGMT_3_2_0_OR_NEWER + if (!managementSettings.metadata.loaderMetadata[0].supportedBuildTargets.Contains(buildTargetGroup)) + { + EditorGUILayout.EndBuildTargetSelectionGrouping(); + return; + } +#endif + OpenXRPackageSettings settings = serializedObject.targetObject as OpenXRPackageSettings; scrollPos = EditorGUILayout.BeginScrollView(scrollPos); @@ -81,6 +94,9 @@ public override void OnInspectorGUI() var openXrSettings = settings.GetSettingsForBuildTargetGroup(buildTargetGroup); var serializedOpenXrSettings = new SerializedObject(openXrSettings); + var openXrEditorSettings = OpenXREditorSettings.Instance; + var serializedOpenXrEditorSettings = new SerializedObject(openXrEditorSettings); + EditorGUIUtility.labelWidth = 200; int newRenderMode; @@ -101,12 +117,19 @@ public override void OnInspectorGUI() GUILayout.EndHorizontal(); - DrawPropertiesExcluding(serializedOpenXrSettings, "m_Script", "m_renderMode", "m_symmetricProjection"); + DrawPropertiesExcluding(serializedOpenXrSettings, "m_Script", "m_renderMode", "m_symmetricProjection", "m_optimizeBufferDiscards", "m_vulkanAdditionalGraphicsQueue"); + if (buildTargetGroup == BuildTargetGroup.Android || buildTargetGroup == BuildTargetGroup.Standalone) + { + serializedOpenXrEditorSettings.FindProperty("m_vulkanAdditionalGraphicsQueue").boolValue = + EditorGUILayout.Toggle(Content.k_vulkanAdditionalGraphicsQueue, openXrEditorSettings.VulkanAdditionalGraphicsQueue); + } EditorGUIUtility.labelWidth = 0; if (serializedOpenXrSettings.hasModifiedProperties) serializedOpenXrSettings.ApplyModifiedProperties(); + if (serializedOpenXrEditorSettings.hasModifiedProperties) + serializedOpenXrEditorSettings.ApplyModifiedProperties(); if (buildTargetGroup == BuildTargetGroup.Standalone) { diff --git a/LICENSE.md b/LICENSE.md index 397d6424..d67c78cb 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,4 +1,4 @@ -com.unity.xr.openxr copyright © 2023 Unity Technologies ApS +com.unity.xr.openxr copyright © 2024 Unity Technologies ApS Source code of the package is licensed under the Unity Companion License (see https://unity3d.com/legal/licenses/unity_companion_license); otherwise licensed under the Unity Package Distribution License (see https://unity3d.com/legal/licenses/Unity_Package_Distribution_License ). diff --git a/MetaQuest/Editor/MetaQuestFeatureEditor.cs b/MetaQuest/Editor/MetaQuestFeatureEditor.cs index accf41b4..27f51c87 100644 --- a/MetaQuest/Editor/MetaQuestFeatureEditor.cs +++ b/MetaQuest/Editor/MetaQuestFeatureEditor.cs @@ -34,6 +34,8 @@ struct TargetDeviceProperty private SerializedProperty m_LateLatchingModeProperty; private SerializedProperty m_LateLatchingDebugProperty; + private SerializedProperty optimizeBufferDiscards; + void InitActiveTargetDevices() { activeTargetDevices = new Dictionary(); @@ -60,6 +62,9 @@ void OnEnable() symmetricProjection = serializedObject.FindProperty("symmetricProjection"); + optimizeBufferDiscards = + serializedObject.FindProperty("optimizeBufferDiscards"); + targetDeviceProperties = new List(); InitActiveTargetDevices(); if (activeTargetDevices.Count == 0) @@ -93,6 +98,7 @@ public override void OnInspectorGUI() serializedObject.Update(); EditorGUILayout.LabelField("Rendering Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(symmetricProjection, new GUIContent("Symmetric Projection (Vulkan)")); + EditorGUILayout.PropertyField(optimizeBufferDiscards, new GUIContent("Optimize Buffer Discards (Vulkan)")); EditorGUILayout.Space(); @@ -130,6 +136,7 @@ public override void OnInspectorGUI() var serializedOpenXrSettings = new SerializedObject(androidOpenXRSettings); androidOpenXRSettings.symmetricProjection = symmetricProjection.boolValue; + androidOpenXRSettings.optimizeBufferDiscards = optimizeBufferDiscards.boolValue; serializedOpenXrSettings.ApplyModifiedProperties(); EditorGUIUtility.labelWidth = 0.0f; diff --git a/MetaQuest/Editor/ModifyAndroidManifestMeta.cs b/MetaQuest/Editor/ModifyAndroidManifestMeta.cs index 42fe4d80..42f35f7c 100644 --- a/MetaQuest/Editor/ModifyAndroidManifestMeta.cs +++ b/MetaQuest/Editor/ModifyAndroidManifestMeta.cs @@ -40,7 +40,7 @@ protected override void OnPostprocessBuildExt(BuildReport report) } #if XR_MGMT_4_4_0_OR_NEWER - public override ManifestRequirement ProvideManifestRequirement() + protected override ManifestRequirement ProvideManifestRequirementExt() { var elementsToRemove = new List() { diff --git a/MetaQuest/Runtime/MetaQuestFeature.cs b/MetaQuest/Runtime/MetaQuestFeature.cs index 7412805d..6844cb6a 100644 --- a/MetaQuest/Runtime/MetaQuestFeature.cs +++ b/MetaQuest/Runtime/MetaQuestFeature.cs @@ -64,7 +64,7 @@ internal struct TargetDevice internal bool forceRemoveInternetPermission = false; [SerializeField] - internal bool symmetricProjection; + internal bool symmetricProjection = false; /// /// Uses a PNG in the Assets folder as the system splash screen image. If set, the OS will display the system splash screen as a high quality compositor layer as soon as the app is starting to launch until the app submits the first frame. @@ -72,6 +72,9 @@ internal struct TargetDevice [SerializeField, Tooltip("Uses a PNG in the Assets folder as the system splash screen image. If set, the OS will display the system splash screen as a high quality compositor layer as soon as the app is starting to launch until the app submits the first frame.")] public Texture2D systemSplashScreen; + [SerializeField, Tooltip("Optimization that allows 4x MSAA textures to be memoryless on Vulkan")] + internal bool optimizeBufferDiscards = true; + /// /// Caches validation rules for each build target group requested by . /// @@ -103,8 +106,6 @@ public bool ForceRemoveInternetPermission AddTargetDevice("quest", "Quest", true); AddTargetDevice("quest2", "Quest 2", true); AddTargetDevice("cambria", "Quest Pro", true); - - symmetricProjection = false; } /// @@ -137,6 +138,21 @@ public void AddTargetDevice(string manifestName, string visibleName, bool enable targetDevices.Add(targetDevice); } + private bool SettingsUseVulkan() + { + if (!PlayerSettings.GetUseDefaultGraphicsAPIs(BuildTarget.Android)) + { + GraphicsDeviceType[] apis = PlayerSettings.GetGraphicsAPIs(BuildTarget.Android); + if (apis.Length >= 1 && apis[0] == GraphicsDeviceType.Vulkan) + { + return true; + } + return false; + } + + return true; + } + protected override void GetValidationChecks(List rules, BuildTargetGroup targetGroup) { if (!validationRules.ContainsKey(targetGroup)) @@ -151,7 +167,7 @@ private ValidationRule[] CreateValidationRules(BuildTargetGroup targetGroup) => { new ValidationRule(this) { - message = "Only the Oculus Touch Interaction Profile and Meta Quest Pro Touch Interaction Profile are supported right now.", + message = "Select Oculus Touch Interaction Profile or Meta Quest Pro Touch Interaction Profile to pair with.", checkPredicate = () => { var settings = OpenXRSettings.GetSettingsForBuildTargetGroup(targetGroup); @@ -159,20 +175,17 @@ private ValidationRule[] CreateValidationRules(BuildTargetGroup targetGroup) => return false; bool touchFeatureEnabled = false; - bool otherInteractionFeatureEnabled = false; foreach (var feature in settings.GetFeatures()) { if (feature.enabled) { if ((feature is OculusTouchControllerProfile) || (feature is MetaQuestTouchProControllerProfile)) touchFeatureEnabled = true; - else - otherInteractionFeatureEnabled = true; } } - return touchFeatureEnabled && !otherInteractionFeatureEnabled; + return touchFeatureEnabled; }, - error = true, + error = false, fixIt = () => { SettingsService.OpenProjectSettings("Project/XR Plug-in Management/OpenXR"); }, fixItAutomatic = false, fixItMessage = "Open Project Settings to select Oculus Touch or Meta Quest Pro Touch interaction profiles or select both." @@ -252,17 +265,9 @@ private ValidationRule[] CreateValidationRules(BuildTargetGroup targetGroup) => message = "Symmetric Projection is only supported on Vulkan graphics API", checkPredicate = () => { - if (symmetricProjection) + if (symmetricProjection && !SettingsUseVulkan()) { - if (!PlayerSettings.GetUseDefaultGraphicsAPIs(BuildTarget.Android)) - { - GraphicsDeviceType[] apis = PlayerSettings.GetGraphicsAPIs(BuildTarget.Android); - if (apis.Length >= 1 && apis[0] == GraphicsDeviceType.Vulkan) - { - return true; - } - return false; - } + return false; } return true; }, @@ -299,6 +304,20 @@ private ValidationRule[] CreateValidationRules(BuildTargetGroup targetGroup) => }, error = true, fixItAutomatic = false, + }, + + new ValidationRule(this) + { + message = "Optimize Buffer Discards is only supported on Vulkan graphics API", + checkPredicate = () => + { + if (optimizeBufferDiscards && !SettingsUseVulkan()) + { + return false; + } + + return true; + } } #endif }; diff --git a/MockRuntime/android.meta b/MockRuntime/android.meta index cc3963ca..c9592a78 100644 --- a/MockRuntime/android.meta +++ b/MockRuntime/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 154276fd2f6b4d4a9f5571320e732787 +guid: 75840e7cf5fd4c2180ed84d6e9d292fb folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/MockRuntime/android/arm64.meta b/MockRuntime/android/arm64.meta index 513dda7b..09e2f5e2 100644 --- a/MockRuntime/android/arm64.meta +++ b/MockRuntime/android/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e635a2f8f8e04a73b722e908b1309160 +guid: d920fd5b882c4467909c9c139064d990 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/MockRuntime/android/arm64/libmock_api.so.meta b/MockRuntime/android/arm64/libmock_api.so.meta index 6365c867..77c54cb6 100644 --- a/MockRuntime/android/arm64/libmock_api.so.meta +++ b/MockRuntime/android/arm64/libmock_api.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9e841735734746ec9b5924fd5d9430f5 +guid: 200c88e2759f4e9eb326f8ed6637adb8 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/android/arm64/libmock_runtime.so.meta b/MockRuntime/android/arm64/libmock_runtime.so.meta index 2ef8b4d3..df64263c 100644 --- a/MockRuntime/android/arm64/libmock_runtime.so.meta +++ b/MockRuntime/android/arm64/libmock_runtime.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 00046d9066384d9f9af3688cb9843f53 +guid: 87f2325f8df74b4da9e6772d67a40a19 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/android/arm64/libopenxr_loader.so.meta b/MockRuntime/android/arm64/libopenxr_loader.so.meta index 133cfc16..b1acbc27 100644 --- a/MockRuntime/android/arm64/libopenxr_loader.so.meta +++ b/MockRuntime/android/arm64/libopenxr_loader.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c445ba2ddc024bf1a159cdbbfac6132d +guid: b42cb89abb074fad819507daa74a2c2b PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/android/x64.meta b/MockRuntime/android/x64.meta index f0f99b00..10cd0b29 100644 --- a/MockRuntime/android/x64.meta +++ b/MockRuntime/android/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3653a258964f4e21877205b1a1acb0e1 +guid: 1f0ef61b9ad048dfbfbb0d7391e8b436 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/MockRuntime/android/x64/libmock_api.so.meta b/MockRuntime/android/x64/libmock_api.so.meta index 9cb1d0b0..42726ae8 100644 --- a/MockRuntime/android/x64/libmock_api.so.meta +++ b/MockRuntime/android/x64/libmock_api.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f3748b8860e844f3ad1d27d981cd32ed +guid: 18d5d0317e5b46bba77e5ec6f820fe49 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/android/x64/libmock_runtime.so.meta b/MockRuntime/android/x64/libmock_runtime.so.meta index 7d0804ba..7c733d62 100644 --- a/MockRuntime/android/x64/libmock_runtime.so.meta +++ b/MockRuntime/android/x64/libmock_runtime.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e39469fc208e4a499cd760d60c549d74 +guid: ae1068b153f845c2a354be64fc8db029 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/android/x64/libopenxr_loader.so.meta b/MockRuntime/android/x64/libopenxr_loader.so.meta index ce156dbe..f6aa2608 100644 --- a/MockRuntime/android/x64/libopenxr_loader.so.meta +++ b/MockRuntime/android/x64/libopenxr_loader.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8a4a9420896e42cbb397e9e76488fa70 +guid: 55335d86e0d2480e8716fee155da84dd PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/osx.meta b/MockRuntime/osx.meta index 564226ad..787c8623 100644 --- a/MockRuntime/osx.meta +++ b/MockRuntime/osx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b27d441d295a434092d71ab5420e71ba +guid: a8adb030288b43e98a78890830f536bb folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/MockRuntime/osx/mock_api.dylib b/MockRuntime/osx/mock_api.dylib index 9cfe9dcf..3b64d0e9 100644 Binary files a/MockRuntime/osx/mock_api.dylib and b/MockRuntime/osx/mock_api.dylib differ diff --git a/MockRuntime/osx/mock_api.dylib.meta b/MockRuntime/osx/mock_api.dylib.meta index 01d19ce4..d3c54881 100644 --- a/MockRuntime/osx/mock_api.dylib.meta +++ b/MockRuntime/osx/mock_api.dylib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e6e078060ad04cca8d6681723fa9250a +guid: 4e061957bb104bdc8fbe7bf7b8a18ca6 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/osx/mock_runtime.dylib b/MockRuntime/osx/mock_runtime.dylib index 5f3bb146..08024a5d 100644 Binary files a/MockRuntime/osx/mock_runtime.dylib and b/MockRuntime/osx/mock_runtime.dylib differ diff --git a/MockRuntime/osx/mock_runtime.dylib.meta b/MockRuntime/osx/mock_runtime.dylib.meta index 97abb5d0..a119f3cc 100644 --- a/MockRuntime/osx/mock_runtime.dylib.meta +++ b/MockRuntime/osx/mock_runtime.dylib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 267774371a9b4dbfaca8fa6cfe3d2999 +guid: 79c7661c38664346aab6f47794bfbdfa PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/osx/openxr_loader.dylib b/MockRuntime/osx/openxr_loader.dylib index 3ee61b4f..c9870ea9 100644 Binary files a/MockRuntime/osx/openxr_loader.dylib and b/MockRuntime/osx/openxr_loader.dylib differ diff --git a/MockRuntime/osx/openxr_loader.dylib.meta b/MockRuntime/osx/openxr_loader.dylib.meta index aba45c50..d50324b3 100644 --- a/MockRuntime/osx/openxr_loader.dylib.meta +++ b/MockRuntime/osx/openxr_loader.dylib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 83257f93866747f3b96609bfe7ba24cf +guid: 4b1920e52723434c81247c262093b334 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/windows.meta b/MockRuntime/windows.meta index 59d1758f..4755a93c 100644 --- a/MockRuntime/windows.meta +++ b/MockRuntime/windows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 12f5671bd26a48a3867ab13ec55078c6 +guid: aad8aa95fab64086816a980ed627c08a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/MockRuntime/windows/x64.meta b/MockRuntime/windows/x64.meta index 7c723d09..72ce3421 100644 --- a/MockRuntime/windows/x64.meta +++ b/MockRuntime/windows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c7c7d9dc49f44b9ab94252cbb28f396f +guid: 48ee75bfa43e4344b760c6a71f4fcb93 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/MockRuntime/windows/x64/mock_api.dll b/MockRuntime/windows/x64/mock_api.dll index 7ec97615..0df4b92e 100644 Binary files a/MockRuntime/windows/x64/mock_api.dll and b/MockRuntime/windows/x64/mock_api.dll differ diff --git a/MockRuntime/windows/x64/mock_api.dll.meta b/MockRuntime/windows/x64/mock_api.dll.meta index 5690ad3e..0200afb3 100644 --- a/MockRuntime/windows/x64/mock_api.dll.meta +++ b/MockRuntime/windows/x64/mock_api.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e5a1c23004d34518a0d2e72a6120cf8c +guid: 5dffd683922a40eabf02c8822988ede2 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/windows/x64/mock_runtime.dll b/MockRuntime/windows/x64/mock_runtime.dll index 0a36624d..d43b490f 100644 Binary files a/MockRuntime/windows/x64/mock_runtime.dll and b/MockRuntime/windows/x64/mock_runtime.dll differ diff --git a/MockRuntime/windows/x64/mock_runtime.dll.meta b/MockRuntime/windows/x64/mock_runtime.dll.meta index 9f8c0cc2..88a819f5 100644 --- a/MockRuntime/windows/x64/mock_runtime.dll.meta +++ b/MockRuntime/windows/x64/mock_runtime.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0093d10bea664698830ca5a8da8a8efd +guid: a3a9b894c1224d33bf50767ee86c91ce PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/MockRuntime/windows/x64/openxr_loader.dll b/MockRuntime/windows/x64/openxr_loader.dll index ffdbf9f8..272cf313 100644 Binary files a/MockRuntime/windows/x64/openxr_loader.dll and b/MockRuntime/windows/x64/openxr_loader.dll differ diff --git a/MockRuntime/windows/x64/openxr_loader.dll.meta b/MockRuntime/windows/x64/openxr_loader.dll.meta index 15fff026..28440012 100644 --- a/MockRuntime/windows/x64/openxr_loader.dll.meta +++ b/MockRuntime/windows/x64/openxr_loader.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: afcdf417fe2140698bdb8f64f1a64c00 +guid: d7dcc0d2fade43669240ca6fe59f1167 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Features/Interactions/DPadInteraction.cs b/Runtime/Features/Interactions/DPadInteraction.cs index 88068b40..bb296cf7 100644 --- a/Runtime/Features/Interactions/DPadInteraction.cs +++ b/Runtime/Features/Interactions/DPadInteraction.cs @@ -485,7 +485,8 @@ internal override void AddAdditiveActions(List d.userPath != null && ((String.CompareOrdinal(d.userPath, OpenXRInteractionFeature.UserPaths.leftHand) == 0) || (String.CompareOrdinal(d.userPath, OpenXRInteractionFeature.UserPaths.rightHand) == 0))); if (!validUserPath.Any()) - return; + continue; + //check if interaction profile has thumbstick and/or trackpad bool hasTrackPad = false; bool hasThumbstick = false; diff --git a/Runtime/Features/Interactions/HPReverbG2ControllerProfile.cs b/Runtime/Features/Interactions/HPReverbG2ControllerProfile.cs index 49ffa15f..6fe82f36 100644 --- a/Runtime/Features/Interactions/HPReverbG2ControllerProfile.cs +++ b/Runtime/Features/Interactions/HPReverbG2ControllerProfile.cs @@ -15,6 +15,12 @@ using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl; #endif +#if USE_STICK_CONTROL_THUMBSTICKS +using ThumbstickControl = UnityEngine.InputSystem.Controls.StickControl; // If replaced, make sure the control extends Vector2Control +#else +using ThumbstickControl = UnityEngine.InputSystem.Controls.Vector2Control; +#endif + namespace UnityEngine.XR.OpenXR.Features.Interactions { /// @@ -87,10 +93,10 @@ public class ReverbG2Controller : XRControllerWithRumble public ButtonControl triggerPressed { get; private set; } /// - /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control) that represents the OpenXR binding. + /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control)/[StickControl](xref:UnityEngine.InputSystem.Controls.StickControl) that represents the OpenXR binding. /// [Preserve, InputControl(aliases = new[] { "Primary2DAxis", "Joystick" }, usage = "Primary2DAxis")] - public Vector2Control thumbstick { get; private set; } + public ThumbstickControl thumbstick { get; private set; } /// /// A [ButtonControl](xref:UnityEngine.InputSystem.Controls.ButtonControl) that represents the OpenXR binding. @@ -164,7 +170,7 @@ protected override void FinishSetup() gripPressed = GetChildControl("gripPressed"); trigger = GetChildControl("trigger"); triggerPressed = GetChildControl("triggerPressed"); - thumbstick = GetChildControl("thumbstick"); + thumbstick = GetChildControl("thumbstick"); thumbstickClicked = GetChildControl("thumbstickClicked"); devicePose = GetChildControl("devicePose"); diff --git a/Runtime/Features/Interactions/HTCViveControllerProfile.cs b/Runtime/Features/Interactions/HTCViveControllerProfile.cs index 18445f3b..aaa4b09f 100644 --- a/Runtime/Features/Interactions/HTCViveControllerProfile.cs +++ b/Runtime/Features/Interactions/HTCViveControllerProfile.cs @@ -15,6 +15,12 @@ using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl; #endif +#if USE_STICK_CONTROL_THUMBSTICKS +using ThumbstickControl = UnityEngine.InputSystem.Controls.StickControl; // If replaced, make sure the control extends Vector2Control +#else +using ThumbstickControl = UnityEngine.InputSystem.Controls.Vector2Control; +#endif + namespace UnityEngine.XR.OpenXR.Features.Interactions { /// @@ -81,10 +87,10 @@ public class ViveController : XRControllerWithRumble public ButtonControl triggerPressed { get; private set; } /// - /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control) that represents information from the OpenXR binding. + /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control)/[StickControl](xref:UnityEngine.InputSystem.Controls.StickControl) that represents information from the OpenXR binding. /// [Preserve, InputControl(aliases = new[] { "Primary2DAxis", "touchpadaxes", "touchpad" }, usage = "Primary2DAxis")] - public Vector2Control trackpad { get; private set; } + public ThumbstickControl trackpad { get; private set; } /// /// A [ButtonControl](xref:UnityEngine.InputSystem.Controls.ButtonControl) that represents information from the OpenXR binding. @@ -162,7 +168,7 @@ protected override void FinishSetup() menu = GetChildControl("menu"); trigger = GetChildControl("trigger"); triggerPressed = GetChildControl("triggerPressed"); - trackpad = GetChildControl("trackpad"); + trackpad = GetChildControl("trackpad"); trackpadClicked = GetChildControl("trackpadClicked"); trackpadTouched = GetChildControl("trackpadTouched"); diff --git a/Runtime/Features/Interactions/MetaQuestTouchProControllerProfile.cs b/Runtime/Features/Interactions/MetaQuestTouchProControllerProfile.cs index c7a6f8ec..ae3680df 100644 --- a/Runtime/Features/Interactions/MetaQuestTouchProControllerProfile.cs +++ b/Runtime/Features/Interactions/MetaQuestTouchProControllerProfile.cs @@ -14,6 +14,12 @@ using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl; #endif +#if USE_STICK_CONTROL_THUMBSTICKS +using ThumbstickControl = UnityEngine.InputSystem.Controls.StickControl; // If replaced, make sure the control extends Vector2Control +#else +using ThumbstickControl = UnityEngine.InputSystem.Controls.Vector2Control; +#endif + namespace UnityEngine.XR.OpenXR.Features.Interactions { /// @@ -44,10 +50,10 @@ public class MetaQuestTouchProControllerProfile : OpenXRInteractionFeature public class QuestProTouchController : XRControllerWithRumble { /// - /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control) that represents the OpenXR binding. + /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control)/[StickControl](xref:UnityEngine.InputSystem.Controls.StickControl) that represents the OpenXR binding. /// [Preserve, InputControl(aliases = new[] { "Primary2DAxis", "Joystick" }, usage = "Primary2DAxis")] - public Vector2Control thumbstick { get; private set; } + public ThumbstickControl thumbstick { get; private set; } /// /// A [AxisControl](xref:UnityEngine.InputSystem.Controls.AxisControl) that represents the OpenXR binding. @@ -235,7 +241,8 @@ public class QuestProTouchController : XRControllerWithRumble protected override void FinishSetup() { base.FinishSetup(); - thumbstick = GetChildControl("thumbstick"); + + thumbstick = GetChildControl("thumbstick"); trigger = GetChildControl("trigger"); triggerPressed = GetChildControl("triggerPressed"); triggerTouched = GetChildControl("triggerTouched"); diff --git a/Runtime/Features/Interactions/MicrosoftMotionControllerProfile.cs b/Runtime/Features/Interactions/MicrosoftMotionControllerProfile.cs index 57d142c4..c15d6638 100644 --- a/Runtime/Features/Interactions/MicrosoftMotionControllerProfile.cs +++ b/Runtime/Features/Interactions/MicrosoftMotionControllerProfile.cs @@ -15,6 +15,12 @@ using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl; #endif +#if USE_STICK_CONTROL_THUMBSTICKS +using ThumbstickControl = UnityEngine.InputSystem.Controls.StickControl; // If replaced, make sure the control extends Vector2Control +#else +using ThumbstickControl = UnityEngine.InputSystem.Controls.Vector2Control; +#endif + namespace UnityEngine.XR.OpenXR.Features.Interactions { /// @@ -45,16 +51,16 @@ public class MicrosoftMotionControllerProfile : OpenXRInteractionFeature public class WMRSpatialController : XRControllerWithRumble { /// - /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control) that represents the OpenXR binding. + /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control)/[StickControl](xref:UnityEngine.InputSystem.Controls.StickControl) that represents the OpenXR binding. /// [Preserve, InputControl(aliases = new[] { "Primary2DAxis", "thumbstickaxes", "thumbstick" }, usage = "Primary2DAxis")] - public Vector2Control joystick { get; private set; } + public ThumbstickControl joystick { get; private set; } /// - /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control) that represents the OpenXR binding. + /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control)/[StickControl](xref:UnityEngine.InputSystem.Controls.StickControl) that represents the OpenXR binding. /// [Preserve, InputControl(aliases = new[] { "Secondary2DAxis", "touchpadaxes", "trackpad" }, usage = "Secondary2DAxis")] - public Vector2Control touchpad { get; private set; } + public ThumbstickControl touchpad { get; private set; } /// /// A [AxisControl](xref:UnityEngine.InputSystem.Controls.AxisControl) that represents the OpenXR binding. @@ -164,9 +170,9 @@ public class WMRSpatialController : XRControllerWithRumble protected override void FinishSetup() { base.FinishSetup(); - joystick = GetChildControl("joystick"); + joystick = GetChildControl("joystick"); trigger = GetChildControl("trigger"); - touchpad = GetChildControl("touchpad"); + touchpad = GetChildControl("touchpad"); grip = GetChildControl("grip"); gripPressed = GetChildControl("gripPressed"); menu = GetChildControl("menu"); diff --git a/Runtime/Features/Interactions/OculusTouchControllerProfile.cs b/Runtime/Features/Interactions/OculusTouchControllerProfile.cs index 8dbb0826..fcfffaa1 100644 --- a/Runtime/Features/Interactions/OculusTouchControllerProfile.cs +++ b/Runtime/Features/Interactions/OculusTouchControllerProfile.cs @@ -14,6 +14,12 @@ using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl; #endif +#if USE_STICK_CONTROL_THUMBSTICKS +using ThumbstickControl = UnityEngine.InputSystem.Controls.StickControl; // If replaced, make sure the control extends Vector2Control +#else +using ThumbstickControl = UnityEngine.InputSystem.Controls.Vector2Control; +#endif + namespace UnityEngine.XR.OpenXR.Features.Interactions { /// @@ -44,10 +50,10 @@ public class OculusTouchControllerProfile : OpenXRInteractionFeature public class OculusTouchController : XRControllerWithRumble { /// - /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control) that represents the OpenXR binding. + /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control)/[StickControl](xref:UnityEngine.InputSystem.Controls.StickControl) that represents the OpenXR binding. /// [Preserve, InputControl(aliases = new[] { "Primary2DAxis", "Joystick" }, usage = "Primary2DAxis")] - public Vector2Control thumbstick { get; private set; } + public ThumbstickControl thumbstick { get; private set; } /// /// A [AxisControl](xref:UnityEngine.InputSystem.Controls.AxisControl) that represents the OpenXR binding. @@ -187,7 +193,7 @@ public class OculusTouchController : XRControllerWithRumble protected override void FinishSetup() { base.FinishSetup(); - thumbstick = GetChildControl("thumbstick"); + thumbstick = GetChildControl("thumbstick"); trigger = GetChildControl("trigger"); triggerPressed = GetChildControl("triggerPressed"); triggerTouched = GetChildControl("triggerTouched"); diff --git a/Runtime/Features/Interactions/PalmPoseInteraction.cs b/Runtime/Features/Interactions/PalmPoseInteraction.cs index 787d3131..a4dd7130 100644 --- a/Runtime/Features/Interactions/PalmPoseInteraction.cs +++ b/Runtime/Features/Interactions/PalmPoseInteraction.cs @@ -253,7 +253,7 @@ internal override void AddAdditiveActions(List d.userPath != null && ((String.CompareOrdinal(d.userPath, OpenXRInteractionFeature.UserPaths.leftHand) == 0) || (String.CompareOrdinal(d.userPath, OpenXRInteractionFeature.UserPaths.rightHand) == 0))); if (!validUserPath.Any()) - return; + continue; foreach (var additiveAction in additiveMap.actions.Where(a => a.isAdditive)) { diff --git a/Runtime/Features/Interactions/ValveIndexControllerProfile.cs b/Runtime/Features/Interactions/ValveIndexControllerProfile.cs index 77c47d78..b3806392 100644 --- a/Runtime/Features/Interactions/ValveIndexControllerProfile.cs +++ b/Runtime/Features/Interactions/ValveIndexControllerProfile.cs @@ -15,6 +15,12 @@ using PoseControl = UnityEngine.XR.OpenXR.Input.PoseControl; #endif +#if USE_STICK_CONTROL_THUMBSTICKS +using ThumbstickControl = UnityEngine.InputSystem.Controls.StickControl; // If replaced, make sure the control extends Vector2Control +#else +using ThumbstickControl = UnityEngine.InputSystem.Controls.Vector2Control; +#endif + namespace UnityEngine.XR.OpenXR.Features.Interactions { /// @@ -117,10 +123,10 @@ public class ValveIndexController : XRControllerWithRumble public ButtonControl triggerTouched { get; private set; } /// - /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control) that represents the OpenXR binding. + /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control)/[StickControl](xref:UnityEngine.InputSystem.Controls.StickControl) that represents the OpenXR binding. /// [Preserve, InputControl(aliases = new[] { "joystick", "Primary2DAxis" }, usage = "Primary2DAxis")] - public Vector2Control thumbstick { get; private set; } + public ThumbstickControl thumbstick { get; private set; } /// /// A [ButtonControl](xref:UnityEngine.InputSystem.Controls.ButtonControl) that represents the OpenXR binding. @@ -135,10 +141,10 @@ public class ValveIndexController : XRControllerWithRumble public ButtonControl thumbstickTouched { get; private set; } /// - /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control) that represents the OpenXR binding. + /// A [Vector2Control](xref:UnityEngine.InputSystem.Controls.Vector2Control)/[StickControl](xref:UnityEngine.InputSystem.Controls.StickControl) that represents the OpenXR binding. /// [Preserve, InputControl(aliases = new[] { "touchpad", "Secondary2DAxis" }, usage = "Secondary2DAxis")] - public Vector2Control trackpad { get; private set; } + public ThumbstickControl trackpad { get; private set; } /// /// A [ButtonControl](xref:UnityEngine.InputSystem.Controls.ButtonControl) that represents the OpenXR binding. @@ -222,10 +228,10 @@ protected override void FinishSetup() trigger = GetChildControl("trigger"); triggerPressed = GetChildControl("triggerPressed"); triggerTouched = GetChildControl("triggerTouched"); - thumbstick = GetChildControl("thumbstick"); + thumbstick = GetChildControl("thumbstick"); thumbstickClicked = GetChildControl("thumbstickClicked"); thumbstickTouched = GetChildControl("thumbstickTouched"); - trackpad = GetChildControl("trackpad"); + trackpad = GetChildControl("trackpad"); trackpadTouched = GetChildControl("trackpadTouched"); trackpadForce = GetChildControl("trackpadForce"); devicePose = GetChildControl("devicePose"); diff --git a/Runtime/OpenXRAnalytics.cs b/Runtime/OpenXRAnalytics.cs index a079e324..a2222c61 100644 --- a/Runtime/OpenXRAnalytics.cs +++ b/Runtime/OpenXRAnalytics.cs @@ -26,9 +26,9 @@ internal static class OpenXRAnalytics [Serializable] private struct InitializeEvent -#if UNITY_2023_2_OR_NEWER && UNITY_ANALYTICS +#if UNITY_2023_2_OR_NEWER && ENABLE_CLOUD_SERVICES_ANALYTICS && UNITY_ANALYTICS : IAnalytic.IData -#endif //UNITY_2023_2_OR_NEWER && UNITY_ANALYTICS +#endif //UNITY_2023_2_OR_NEWER && ENABLE_CLOUD_SERVICES_ANALYTICS && UNITY_ANALYTICS { public bool success; public string runtime; @@ -41,7 +41,7 @@ private struct InitializeEvent public string[] failed_features; } -#if UNITY_2023_2_OR_NEWER && UNITY_ANALYTICS +#if UNITY_2023_2_OR_NEWER && ENABLE_CLOUD_SERVICES_ANALYTICS && UNITY_ANALYTICS [AnalyticInfo(eventName: kEventInitialize, vendorKey: kVendorKey, maxEventsPerHour: kMaxEventsPerHour, maxNumberOfElements: kMaxNumberOfElements)] private class XrInitializeAnalytic : IAnalytic { @@ -59,7 +59,7 @@ public bool TryGatherData(out IAnalytic.IData data, [NotNullWhen(false)] out Exc return data != null; } } -#endif //UNITY_2023_2_OR_NEWER && UNITY_ANALYTICS +#endif //UNITY_2023_2_OR_NEWER && ENABLE_CLOUD_SERVICES_ANALYTICS && UNITY_ANALYTICS private static bool Initialize() { @@ -127,8 +127,7 @@ private static InitializeEvent CreateInitializeEvent(bool success) }; } - -#if UNITY_EDITOR && UNITY_ANALYTICS +#if UNITY_EDITOR && ENABLE_CLOUD_SERVICES_ANALYTICS && UNITY_ANALYTICS private static void SendEditorAnalytics(InitializeEvent data) { #if UNITY_2023_2_OR_NEWER @@ -137,11 +136,11 @@ private static void SendEditorAnalytics(InitializeEvent data) EditorAnalytics.SendEventWithLimit(kEventInitialize, data); #endif //UNITY_2023_2_OR_NEWER } -#elif UNITY_ANALYTICS +#elif UNITY_ANALYTICS && ENABLE_CLOUD_SERVICES_ANALYTICS private static void SendPlayerAnalytics(InitializeEvent data) { Analytics.Analytics.SendEvent(kEventInitialize, data); } -#endif //UNITY_EDITOR +#endif //UNITY_EDITOR && ENABLE_CLOUD_SERVICES_ANALYTICS && UNITY_ANALYTICS } } diff --git a/Runtime/OpenXRProjectValidation.cs b/Runtime/OpenXRProjectValidation.cs index 18e5e9ac..89195c88 100644 --- a/Runtime/OpenXRProjectValidation.cs +++ b/Runtime/OpenXRProjectValidation.cs @@ -178,6 +178,21 @@ public static class OpenXRProjectValidation fixIt = EnableInputSystemPoseControlDefine, error = false, errorEnteringPlaymode = false, + }, + new OpenXRFeature.ValidationRule() + { + message = "[Optional] Switch to use StickControl thumbsticks instead of Vector2Control, but may break existing projects that have code dependencies to the Vector2Control type. StickControl allows more input options for thumbstick-based control, such as acting as both a combined 2D vector, two independent axes or a four-way Dpad with 4 independent buttons.", + checkPredicate = () => + { +#if USE_STICK_CONTROL_THUMBSTICKS + return true; +#else + return false; +#endif + }, + fixIt = EnableStickControlThumbsticksDefine, + error = false, + errorEnteringPlaymode = false, } }; @@ -185,12 +200,22 @@ public static class OpenXRProjectValidation internal static void EnableInputSystemPoseControlDefine() { + AddDefineToBuildTarget("USE_INPUT_SYSTEM_POSE_CONTROL"); + } + + internal static void EnableStickControlThumbsticksDefine() + { + AddDefineToBuildTarget("USE_STICK_CONTROL_THUMBSTICKS"); + } + + private static void AddDefineToBuildTarget(string defineName) + { #if UNITY_2021_3_OR_NEWER - NamedBuildTarget[] targets = {NamedBuildTarget.Android, NamedBuildTarget.Standalone, NamedBuildTarget.WindowsStoreApps}; + NamedBuildTarget[] targets = { NamedBuildTarget.Android, NamedBuildTarget.Standalone, NamedBuildTarget.WindowsStoreApps }; for (var index = 0; index < targets.Length; index++) { var defines = PlayerSettings.GetScriptingDefineSymbols(targets[index]); - defines += ";USE_INPUT_SYSTEM_POSE_CONTROL"; + defines += $";{defineName}"; PlayerSettings.SetScriptingDefineSymbols(targets[index], defines); } @@ -199,7 +224,7 @@ internal static void EnableInputSystemPoseControlDefine() for (var index = 0; index < buildTargets.Length; index++) { var defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(buildTargets[index]); - defines += ";USE_INPUT_SYSTEM_POSE_CONTROL"; + defines += $";{defineName}"; PlayerSettings.SetScriptingDefineSymbolsForGroup(buildTargets[index], defines); } #endif diff --git a/Runtime/OpenXRRenderSettings.cs b/Runtime/OpenXRRenderSettings.cs index 36bac79e..42ea10fa 100644 --- a/Runtime/OpenXRRenderSettings.cs +++ b/Runtime/OpenXRRenderSettings.cs @@ -94,11 +94,32 @@ public DepthSubmissionMode depthSubmissionMode } } + [SerializeField] private bool m_optimizeBufferDiscards = false; + + /// + /// Optimization that allows 4x MSAA textures to be memoryless on Vulkan + /// + public bool optimizeBufferDiscards + { + get + { + return m_optimizeBufferDiscards; + } + set + { + if (OpenXRLoaderBase.Instance != null) + Internal_SetOptimizeBufferDiscards(value); + else + m_optimizeBufferDiscards = value; + } + } + private void ApplyRenderSettings() { Internal_SetSymmetricProjection(m_symmetricProjection); Internal_SetRenderMode(m_renderMode); Internal_SetDepthSubmissionMode(m_depthSubmissionMode); + Internal_SetOptimizeBufferDiscards(m_optimizeBufferDiscards); } [SerializeField] private bool m_symmetricProjection = false; @@ -138,5 +159,8 @@ public bool symmetricProjection [DllImport(LibraryName, EntryPoint = "NativeConfig_SetSymmetricProjection")] private static extern void Internal_SetSymmetricProjection(bool enabled); + + [DllImport(LibraryName, EntryPoint = "NativeConfig_SetOptimizeBufferDiscards")] + private static extern void Internal_SetOptimizeBufferDiscards(bool enabled); } } diff --git a/Runtime/OpenXRRestarter.cs b/Runtime/OpenXRRestarter.cs index 6778f100..c80afb5c 100644 --- a/Runtime/OpenXRRestarter.cs +++ b/Runtime/OpenXRRestarter.cs @@ -28,6 +28,7 @@ static OpenXRRestarter() }; #endif TimeBetweenRestartAttempts = 5.0f; + DisableApplicationQuit = false; } public void ResetCallbacks() @@ -49,6 +50,10 @@ public void ResetCallbacks() private Coroutine m_Coroutine; + private static int m_pauseAndRestartCoroutineCount = 0; + + private Object m_PauseAndRestartCoroutineCountLock = new Object(); + private static int m_pauseAndRestartAttempts = 0; public static float TimeBetweenRestartAttempts @@ -65,6 +70,14 @@ public static int PauseAndRestartAttempts } } + internal static int PauseAndRestartCoroutineCount + { + get + { + return m_pauseAndRestartCoroutineCount; + } + } + public static OpenXRRestarter Instance { get @@ -84,6 +97,16 @@ public static OpenXRRestarter Instance } } + /// + /// If true, disables the application quitting, even when Quit is called. + /// Used in testing, which needs to monitor for Quit to be called. + /// + internal static bool DisableApplicationQuit + { + get; + set; + } + /// /// Shutdown the the OpenXR loader and optionally quit the application /// @@ -144,8 +167,26 @@ public void PauseAndRetryInitialization() StartCoroutine(PauseAndRetryInitializationCoroutine(TimeBetweenRestartAttempts)); } - public IEnumerator PauseAndShutdownAndRestartCoroutine(float pauseTimeInSeconds) + private void IncrementPauseAndRestartCoroutineCount() { + lock (m_PauseAndRestartCoroutineCountLock) + { + m_pauseAndRestartCoroutineCount += 1; + } + } + + private void DecrementPauseAndRestartCoroutineCount() + { + lock (m_PauseAndRestartCoroutineCountLock) + { + m_pauseAndRestartCoroutineCount -= 1; + } + } + + private IEnumerator PauseAndShutdownAndRestartCoroutine(float pauseTimeInSeconds) + { + IncrementPauseAndRestartCoroutineCount(); + try { // Wait a few seconds to add delay between restart requests in a restart loop. @@ -160,10 +201,14 @@ public IEnumerator PauseAndShutdownAndRestartCoroutine(float pauseTimeInSeconds) { onAfterCoroutine?.Invoke(); } + + DecrementPauseAndRestartCoroutineCount(); } - public IEnumerator PauseAndRetryInitializationCoroutine(float pauseTimeInSeconds) + private IEnumerator PauseAndRetryInitializationCoroutine(float pauseTimeInSeconds) { + IncrementPauseAndRestartCoroutineCount(); + try { // Wait a few seconds to add delay between restart requests in a restart loop. @@ -182,6 +227,8 @@ public IEnumerator PauseAndRetryInitializationCoroutine(float pauseTimeInSeconds { onAfterCoroutine?.Invoke(); } + + DecrementPauseAndRestartCoroutineCount(); } private IEnumerator RestartCoroutine(bool shouldRestart, bool shouldShutdown) @@ -220,16 +267,18 @@ private IEnumerator RestartCoroutine(bool shouldRestart, bool shouldShutdown) else if (OpenXRRuntime.ShouldQuit()) { onQuit?.Invoke(); -#if !UNITY_INCLUDE_TESTS -#if UNITY_EDITOR - if (EditorApplication.isPlaying || EditorApplication.isPaused) + + if (!DisableApplicationQuit) { - EditorApplication.ExitPlaymode(); - } +#if UNITY_EDITOR + if (EditorApplication.isPlaying || EditorApplication.isPaused) + { + EditorApplication.ExitPlaymode(); + } #else - Application.Quit(); -#endif + Application.Quit(); #endif + } } } finally diff --git a/Runtime/Unity.XR.OpenXR.asmdef b/Runtime/Unity.XR.OpenXR.asmdef index 93ae8514..cc61d98c 100644 --- a/Runtime/Unity.XR.OpenXR.asmdef +++ b/Runtime/Unity.XR.OpenXR.asmdef @@ -17,6 +17,7 @@ { "name": "com.unity.modules.unityanalytics", "expression": "1.0.0", + "excludePlatforms": ["PS5"], "define": "UNITY_ANALYTICS" }, { diff --git a/Runtime/UnitySubsystemsManifest.json b/Runtime/UnitySubsystemsManifest.json index ce4e739f..5c495d48 100644 --- a/Runtime/UnitySubsystemsManifest.json +++ b/Runtime/UnitySubsystemsManifest.json @@ -1,6 +1,6 @@ { "name": "OpenXR XR Plugin", - "version": "1.9.1", + "version": "1.10.0", "libraryName": "UnityOpenXR", "displays": [ { diff --git a/Runtime/android.meta b/Runtime/android.meta index 37a811c1..1ea072fa 100644 --- a/Runtime/android.meta +++ b/Runtime/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1fef13b2060d4cabb577614765efb3b7 +guid: b145bdce1eea43a3861f2a1f34868c24 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/android/arm64.meta b/Runtime/android/arm64.meta index 8333f4c6..e5673cd8 100644 --- a/Runtime/android/arm64.meta +++ b/Runtime/android/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: da7842ce2da547a3aff327558ea99ad3 +guid: b656271b80c5414c9a999d2b0b028f68 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/android/arm64/libUnityOpenXR.so b/Runtime/android/arm64/libUnityOpenXR.so index 1dac1c62..4d94b48b 100644 Binary files a/Runtime/android/arm64/libUnityOpenXR.so and b/Runtime/android/arm64/libUnityOpenXR.so differ diff --git a/Runtime/android/arm64/libUnityOpenXR.so.meta b/Runtime/android/arm64/libUnityOpenXR.so.meta index 023e962c..84cd57fa 100644 --- a/Runtime/android/arm64/libUnityOpenXR.so.meta +++ b/Runtime/android/arm64/libUnityOpenXR.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a6ad8aa037f6464ba7982be027ba67a4 +guid: 28874030bbee4d17ac304b69ffac236e PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/android/x64.meta b/Runtime/android/x64.meta index 3df6380f..1f00ecf4 100644 --- a/Runtime/android/x64.meta +++ b/Runtime/android/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 367b999e6f4f4b8a84a26ea4e1f86627 +guid: fd2ec2b260584ff9ab39c03c136f902a folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/android/x64/libUnityOpenXR.so b/Runtime/android/x64/libUnityOpenXR.so index 058f4db6..ecef3c7d 100644 Binary files a/Runtime/android/x64/libUnityOpenXR.so and b/Runtime/android/x64/libUnityOpenXR.so differ diff --git a/Runtime/android/x64/libUnityOpenXR.so.meta b/Runtime/android/x64/libUnityOpenXR.so.meta index 0aaf936d..1ad66854 100644 --- a/Runtime/android/x64/libUnityOpenXR.so.meta +++ b/Runtime/android/x64/libUnityOpenXR.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6ea6e6d67cb249db92d48d7be67c9678 +guid: 54f9dd6ecc7f4857b1bbee22bcb532e1 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/osx.meta b/Runtime/osx.meta index 7bfc3e7d..92a8794f 100644 --- a/Runtime/osx.meta +++ b/Runtime/osx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cc22995d9507473280c67533d3868b66 +guid: 7143e991165a4b81bb9c4f30e441424c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/osx/UnityOpenXR.dylib b/Runtime/osx/UnityOpenXR.dylib index b6127768..f4894d20 100644 Binary files a/Runtime/osx/UnityOpenXR.dylib and b/Runtime/osx/UnityOpenXR.dylib differ diff --git a/Runtime/osx/UnityOpenXR.dylib.meta b/Runtime/osx/UnityOpenXR.dylib.meta index d115779a..a93c5370 100644 --- a/Runtime/osx/UnityOpenXR.dylib.meta +++ b/Runtime/osx/UnityOpenXR.dylib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bca049fa5ac942cd8328f9467ac77503 +guid: 206e98a9826342e8b5fda724d533d957 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/universalwindows.meta b/Runtime/universalwindows.meta index a84a186d..959560ff 100644 --- a/Runtime/universalwindows.meta +++ b/Runtime/universalwindows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 634be06c8fc04c05bfe91467b15fe03b +guid: e9cc626088a34b05aa606a1235917c35 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/universalwindows/arm32.meta b/Runtime/universalwindows/arm32.meta index 7500a5a0..67c8e194 100644 --- a/Runtime/universalwindows/arm32.meta +++ b/Runtime/universalwindows/arm32.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1b29e950f0a140219878b883235bbedd +guid: fb0c95cb05844ee9832ec63cd8127ebb folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/universalwindows/arm32/UnityOpenXR.dll b/Runtime/universalwindows/arm32/UnityOpenXR.dll index f334a206..ac2a7645 100644 Binary files a/Runtime/universalwindows/arm32/UnityOpenXR.dll and b/Runtime/universalwindows/arm32/UnityOpenXR.dll differ diff --git a/Runtime/universalwindows/arm32/UnityOpenXR.dll.meta b/Runtime/universalwindows/arm32/UnityOpenXR.dll.meta index 2a9b57a5..8fadfd68 100644 --- a/Runtime/universalwindows/arm32/UnityOpenXR.dll.meta +++ b/Runtime/universalwindows/arm32/UnityOpenXR.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e8eb1acc3a904b54b9388384f8bbc9cf +guid: 7f042aefe7f244578095019245542d49 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/universalwindows/arm64.meta b/Runtime/universalwindows/arm64.meta index 07b6bad3..e24b30af 100644 --- a/Runtime/universalwindows/arm64.meta +++ b/Runtime/universalwindows/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c57bdb053bd64962a51d7aa0589b7621 +guid: af4020005e914de8a1c0945a2579f27c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/universalwindows/arm64/UnityOpenXR.dll b/Runtime/universalwindows/arm64/UnityOpenXR.dll index 511aac2a..a4de6c13 100644 Binary files a/Runtime/universalwindows/arm64/UnityOpenXR.dll and b/Runtime/universalwindows/arm64/UnityOpenXR.dll differ diff --git a/Runtime/universalwindows/arm64/UnityOpenXR.dll.meta b/Runtime/universalwindows/arm64/UnityOpenXR.dll.meta index 18c2c361..da76ff29 100644 --- a/Runtime/universalwindows/arm64/UnityOpenXR.dll.meta +++ b/Runtime/universalwindows/arm64/UnityOpenXR.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2bec4426d11042c7aa7506c4b473c606 +guid: 60314913a298433db1cd1e59d0cfd83a PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/universalwindows/x64.meta b/Runtime/universalwindows/x64.meta index 1b6ac16a..b08debd2 100644 --- a/Runtime/universalwindows/x64.meta +++ b/Runtime/universalwindows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b6d9c7723913498f82e8786071f8d818 +guid: 193394aa87c3461184ec3e916f6decc5 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/universalwindows/x64/UnityOpenXR.dll b/Runtime/universalwindows/x64/UnityOpenXR.dll index a27ac509..d0e42df7 100644 Binary files a/Runtime/universalwindows/x64/UnityOpenXR.dll and b/Runtime/universalwindows/x64/UnityOpenXR.dll differ diff --git a/Runtime/universalwindows/x64/UnityOpenXR.dll.meta b/Runtime/universalwindows/x64/UnityOpenXR.dll.meta index 48e0b270..f3c18f4a 100644 --- a/Runtime/universalwindows/x64/UnityOpenXR.dll.meta +++ b/Runtime/universalwindows/x64/UnityOpenXR.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9d61ec673ef34b27ac0b4d30089532c8 +guid: b4d409f26e6040a1bf63b6520c140312 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/windows.meta b/Runtime/windows.meta index 8d408cce..59ca938f 100644 --- a/Runtime/windows.meta +++ b/Runtime/windows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2490aa2adfbe46e08d947ac79e1bbb7d +guid: efd5a0ac3de14ace92bb735bcebfb1ff folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/windows/x64.meta b/Runtime/windows/x64.meta index 9b268477..910c6127 100644 --- a/Runtime/windows/x64.meta +++ b/Runtime/windows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7ca1367eade34d7f8be4eaa946685324 +guid: 9b45c4f60070497ba79b9ca1d51a7ca1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Runtime/windows/x64/UnityOpenXR.dll b/Runtime/windows/x64/UnityOpenXR.dll index 3965709b..cef65441 100644 Binary files a/Runtime/windows/x64/UnityOpenXR.dll and b/Runtime/windows/x64/UnityOpenXR.dll differ diff --git a/Runtime/windows/x64/UnityOpenXR.dll.meta b/Runtime/windows/x64/UnityOpenXR.dll.meta index 2a4efd0d..05df2c91 100644 --- a/Runtime/windows/x64/UnityOpenXR.dll.meta +++ b/Runtime/windows/x64/UnityOpenXR.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cf66e303e40f4f7db80ce358ab2e9eba +guid: 6d757ff84b894ceb84c1f3ed07096f38 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeDebugger/Native~/openxr_runtime_debugger/runtime_debugger.cpp b/RuntimeDebugger/Native~/openxr_runtime_debugger/runtime_debugger.cpp index 2e579fee..4596559a 100644 --- a/RuntimeDebugger/Native~/openxr_runtime_debugger/runtime_debugger.cpp +++ b/RuntimeDebugger/Native~/openxr_runtime_debugger/runtime_debugger.cpp @@ -59,6 +59,12 @@ bool SendToCSharpBaseStructArray(const char* fieldname, structType t, int lenPar return false; } +// Nullptrs +void SendToCSharpNullPtr(const char* fieldname) +{ + SendString(fieldname, "nullptr"); +} + // These includes are order-sensitive // clang-format off #include "serialize_data.h" diff --git a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_atoms.h b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_atoms.h index 7ee85736..5beaaff1 100644 --- a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_atoms.h +++ b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_atoms.h @@ -10,6 +10,9 @@ void SendToCSharp<>(const char* fieldname, XrSystemId t) template <> void SendToCSharp<>(const char* fieldname, XrSystemId* t) { - SendToCSharp(fieldname, (uint64_t)*t); + if (t == nullptr) + SendToCSharpNullPtr(fieldname); + else + SendToCSharp(fieldname, (uint64_t)*t); } #endif diff --git a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_enums.h b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_enums.h index f1396490..56d4597d 100644 --- a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_enums.h +++ b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_enums.h @@ -21,6 +21,12 @@ XR_LIST_ENUM_TYPES(SEND_TO_CSHARP_ENUMS) template <> \ void SendToCSharp<>(const char* fieldname, enumname* t) \ { \ + if (t == nullptr) \ + { \ + SendToCSharpNullPtr(fieldname); \ + return; \ + } \ + \ switch (*t) \ { \ XR_LIST_ENUM_##enumname(SEND_TO_CSHARP_ENUM_INDIVIDUAL) default : SendToCSharp(fieldname, "UNKNOWN"); \ diff --git a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_primitives.h b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_primitives.h index 71ee4c99..463762c4 100644 --- a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_primitives.h +++ b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_primitives.h @@ -12,7 +12,7 @@ void SendToCSharp<>(const char* fieldname, int32_t* t) if (t != nullptr) SendInt32(fieldname, *t); else - SendString(fieldname, "nullptr"); + SendToCSharpNullPtr(fieldname); } template <> @@ -33,7 +33,7 @@ void SendToCSharp<>(const char* fieldname, uint32_t* t) if (t != nullptr) SendUInt32(fieldname, *t); else - SendString(fieldname, "nullptr"); + SendToCSharpNullPtr(fieldname); } template <> @@ -54,7 +54,7 @@ void SendToCSharp<>(const char* fieldname, float* t) if (t != nullptr) SendFloat(fieldname, *t); else - SendString(fieldname, "nullptr"); + SendToCSharpNullPtr(fieldname); } template <> @@ -63,7 +63,7 @@ void SendToCSharp<>(const char* fieldname, char* t) if (t != nullptr) SendString(fieldname, t); else - SendString(fieldname, "nullptr"); + SendToCSharpNullPtr(fieldname); } template <> @@ -72,7 +72,7 @@ void SendToCSharp<>(const char* fieldname, char const* t) if (t != nullptr) SendString(fieldname, t); else - SendString(fieldname, "nullptr"); + SendToCSharpNullPtr(fieldname); } #if XR_TYPE_SAFE_HANDLES diff --git a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_structs.h b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_structs.h index 87bd78c3..821973a2 100644 --- a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_structs.h +++ b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_structs.h @@ -85,6 +85,12 @@ XR_LIST_STRUCTURE_TYPES(SEND_TO_CSHARP_STRUCT_CONST_PTR) template <> \ void SendToCSharp<>(const char* fieldname, structname* t) \ { \ + if (t == nullptr) \ + { \ + SendToCSharpNullPtr(fieldname); \ + return; \ + } \ + \ StartStruct(fieldname, #structname); \ XR_LIST_STRUCT_##structname(SEND_TO_CSHARP_INDIVIDUAL_FIELDS_PTR); \ XR_LIST_STRUCT_ARRAYS_##structname(SEND_TO_CSHARP_ARRAYS_PTR); \ @@ -95,6 +101,12 @@ XR_LIST_STRUCTURE_TYPES(SEND_TO_CSHARP_STRUCT_CONST_PTR) template <> \ void SendToCSharp<>(const char* fieldname, const structname* t) \ { \ + if (t == nullptr) \ + { \ + SendToCSharpNullPtr(fieldname); \ + return; \ + } \ + \ StartStruct(fieldname, #structname); \ XR_LIST_STRUCT_##structname(SEND_TO_CSHARP_INDIVIDUAL_FIELDS_PTR); \ XR_LIST_STRUCT_ARRAYS_##structname(SEND_TO_CSHARP_ARRAYS_PTR); \ diff --git a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_structs_base.h b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_structs_base.h index 49a688ad..d78b9ad7 100644 --- a/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_structs_base.h +++ b/RuntimeDebugger/Native~/openxr_runtime_debugger/serialize_structs_base.h @@ -36,6 +36,12 @@ XR_LIST_BASE_STRUCTS(SEND_TO_CSHARP_BASE_STRUCT) template <> \ void SendToCSharp<>(const char* fieldname, structType* t) \ { \ + if (t == nullptr) \ + { \ + SendToCSharpNullPtr(fieldname); \ + return; \ + } \ + \ switch (t->type) \ { \ XR_LIST_BASE_STRUCT_TYPES_##structType(BASE_TO_TYPE_PTR); \ @@ -60,6 +66,12 @@ XR_LIST_BASE_STRUCTS(SEND_TO_CSHARP_BASE_STRUCT_PTR) template <> \ void SendToCSharp<>(const char* fieldname, structType const* t) \ { \ + if (t == nullptr) \ + { \ + SendToCSharpNullPtr(fieldname); \ + return; \ + } \ + \ switch (t->type) \ { \ XR_LIST_BASE_STRUCT_TYPES_##structType(BASE_TO_TYPE_CONST_PTR); \ @@ -90,7 +102,7 @@ XR_LIST_BASE_STRUCTS(SEND_TO_CSHARP_BASE_STRUCT_CONST_PTR) { \ if (t == nullptr) \ { \ - SendToCSharp(fieldname, "nullptr"); \ + SendToCSharpNullPtr(fieldname); \ return true; \ } \ \ @@ -121,7 +133,7 @@ XR_LIST_BASE_STRUCTS(SEND_TO_CSHARP_BASE_STRUCT_ARRAY) { \ if (t == nullptr || t[0] == nullptr) \ { \ - SendToCSharp(fieldname, "nullptr"); \ + SendToCSharpNullPtr(fieldname); \ return true; \ } \ \ @@ -155,7 +167,7 @@ XR_LIST_BASE_STRUCTS(SEND_TO_CSHARP_BASE_STRUCT_ARRAY_PTR) { \ if (t == nullptr || t[0] == nullptr) \ { \ - SendToCSharp(fieldname, "nullptr"); \ + SendToCSharpNullPtr(fieldname); \ return true; \ } \ \ diff --git a/RuntimeDebugger/android.meta b/RuntimeDebugger/android.meta index 1b728ee9..25fdeba3 100644 --- a/RuntimeDebugger/android.meta +++ b/RuntimeDebugger/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: efdde23c81ac4969bb22ce7e4507f990 +guid: 96d129f7118f4e1eae46d6470b5333cc folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/android/arm64.meta b/RuntimeDebugger/android/arm64.meta index f5ded15f..d930a719 100644 --- a/RuntimeDebugger/android/arm64.meta +++ b/RuntimeDebugger/android/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 234942332396475eb0eabb47ec61eafa +guid: 5b9c555a6c4d4ab8b6c274dbac663c24 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/android/arm64/libopenxr_runtime_debugger.so b/RuntimeDebugger/android/arm64/libopenxr_runtime_debugger.so index 2cab8ba0..b58a46cd 100644 Binary files a/RuntimeDebugger/android/arm64/libopenxr_runtime_debugger.so and b/RuntimeDebugger/android/arm64/libopenxr_runtime_debugger.so differ diff --git a/RuntimeDebugger/android/arm64/libopenxr_runtime_debugger.so.meta b/RuntimeDebugger/android/arm64/libopenxr_runtime_debugger.so.meta index 87d6bec5..c30af74b 100644 --- a/RuntimeDebugger/android/arm64/libopenxr_runtime_debugger.so.meta +++ b/RuntimeDebugger/android/arm64/libopenxr_runtime_debugger.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 984ef69ee72c4174bc67e105612b19ad +guid: 9aea248a777a472cb67212deb4edef73 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeDebugger/android/x64.meta b/RuntimeDebugger/android/x64.meta index 3f587033..377faaca 100644 --- a/RuntimeDebugger/android/x64.meta +++ b/RuntimeDebugger/android/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 70c04bdf9b0e44c586c29366bf0de17d +guid: 9cf618c44b4247a28580d896eba0243b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/android/x64/libopenxr_runtime_debugger.so b/RuntimeDebugger/android/x64/libopenxr_runtime_debugger.so index a0793cb0..a4f8da51 100644 Binary files a/RuntimeDebugger/android/x64/libopenxr_runtime_debugger.so and b/RuntimeDebugger/android/x64/libopenxr_runtime_debugger.so differ diff --git a/RuntimeDebugger/android/x64/libopenxr_runtime_debugger.so.meta b/RuntimeDebugger/android/x64/libopenxr_runtime_debugger.so.meta index 2cbb5761..5a5fb740 100644 --- a/RuntimeDebugger/android/x64/libopenxr_runtime_debugger.so.meta +++ b/RuntimeDebugger/android/x64/libopenxr_runtime_debugger.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dd93a7c4ec844db6a6a22cdf656113c5 +guid: 94d912d0764b4364858dcf61a4dca61c PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeDebugger/osx.meta b/RuntimeDebugger/osx.meta index 6e0b6eae..269871aa 100644 --- a/RuntimeDebugger/osx.meta +++ b/RuntimeDebugger/osx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2ba0cd2c3ab24fb9ae9a100a38189e02 +guid: 9ce8852edf8841e4abe3c913b0f6fcde folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/osx/openxr_runtime_debugger.dylib b/RuntimeDebugger/osx/openxr_runtime_debugger.dylib index 4f286022..0f7f64c3 100644 Binary files a/RuntimeDebugger/osx/openxr_runtime_debugger.dylib and b/RuntimeDebugger/osx/openxr_runtime_debugger.dylib differ diff --git a/RuntimeDebugger/osx/openxr_runtime_debugger.dylib.meta b/RuntimeDebugger/osx/openxr_runtime_debugger.dylib.meta index 489ac142..636c947d 100644 --- a/RuntimeDebugger/osx/openxr_runtime_debugger.dylib.meta +++ b/RuntimeDebugger/osx/openxr_runtime_debugger.dylib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f6b718176e6746a5bba7e1f0b5c940d5 +guid: 2d329c843dc644bd95d6197a0e2b7cec PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeDebugger/universalwindows.meta b/RuntimeDebugger/universalwindows.meta index 472362c5..b9e47cce 100644 --- a/RuntimeDebugger/universalwindows.meta +++ b/RuntimeDebugger/universalwindows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9b792ec1f2824b32b0ae186d83b47875 +guid: 70d6162c6eed44689410b545802bb2ba folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/universalwindows/arm32.meta b/RuntimeDebugger/universalwindows/arm32.meta index 9d6b48fa..a4b2c863 100644 --- a/RuntimeDebugger/universalwindows/arm32.meta +++ b/RuntimeDebugger/universalwindows/arm32.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9dc851f98425450bb431184f23728004 +guid: d0523dcf9c5c420f9b105ee0527f2088 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/universalwindows/arm32/openxr_runtime_debugger.dll b/RuntimeDebugger/universalwindows/arm32/openxr_runtime_debugger.dll index bc5e83cf..f46227b8 100644 Binary files a/RuntimeDebugger/universalwindows/arm32/openxr_runtime_debugger.dll and b/RuntimeDebugger/universalwindows/arm32/openxr_runtime_debugger.dll differ diff --git a/RuntimeDebugger/universalwindows/arm32/openxr_runtime_debugger.dll.meta b/RuntimeDebugger/universalwindows/arm32/openxr_runtime_debugger.dll.meta index 14bff7d3..184d5ab8 100644 --- a/RuntimeDebugger/universalwindows/arm32/openxr_runtime_debugger.dll.meta +++ b/RuntimeDebugger/universalwindows/arm32/openxr_runtime_debugger.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6cd63b3ccb6f49c5893a195195da1913 +guid: ae27f4c5b6944826b2071d502efcd72b PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeDebugger/universalwindows/arm64.meta b/RuntimeDebugger/universalwindows/arm64.meta index 5367eac8..de1ee12b 100644 --- a/RuntimeDebugger/universalwindows/arm64.meta +++ b/RuntimeDebugger/universalwindows/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0f1ba3da7cf64336b25cb4066fcb4da9 +guid: 4219cf4648d94b0fa8f0011f3bb7b24f folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/universalwindows/arm64/openxr_runtime_debugger.dll b/RuntimeDebugger/universalwindows/arm64/openxr_runtime_debugger.dll index 0ee2ff49..9d2d8422 100644 Binary files a/RuntimeDebugger/universalwindows/arm64/openxr_runtime_debugger.dll and b/RuntimeDebugger/universalwindows/arm64/openxr_runtime_debugger.dll differ diff --git a/RuntimeDebugger/universalwindows/arm64/openxr_runtime_debugger.dll.meta b/RuntimeDebugger/universalwindows/arm64/openxr_runtime_debugger.dll.meta index f3a85326..b100f574 100644 --- a/RuntimeDebugger/universalwindows/arm64/openxr_runtime_debugger.dll.meta +++ b/RuntimeDebugger/universalwindows/arm64/openxr_runtime_debugger.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c8b7120e2de746efac3e756fef7ae18c +guid: 9559405ce7ce469dbb03f380a2776b3b PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeDebugger/universalwindows/x64.meta b/RuntimeDebugger/universalwindows/x64.meta index 075f342d..9c074f42 100644 --- a/RuntimeDebugger/universalwindows/x64.meta +++ b/RuntimeDebugger/universalwindows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e563b9110c244ea38d0ea23f6b37e032 +guid: d746f81683794b4dbc3e94ef0336db64 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/universalwindows/x64/openxr_runtime_debugger.dll b/RuntimeDebugger/universalwindows/x64/openxr_runtime_debugger.dll index b2d7062e..63b61877 100644 Binary files a/RuntimeDebugger/universalwindows/x64/openxr_runtime_debugger.dll and b/RuntimeDebugger/universalwindows/x64/openxr_runtime_debugger.dll differ diff --git a/RuntimeDebugger/universalwindows/x64/openxr_runtime_debugger.dll.meta b/RuntimeDebugger/universalwindows/x64/openxr_runtime_debugger.dll.meta index 45ed4683..77a186f7 100644 --- a/RuntimeDebugger/universalwindows/x64/openxr_runtime_debugger.dll.meta +++ b/RuntimeDebugger/universalwindows/x64/openxr_runtime_debugger.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3efa923eccb444438bc2efa74186adf5 +guid: 89d1137aec5840d284663f6b17032ee9 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeDebugger/windows.meta b/RuntimeDebugger/windows.meta index e5e4bb62..3e6f89ca 100644 --- a/RuntimeDebugger/windows.meta +++ b/RuntimeDebugger/windows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: eb5c432cc76d4374a65d5a03e0b65a9e +guid: d349b0610083448ab918fa3f24ee15b0 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/windows/x64.meta b/RuntimeDebugger/windows/x64.meta index 033ade22..bbf4337a 100644 --- a/RuntimeDebugger/windows/x64.meta +++ b/RuntimeDebugger/windows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 49b2a10f005947bfac8006f78f9b1daa +guid: ab43755319564aa680da0f14d6e89447 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeDebugger/windows/x64/openxr_runtime_debugger.dll b/RuntimeDebugger/windows/x64/openxr_runtime_debugger.dll index 06f9a04d..77f8dc10 100644 Binary files a/RuntimeDebugger/windows/x64/openxr_runtime_debugger.dll and b/RuntimeDebugger/windows/x64/openxr_runtime_debugger.dll differ diff --git a/RuntimeDebugger/windows/x64/openxr_runtime_debugger.dll.meta b/RuntimeDebugger/windows/x64/openxr_runtime_debugger.dll.meta index 7d8a6e5a..5fa6654b 100644 --- a/RuntimeDebugger/windows/x64/openxr_runtime_debugger.dll.meta +++ b/RuntimeDebugger/windows/x64/openxr_runtime_debugger.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5e3dadc2539a428f8bcf61f36af17e20 +guid: 88494566a5f4496e9433bcb9a1aa5071 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeLoaders/android.meta b/RuntimeLoaders/android.meta index 2a1a4064..5fa4c2f1 100644 --- a/RuntimeLoaders/android.meta +++ b/RuntimeLoaders/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d075a01bb12b4402a922b4d38da76718 +guid: 1a040a5f881449b984766e6491e531cb folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeLoaders/android/openxr_loader.aar.meta b/RuntimeLoaders/android/openxr_loader.aar.meta index 24a2676e..37d1740f 100644 --- a/RuntimeLoaders/android/openxr_loader.aar.meta +++ b/RuntimeLoaders/android/openxr_loader.aar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bda9ec3bbe5b4216baa764bc386a368d +guid: 9f366fef40ca4dc89637fe062585ab93 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeLoaders/universalwindows.meta b/RuntimeLoaders/universalwindows.meta index 0ccdc02d..a51b1bf9 100644 --- a/RuntimeLoaders/universalwindows.meta +++ b/RuntimeLoaders/universalwindows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7342107b17d94b4badb7b784954e8b1b +guid: d5d9abcd2c0e4631bc92b7954b6588f2 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeLoaders/universalwindows/arm32.meta b/RuntimeLoaders/universalwindows/arm32.meta index eda2e6e1..3fc7cfc0 100644 --- a/RuntimeLoaders/universalwindows/arm32.meta +++ b/RuntimeLoaders/universalwindows/arm32.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d56ea69bc89b4cd58db325b06884df93 +guid: 1cdb4f41c4df48c287e534f33c618885 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeLoaders/universalwindows/arm32/openxr_loader.dll.meta b/RuntimeLoaders/universalwindows/arm32/openxr_loader.dll.meta index c65c4853..4221813f 100644 --- a/RuntimeLoaders/universalwindows/arm32/openxr_loader.dll.meta +++ b/RuntimeLoaders/universalwindows/arm32/openxr_loader.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 34f2b1918e7643868b61880432b4ab74 +guid: 63567e50f2ec4f8a942b97f59a89999f PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeLoaders/universalwindows/arm64.meta b/RuntimeLoaders/universalwindows/arm64.meta index 9a6376d6..2fd73b2a 100644 --- a/RuntimeLoaders/universalwindows/arm64.meta +++ b/RuntimeLoaders/universalwindows/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 98792c53c9de4fe59f9f8ccbd3017519 +guid: 70d5357dfa5b44f1a7ed532904ec00e6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeLoaders/universalwindows/arm64/openxr_loader.dll.meta b/RuntimeLoaders/universalwindows/arm64/openxr_loader.dll.meta index 182905af..0749e452 100644 --- a/RuntimeLoaders/universalwindows/arm64/openxr_loader.dll.meta +++ b/RuntimeLoaders/universalwindows/arm64/openxr_loader.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a13f449402ad408cb54efc54a373274d +guid: 4f4d6c05fe5d44a5805249005cde37e8 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeLoaders/universalwindows/x64.meta b/RuntimeLoaders/universalwindows/x64.meta index 45cc0bd6..4c232a83 100644 --- a/RuntimeLoaders/universalwindows/x64.meta +++ b/RuntimeLoaders/universalwindows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 283ab7d82bed4c61bba93d85031135ea +guid: b0fe4050eec244e4bbd67394bfc2e8a9 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeLoaders/universalwindows/x64/openxr_loader.dll.meta b/RuntimeLoaders/universalwindows/x64/openxr_loader.dll.meta index 86dd0f93..626efd74 100644 --- a/RuntimeLoaders/universalwindows/x64/openxr_loader.dll.meta +++ b/RuntimeLoaders/universalwindows/x64/openxr_loader.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c1f5a188bf934b94bb48a5b2e212e874 +guid: ddc419dd30e94eb9bdb664ee24c7a2c5 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/RuntimeLoaders/windows.meta b/RuntimeLoaders/windows.meta index 4adb8a09..a08b322b 100644 --- a/RuntimeLoaders/windows.meta +++ b/RuntimeLoaders/windows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3377023128d440b0ae2258a745e05f79 +guid: 03e598e1d7d84d2fb77a18a5137f29a1 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeLoaders/windows/x64.meta b/RuntimeLoaders/windows/x64.meta index 48693144..0138cd52 100644 --- a/RuntimeLoaders/windows/x64.meta +++ b/RuntimeLoaders/windows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b99b47d9fa4a4a6294144ccb361235ec +guid: 8467dd2d183247a78d536602ff8f4edc folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/RuntimeLoaders/windows/x64/openxr_loader.dll.meta b/RuntimeLoaders/windows/x64/openxr_loader.dll.meta index 13a02394..5242b3b0 100644 --- a/RuntimeLoaders/windows/x64/openxr_loader.dll.meta +++ b/RuntimeLoaders/windows/x64/openxr_loader.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4f7a3e96d9924734809886e52b917da0 +guid: 82dcbf281fc84172a9a04bc16b43b936 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/android.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/android.meta index 054e617a..3b6561b7 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/android.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 403fd36120e249649383e85aa2cf77b2 +guid: c01a07f3585f48c1a8b5f60d390a7bb8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/android/arm64.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/android/arm64.meta index d5d3a1a1..68a3bfe1 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/android/arm64.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/android/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ba4835a815f24a8fbc21e7aba871b59d +guid: 5e38274266c84810b854c94219006744 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/android/x64.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/android/x64.meta index a4cf7c4e..d5af099c 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/android/x64.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/android/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3053119715434b0185b62c1d3b2ef45b +guid: 6b1690a244074d2bb57f0f044a7b6d6b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/osx.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/osx.meta index 75ddcc0d..f108f4eb 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/osx.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/osx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8dbb7f82fec44f13a6ccfcf0bb4a9d4b +guid: e1e4c9e5a43f4d64b10d6a9a4703adf8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/osx/InterceptFeaturePlugin.dylib b/Samples~/InterceptFeature/InterceptFeaturePlugin/osx/InterceptFeaturePlugin.dylib index a031b261..6eeb69db 100644 Binary files a/Samples~/InterceptFeature/InterceptFeaturePlugin/osx/InterceptFeaturePlugin.dylib and b/Samples~/InterceptFeature/InterceptFeaturePlugin/osx/InterceptFeaturePlugin.dylib differ diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/osx/InterceptFeaturePlugin.dylib.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/osx/InterceptFeaturePlugin.dylib.meta index 9407ab8b..05964822 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/osx/InterceptFeaturePlugin.dylib.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/osx/InterceptFeaturePlugin.dylib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6eff1dbe1f8f4652992e25126a45f56a +guid: 708d74e9526f4c80be11f1b06a2c12cb PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows.meta index 65c9ff67..03569f66 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 929e757493e0431892cae1ad8f0ddb9b +guid: 9c18fe579b5e49f3a898dc4cd3f5a62e folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/arm32.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/arm32.meta index 1750e0ff..8c2a4a0c 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/arm32.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/arm32.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4570d2535af94ec9b2959681519a50d8 +guid: 32d312e7943c4436b7c2a431d4a2fba4 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/arm64.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/arm64.meta index 26013135..6bdf73b6 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/arm64.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 12ec0fd139b049aebfd3b182a9b271d7 +guid: 1865649e75a347a4ba7f721dbbc09c75 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/x64.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/x64.meta index 111a8fa2..74884458 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/x64.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/universalwindows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3ff232dc06d0409589cb6be70785c5e2 +guid: a9e8f50c78e041aa9b824c657a0abc00 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/windows.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/windows.meta index 4cf51457..d3d97d49 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/windows.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/windows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 29dbc2c380874600a3aeff30271b228b +guid: 32e288a99a3c4a48b435ad52856d5350 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/windows/x64.meta b/Samples~/InterceptFeature/InterceptFeaturePlugin/windows/x64.meta index e987ff45..b27c11bb 100644 --- a/Samples~/InterceptFeature/InterceptFeaturePlugin/windows/x64.meta +++ b/Samples~/InterceptFeature/InterceptFeaturePlugin/windows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c26bf835c34d4a95a1326fdb06ab444d +guid: 87e7224332fb4db3ae3e1a6ef66cd381 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/InterceptFeature/InterceptFeaturePlugin/windows/x64/InterceptFeaturePlugin.dll b/Samples~/InterceptFeature/InterceptFeaturePlugin/windows/x64/InterceptFeaturePlugin.dll index c715d370..33afa9e2 100644 Binary files a/Samples~/InterceptFeature/InterceptFeaturePlugin/windows/x64/InterceptFeaturePlugin.dll and b/Samples~/InterceptFeature/InterceptFeaturePlugin/windows/x64/InterceptFeaturePlugin.dll differ diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/android.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/android.meta index f77df6df..2c9a0737 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/android.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/android.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 85a4de4aa7ec4027ad4eee0687ad17e0 +guid: e3c05b59b847436f9b2848f550fa1fa6 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/android/arm64.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/android/arm64.meta index 83d88f6d..84f2d4fc 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/android/arm64.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/android/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cbecaf139b7547b6812ce713e621c6fa +guid: bef3c630bf464734a8f30c6aedc7ab46 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/android/arm64/libMeshingFeaturePlugin.so.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/android/arm64/libMeshingFeaturePlugin.so.meta index a0546ef1..02cf279c 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/android/arm64/libMeshingFeaturePlugin.so.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/android/arm64/libMeshingFeaturePlugin.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 72a09659b45444b0a368f438cd7a17d3 +guid: 716749feea4a42539afca2f3bc0a111e PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/android/x64.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/android/x64.meta index 260ff11f..7a5e747c 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/android/x64.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/android/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ad1b9e1e45a2487496b96a77141a0e09 +guid: 9089c6ef4f2445bc92e5bdf285f58c06 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/android/x64/libMeshingFeaturePlugin.so.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/android/x64/libMeshingFeaturePlugin.so.meta index bb5b8265..51904094 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/android/x64/libMeshingFeaturePlugin.so.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/android/x64/libMeshingFeaturePlugin.so.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d1f1196691434b14ba3d13329321616a +guid: 57852498f96544f8aca690e77eb61d3d PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/osx.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/osx.meta index 5461e47c..714162f1 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/osx.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/osx.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 426dd34cdb9f4197b43a2fa5ab4c9f58 +guid: 91e9106adf464986a63222709ae8d0c8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/osx/MeshingFeaturePlugin.dylib b/Samples~/MeshingFeature/MeshingFeaturePlugin/osx/MeshingFeaturePlugin.dylib index facfc82a..e24261e8 100644 Binary files a/Samples~/MeshingFeature/MeshingFeaturePlugin/osx/MeshingFeaturePlugin.dylib and b/Samples~/MeshingFeature/MeshingFeaturePlugin/osx/MeshingFeaturePlugin.dylib differ diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/osx/MeshingFeaturePlugin.dylib.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/osx/MeshingFeaturePlugin.dylib.meta index 1bdbeca3..0bfdd61e 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/osx/MeshingFeaturePlugin.dylib.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/osx/MeshingFeaturePlugin.dylib.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3289119d91f046cc8fe52a0779c017ae +guid: 8283c2effc1c4dac8980890c0fcddad2 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows.meta index 7688f804..a8690092 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1eedde7901ad406081c59639958db9b9 +guid: aa7de701441a4e83ba164e7bc75481e8 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/arm32.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/arm32.meta index 468a6fe7..3c5878c2 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/arm32.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/arm32.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d8ac40bd9b8248c7a62e1eb46889b89f +guid: cf5f8826959a4ab098a108fc9f23e200 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/arm64.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/arm64.meta index 8cf04c03..a9c810ca 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/arm64.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/arm64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: df779940e79a41c5bfc60dfaf81fb1a9 +guid: 70ef96868b1e4080913181cc2803369c folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/x64.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/x64.meta index a4d6e965..cc2f1ead 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/x64.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ff221e3c53554849b589e912e48a6a0f +guid: 9820c3e5dbda407bb8b2976979c8a704 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/x64/MeshingFeaturePlugin.dll b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/x64/MeshingFeaturePlugin.dll index 7459799c..ec8f53b1 100644 Binary files a/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/x64/MeshingFeaturePlugin.dll and b/Samples~/MeshingFeature/MeshingFeaturePlugin/universalwindows/x64/MeshingFeaturePlugin.dll differ diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/windows.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/windows.meta index bf8dc539..0657d112 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/windows.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/windows.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c03ec0de396146d79fca9743ebfeacf2 +guid: 315a8e52eb8149828744cd67e1aaf624 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64.meta index 22888d96..c3fcf5c7 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b0f75bacf4f64debbe0df087973ce79c +guid: 3d3229cb42434578b436dd9e92a05853 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64/MeshingFeaturePlugin.dll b/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64/MeshingFeaturePlugin.dll index 1538d455..4b75e347 100644 Binary files a/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64/MeshingFeaturePlugin.dll and b/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64/MeshingFeaturePlugin.dll differ diff --git a/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64/MeshingFeaturePlugin.dll.meta b/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64/MeshingFeaturePlugin.dll.meta index 64e3f005..693bc98e 100644 --- a/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64/MeshingFeaturePlugin.dll.meta +++ b/Samples~/MeshingFeature/MeshingFeaturePlugin/windows/x64/MeshingFeaturePlugin.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fd8cc7c71f6b4611ac54f90cae48d635 +guid: 104082d02dcc475f8d315ec66790e0a7 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Tests/Editor/zBuildHookTests.cs b/Tests/Editor/zBuildHookTests.cs index fb08e233..9729b9fa 100644 --- a/Tests/Editor/zBuildHookTests.cs +++ b/Tests/Editor/zBuildHookTests.cs @@ -188,6 +188,20 @@ public void VerifyBuildOutputLibraries() Assert.IsFalse(HasOpenXRLibraries(resultWithoutOpenXR)); } + [Test] + public void VerifyBuildWithoutAnalytics() + { + var packageName = "com.unity.analytics"; + UnityEditor.PackageManager.Client.Remove(packageName); + + var result = BuildMockPlayer(); + + if (Environment.GetEnvironmentVariable("UNITY_OPENXR_YAMATO") == "1") + Assert.IsTrue(result.summary.result == BuildResult.Succeeded); + else if (result.summary.result != BuildResult.Succeeded) + return; + } + internal class BuildCallbacks : OpenXRFeatureBuildHooks { [NonSerialized] internal static Func TestCallback = (methodName, param) => true; diff --git a/Tests/Runtime/OpenXRInputTests.cs b/Tests/Runtime/OpenXRInputTests.cs index 233d7e03..0c836d11 100644 --- a/Tests/Runtime/OpenXRInputTests.cs +++ b/Tests/Runtime/OpenXRInputTests.cs @@ -352,6 +352,7 @@ private static IEnumerator ValidateLayoutControl(InputControlLayout layout, Inpu break; } + case "Stick": case "Vector2": { yield return ValidateInputAction(action, userPath, interactionPath, Vector2.one); @@ -714,7 +715,7 @@ public IEnumerator InputTrackingAquiredAndLost() // Node should be tracked after we start InitializeAndStart(); yield return new WaitForXrFrame(1); - Assert.IsTrue(tracked); + Assert.IsTrue(tracked, "There's no tracking after initialization and start"); // Clear the space location flags for the node which should switch to the untracked state var gripAction = OpenXRInput.GetActionHandle(new InputAction(null, InputActionType.Value, "{LeftHand}/devicePose")); @@ -722,14 +723,14 @@ public IEnumerator InputTrackingAquiredAndLost() MockRuntime.SetSpace(gripAction, Vector3.zero, Quaternion.identity, XrSpaceLocationFlags.None); MockRuntime.SetSpace(aimAction, Vector3.zero, Quaternion.identity, XrSpaceLocationFlags.None); yield return new WaitForXrFrame(2); - Assert.IsFalse(tracked); + Assert.IsFalse(tracked, "Tracking is kept after clearing space location flags"); // Reset the space location flags to make sure it goes back to tracked state var trackedFlags = XrSpaceLocationFlags.PositionValid | XrSpaceLocationFlags.OrientationValid | XrSpaceLocationFlags.PositionTracked | XrSpaceLocationFlags.OrientationTracked; MockRuntime.SetSpace(gripAction, Vector3.zero, Quaternion.identity, trackedFlags); MockRuntime.SetSpace(aimAction, Vector3.zero, Quaternion.identity, trackedFlags); yield return new WaitForXrFrame(2); - Assert.IsTrue(tracked); + Assert.IsTrue(tracked, "There's no tracking after resetting space location flags"); } } } diff --git a/Tests/Runtime/OpenXRLoaderSetup.cs b/Tests/Runtime/OpenXRLoaderSetup.cs index cad09ea5..0f9b3fea 100644 --- a/Tests/Runtime/OpenXRLoaderSetup.cs +++ b/Tests/Runtime/OpenXRLoaderSetup.cs @@ -30,6 +30,12 @@ internal class OpenXRLoaderSetup : LoaderTestSetup private OpenXRFeature[] savedFeatures = null; + /// + /// Save the previous value of OpenXRRestarter.DisableApplicationQuit. + /// We want to set it to true when running the test, and then restore the value after the test. + /// + private bool oldDisableApplicationQuit = false; + /// /// Helper method to return a feature of the given type /// @@ -137,6 +143,10 @@ public virtual void BeforeTest() if (OpenXRLoaderBase.Instance != null) StopAndShutdown(); + // Disable quitting the application functionality for all tests (since we don't want to exit play mode during the test) + oldDisableApplicationQuit = OpenXRRestarter.DisableApplicationQuit; + OpenXRRestarter.DisableApplicationQuit = true; + // Cache off the features before we start savedFeatures = (OpenXRFeature[])OpenXRSettings.ActiveBuildTargetInstance.features.Clone(); @@ -169,10 +179,6 @@ public virtual void BeforeTest() [UnityTearDown] public IEnumerator TearDown() { - // It is possible that a test may have done something to initiate the OpenXRRestarter. To ensure - // that the restarter does not impact other tests we must make sure it finishes before continuing. - yield return new WaitForRestarter(); - AfterTest(); yield return null; @@ -199,6 +205,20 @@ public virtual void AfterTest() // Replace the features with the saved features OpenXRSettings.ActiveBuildTargetInstance.features = savedFeatures; + + // Wait for all shutdowns and restart requests to finish + // and then restore the value of OpenXRRestarter.DisableApplicationQuit + WaitForRestarterToFinish(); + } + + private IEnumerable WaitForRestarterToFinish() + { + // It is possible that a test may have done something to initiate the OpenXRRestarter. To ensure + // that the restarter does not impact other tests we must make sure it finishes before continuing. + yield return new WaitForRestarter(); + + // Restore the value of DisableApplicationQuit. + OpenXRRestarter.DisableApplicationQuit = oldDisableApplicationQuit; } public override void Setup() diff --git a/Tests/Runtime/OpenXRRuntimeTests.cs b/Tests/Runtime/OpenXRRuntimeTests.cs index e24b190c..8e8c5c9f 100644 --- a/Tests/Runtime/OpenXRRuntimeTests.cs +++ b/Tests/Runtime/OpenXRRuntimeTests.cs @@ -39,7 +39,7 @@ public void TestAvailableExtensions() foreach (string expectedExtension in expectedExtensions) { - Assert.IsTrue(extensionsSet.Contains(expectedExtension)); + Assert.IsTrue(extensionsSet.Contains(expectedExtension), $"extensionsSet missing \"{expectedExtension}\""); } base.StopAndShutdown(); diff --git a/Tests/Runtime/WaitForRestarter.cs b/Tests/Runtime/WaitForRestarter.cs index 974a00de..45ef1334 100644 --- a/Tests/Runtime/WaitForRestarter.cs +++ b/Tests/Runtime/WaitForRestarter.cs @@ -21,7 +21,7 @@ public override bool keepWaiting get { // Wait until the restarter is finished - if (!OpenXRRestarter.Instance.isRunning) + if (!OpenXRRestarter.Instance.isRunning && OpenXRRestarter.PauseAndRestartCoroutineCount == 0) { return false; } diff --git a/package.json b/package.json index fd45895c..02490b64 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "com.unity.xr.openxr", "displayName": "OpenXR Plugin", - "version": "1.9.1", + "version": "1.10.0", "unity": "2021.3", "description": "OpenXR is an open, royalty-free standard developed by Khronos that aims to simplify AR/VR development by allowing developers to target a wide range of AR/VR devices. Use this plug-in to enable OpenXR in XR Plug-in Management.", "keywords": [ @@ -34,15 +34,15 @@ } ], "_upm": { - "changelog": "### Added\n* Implemented `InputSystem.customBindingPathValidators` interface to show UI warnings in the `InputAsset` Editor when added bindings to a disabled interaction profile and when none of the controller type interaction profiles are enabled, but added bindings using generic XRController.\n* Added APIs `GetInteractionProfileType` and `GetDeviceLayoutName` to support binding path validator feature.\n* Added API `TrySetControllerLateLatchAction` to support controller late latching. Also added MarkLateLatchNode.cs in Controller Sample for usages example.\n* Added support for Meta XR feature `Symmetric Projection`, `Space Warp`, and `Eye Tracked Foveation`.\n* Added the option to enable `Subsampled Layout` when creating a Vulkan swapchain.\n* Added support for recentering Floor tracking origin using new API, `OpenXRSettings.SetAllowRecentering`. This static method allows the app to recenter the tracking origin space when requested by the runtime. Note that calling the method won't trigger a recenter event.\n* Added support for Meta XR feature `System Splash Screen`.\n* Added public API for MetaQuestFeature.forceRemoveInternetPermission\n\n### Changed\n* Updated Input System package dependency to 1.6.3.\n* Updated XR management dependency to 4.4.0.\n* Updated OpenXR loader to 1.0.29.\n* Changed MockRuntime and its FeatureSet to public.\n\n### Fixed\n* Fixed incorect XR Validation rules after regenerating the OpenXR package settings asset.\n* Fixed analytics code being called when disabled.\n* Fixed latency issue with controller poses.\n* Fixed an XR_ERROR_SESSION_NOT_RUNNING error if xrRequestExitSession is called when the session is not running." + "changelog": "### Added\n* Added `OpenXRSettings.VulkanAdditionalGraphicsQueue` property to request at startup an additional Vulkan graphics queue in devices that require it. The setting can be enabled through the Project settings UI and build code.\n* Added `Optimize Buffer Discards (Vulkan)` feature setting option within MetaQuestFeature.\n* Added a new optional validation rule to switch to use InputSystem.Controls.StickControl instead of Vector2Control for thumbsticks. StickControl allows more input options for thumbstick-based control, such as acting as both a combined 2D vector, two independent axes or a four-way Dpad with 4 independent buttons.\n\n### Changed\n* Updated project validation rule for Meta Quest Feature - \"Select Oculus Touch Interaction Profile or Meta Quest Pro Touch Interaction Profile to pair with.\" from error to warning to allow other interaction profiles to be enabled as well, like eye gaze or palm pose.\n\n### Fixed\n* Fixed Meta XR `Space Warp` feature crashing issue when trying to access the depth swapchain.\n* Fixed Meta XR `Space Warp` depth subimage imageArrayIndex setup wrong issue for multiview render mode.\n* Fixed a bug where Palm Pose won't work if the Eye Gaze Interaction Profile is added to the project.\n* Fixed \"The type 'AnalyticsResult' is defined in an assembly that is not referenced\" error thrown.\n* Fixed UnitySwapchain destructor to completely destroy swapchains to avoid memory leak.\n* Fixed OpenXR Settings UI to not render settings on platforms that aren't supported.\n* Fixed Android manifest entries were added when the feature was not enabled." }, "upmCi": { - "footprint": "bb9b0332c7d3a4018411302811d49266d10faf6d" + "footprint": "de1fd8cd7dfb71006b399a24c21ff598829354d6" }, - "documentationUrl": "https://docs.unity3d.com/Packages/com.unity.xr.openxr@1.9/manual/index.html", + "documentationUrl": "https://docs.unity3d.com/Packages/com.unity.xr.openxr@1.10/manual/index.html", "repository": { "url": "https://github.cds.internal.unity3d.com/unity/xr.sdk.openxr.git", "type": "git", - "revision": "630b0982955a4b4bbc0ee8440739c579544bbd80" + "revision": "4e5ca6cb7ac702c659e04def4c4dd2f9b5a8b969" } }