using Unity.XR.PXR; using UnityEditor; using UnityEngine; namespace Unity.XR.OpenXR.Features.PICOSupport { [CustomEditor(typeof(PICOFeature))] internal class PICOFeatureEditor : Editor { void OnEnable() { } public override void OnInspectorGUI() { PICOFeature picoFeature = (PICOFeature)target; PICOProjectSetting projectConfig = PICOProjectSetting.GetProjectConfig(); EditorGUIUtility.labelWidth = 180; //eye tracking GUIStyle firstLevelStyle = new GUIStyle(GUI.skin.label); firstLevelStyle.alignment = TextAnchor.UpperLeft; firstLevelStyle.fontStyle = FontStyle.Bold; firstLevelStyle.fontSize = 12; firstLevelStyle.wordWrap = true; var guiContent = new GUIContent(); guiContent.text = "Eye Tracking"; guiContent.tooltip = "Before calling EyeTracking API, enable this option first, only for Neo3 Pro Eye , PICO 4 Pro device."; projectConfig.isEyeTracking = EditorGUILayout.Toggle(guiContent, projectConfig.isEyeTracking); if (projectConfig.isEyeTracking) { projectConfig.isEyeTrackingCalibration = EditorGUILayout.Toggle(new GUIContent("Eye Tracking Calibration"), projectConfig.isEyeTrackingCalibration); EditorGUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Note: Eye Tracking is supported only on Neo 3 Pro Eye , PICO 4 Pro", firstLevelStyle); EditorGUILayout.EndVertical(); } projectConfig.isHandTracking = EditorGUILayout.Toggle("Hand Tracking", projectConfig.isHandTracking); var displayFrequencyContent = new GUIContent(); displayFrequencyContent.text = "Display Refresh Rates"; projectConfig.displayFrequency = (SystemDisplayFrequency)EditorGUILayout.EnumPopup(displayFrequencyContent, projectConfig.displayFrequency); // content protect projectConfig.useContentProtect = EditorGUILayout.Toggle("Use Content Protect", projectConfig.useContentProtect); if (projectConfig.useContentProtect) { projectConfig.contentProtectFlags = (SecureContentFlag)EditorGUILayout.EnumPopup("Content Protect", projectConfig.contentProtectFlags); } //FFR var foveationEnableContent = new GUIContent(); foveationEnableContent.text = "Foveated Rendering"; projectConfig.foveationEnable = EditorGUILayout.Toggle(foveationEnableContent, projectConfig.foveationEnable); if (projectConfig.foveationEnable) { var foveationContent = new GUIContent(); foveationContent.text = "Foveated Rendering Mode"; projectConfig.foveatedRenderingMode = (FoveationFeature.FoveatedRenderingMode)EditorGUILayout.EnumPopup(foveationContent, projectConfig.foveatedRenderingMode); var foveationLevel = new GUIContent(); foveationLevel.text = "Foveated Rendering Level"; projectConfig.foveatedRenderingLevel = (FoveationFeature.FoveatedRenderingLevel)EditorGUILayout.EnumPopup(foveationLevel, projectConfig.foveatedRenderingLevel); if (projectConfig.foveatedRenderingLevel !=FoveationFeature.FoveatedRenderingLevel.Off) { var subsampledEnabledContent = new GUIContent(); subsampledEnabledContent.text = "Subsampling"; projectConfig.isSubsampledEnabled = EditorGUILayout.Toggle(subsampledEnabledContent, projectConfig.isSubsampledEnabled); } } GUILayout.BeginHorizontal(); guiContent.text = "System Splash Screen"; guiContent.tooltip = ""; EditorGUILayout.LabelField(guiContent, GUILayout.Width(165)); projectConfig.systemSplashScreen = (Texture2D)EditorGUILayout.ObjectField(projectConfig.systemSplashScreen, typeof(Texture2D), true); GUILayout.EndHorizontal(); EditorGUILayout.BeginVertical("box"); EditorGUILayout.LabelField("Note: Set the system splash screen picture in PNG format.", firstLevelStyle); EditorGUILayout.EndVertical(); var MRSafeguard = new GUIContent(); MRSafeguard.text = "MR Safeguard"; MRSafeguard.tooltip = "MR safety, if you choose this option, your application will adopt MR safety policies during runtime. If not selected, it will continue to use VR safety policies by default."; projectConfig.MRSafeguard = EditorGUILayout.Toggle(MRSafeguard, projectConfig.MRSafeguard); serializedObject.Update(); if (GUI.changed) { EditorUtility.SetDirty(projectConfig); } serializedObject.ApplyModifiedProperties(); } } }