private void Update() { if (!usingPositionTrackingCached || usingPositionTracking != usePositionTracking) { tracker.isEnabled = usePositionTracking; usingPositionTracking = usePositionTracking; usingPositionTrackingCached = true; } // Dispatch any events. if (HMDLost != null && wasHmdPresent && !display.isPresent) { HMDLost(); } if (HMDAcquired != null && !wasHmdPresent && display.isPresent) { HMDAcquired(); } wasHmdPresent = display.isPresent; if (TrackingLost != null && wasPositionTracked && !tracker.isPositionTracked) { TrackingLost(); } if (TrackingAcquired != null && !wasPositionTracked && tracker.isPositionTracked) { TrackingAcquired(); } wasPositionTracked = tracker.isPositionTracked; if (NativeTextureScaleModified != null && nativeTextureScale != prevNativeTextureScale) { NativeTextureScaleModified(prevNativeTextureScale, nativeTextureScale); } prevNativeTextureScale = nativeTextureScale; if (VirtualTextureScaleModified != null && virtualTextureScale != prevVirtualTextureScale) { VirtualTextureScaleModified(prevVirtualTextureScale, virtualTextureScale); } prevVirtualTextureScale = virtualTextureScale; if (EyeTextureAntiAliasingModified != null && eyeTextureAntiAliasing != prevEyeTextureAntiAliasing) { EyeTextureAntiAliasingModified(prevEyeTextureAntiAliasing, eyeTextureAntiAliasing); } prevEyeTextureAntiAliasing = eyeTextureAntiAliasing; if (EyeTextureDepthModified != null && eyeTextureDepth != prevEyeTextureDepth) { EyeTextureDepthModified(prevEyeTextureDepth, eyeTextureDepth); } prevEyeTextureDepth = eyeTextureDepth; if (EyeTextureFormatModified != null && eyeTextureFormat != prevEyeTextureFormat) { EyeTextureFormatModified(prevEyeTextureFormat, eyeTextureFormat); } prevEyeTextureFormat = eyeTextureFormat; if (MonoscopicModified != null && monoscopic != prevMonoscopic) { MonoscopicModified(prevMonoscopic, monoscopic); } prevMonoscopic = monoscopic; if (HdrModified != null && hdr != prevHdr) { HdrModified(prevHdr, hdr); } prevHdr = hdr; if (isHSWDisplayed && Input.anyKeyDown) { DismissHSWDisplay(); if (HSWDismissed != null) { HSWDismissed(); } } display.timeWarp = timeWarp; display.Update(); #if UNITY_ANDROID && !UNITY_EDITOR if (volumeController != null) { if (volumeControllerTransform == null) { volumeControllerTransform = gameObject.GetComponent <OVRCameraRig>().centerEyeAnchor; } volumeController.UpdatePosition(volumeControllerTransform); } #endif }
private void Update() { if (!isVRPresent) return; if (!usingPositionTrackingCached || usingPositionTracking != usePositionTracking) { tracker.isEnabled = usePositionTracking; usingPositionTracking = usePositionTracking; usingPositionTrackingCached = true; } // Dispatch any events. if (HMDLost != null && wasHmdPresent && !display.isPresent) HMDLost(); if (HMDAcquired != null && !wasHmdPresent && display.isPresent) HMDAcquired(); wasHmdPresent = display.isPresent; if (Created != null && wasRecreated) Created(); wasRecreated = false; if (TrackingLost != null && wasPositionTracked && !tracker.isPositionTracked) TrackingLost(); if (TrackingAcquired != null && !wasPositionTracked && tracker.isPositionTracked) TrackingAcquired(); wasPositionTracked = tracker.isPositionTracked; #if (!UNITY_ANDROID || UNITY_EDITOR) OVRPlugin.nativeTextureScale = nativeTextureScale; OVRPlugin.virtualTextureScale = virtualTextureScale; #endif if (NativeTextureScaleModified != null && nativeTextureScale != prevNativeTextureScale) NativeTextureScaleModified(prevNativeTextureScale, nativeTextureScale); prevNativeTextureScale = nativeTextureScale; if (VirtualTextureScaleModified != null && virtualTextureScale != prevVirtualTextureScale) VirtualTextureScaleModified(prevVirtualTextureScale, virtualTextureScale); prevVirtualTextureScale = virtualTextureScale; if (EyeTextureAntiAliasingModified != null && eyeTextureAntiAliasing != prevEyeTextureAntiAliasing) EyeTextureAntiAliasingModified(prevEyeTextureAntiAliasing, eyeTextureAntiAliasing); prevEyeTextureAntiAliasing = eyeTextureAntiAliasing; if (EyeTextureDepthModified != null && eyeTextureDepth != prevEyeTextureDepth) EyeTextureDepthModified(prevEyeTextureDepth, eyeTextureDepth); prevEyeTextureDepth = eyeTextureDepth; if (EyeTextureFormatModified != null && eyeTextureFormat != prevEyeTextureFormat) EyeTextureFormatModified(prevEyeTextureFormat, eyeTextureFormat); prevEyeTextureFormat = eyeTextureFormat; if (MonoscopicModified != null && monoscopic != prevMonoscopic) MonoscopicModified(prevMonoscopic, monoscopic); prevMonoscopic = monoscopic; if (HdrModified != null && hdr != prevHdr) HdrModified(prevHdr, hdr); prevHdr = hdr; if (isHSWDisplayed && Input.anyKeyDown) { DismissHSWDisplay(); if (HSWDismissed != null) HSWDismissed(); } display.timeWarp = timeWarp; display.Update(); input.Update(); #if UNITY_ANDROID && !UNITY_EDITOR if (volumeController != null) { if (volumeControllerTransform == null) { if (gameObject.GetComponent<OVRCameraRig>() != null) { volumeControllerTransform = gameObject.GetComponent<OVRCameraRig>().centerEyeAnchor; } } volumeController.UpdatePosition(volumeControllerTransform); } // Service VrApi events // If this code is not called, internal VrApi events will never be pushed to the internal event queue. VrApiEventStatus pendingResult = (VrApiEventStatus)OVR_GetNextPendingEvent( EventData, (uint)MaxDataSize ); while (pendingResult == VrApiEventStatus.PENDING) { if (OnVrApiEvent != null) { OnVrApiEvent(EventData.ToString()); } else { Debug.Log("No OnVrApiEvent delegate set!"); } EventData.Length = 0; pendingResult = (VrApiEventStatus)OVR_GetNextPendingEvent(EventData, (uint)MaxDataSize); } #endif }
private void Awake() { // Only allow one instance at runtime. if (instance != null) { enabled = false; DestroyImmediate(this); return; } instance = this; #if !UNITY_ANDROID || UNITY_EDITOR if (!ovrIsInitialized) { OVR_Initialize(); OVRPluginEvent.Issue(RenderEventType.Initialize); ovrIsInitialized = true; } var netVersion = new System.Version(Ovr.Hmd.OVR_VERSION_STRING); var ovrVersion = new System.Version(Ovr.Hmd.GetVersionString()); if (netVersion > ovrVersion) { Debug.LogWarning("Using an older version of LibOVR."); } #endif // Detect whether this platform is a supported platform RuntimePlatform currPlatform = Application.platform; isSupportedPlatform |= currPlatform == RuntimePlatform.Android; isSupportedPlatform |= currPlatform == RuntimePlatform.LinuxPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsPlayer; if (!isSupportedPlatform) { Debug.LogWarning("This platform is unsupported"); return; } #if UNITY_ANDROID && !UNITY_EDITOR // don't allow the application to run if orientation is not landscape left. if (Screen.orientation != ScreenOrientation.LandscapeLeft) { Debug.LogError("********************************************************************************\n"); Debug.LogError("***** Default screen orientation must be set to landscape left for VR.\n" + "***** Stopping application.\n"); Debug.LogError("********************************************************************************\n"); Debug.Break(); Application.Quit(); } // don't enable gyro, it is not used and triggers expensive display calls if (Input.gyro.enabled) { Debug.LogError("*** Auto-disabling Gyroscope ***"); Input.gyro.enabled = false; } // NOTE: On Adreno Lollipop, it is an error to have antiAliasing set on the // main window surface with front buffer rendering enabled. The view will // render black. // On Adreno KitKat, some tiling control modes will cause the view to render // black. if (QualitySettings.antiAliasing > 1) { Debug.LogError("*** Antialiasing must be disabled for Gear VR ***"); } // we sync in the TimeWarp, so we don't want unity // syncing elsewhere QualitySettings.vSyncCount = 0; // try to render at 60fps Application.targetFrameRate = 60; // don't allow the app to run in the background Application.runInBackground = false; // Disable screen dimming Screen.sleepTimeout = SleepTimeout.NeverSleep; if (!androidJavaInit) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = unityPlayer.GetStatic <AndroidJavaObject>("currentActivity"); javaVrActivityClass = new AndroidJavaClass("com.oculusvr.vrlib.VrActivity"); // Prepare for the RenderThreadInit() SetInitVariables(activity.GetRawObject(), javaVrActivityClass.GetRawClass()); #if !INHIBIT_ENTITLEMENT_CHECK AndroidJavaObject entitlementChecker = new AndroidJavaObject("com.oculus.svclib.OVREntitlementChecker"); entitlementChecker.CallStatic("doAutomatedCheck", activity); #else Debug.Log("Inhibiting Entitlement Check!"); #endif androidJavaInit = true; } // We want to set up our touchpad messaging system OVRTouchpad.Create(); InitVolumeController(); #else SetEditorPlay(Application.isEditor); #endif prevEyeTextureAntiAliasing = OVRManager.instance.eyeTextureAntiAliasing; prevEyeTextureDepth = OVRManager.instance.eyeTextureDepth; prevEyeTextureFormat = OVRManager.instance.eyeTextureFormat; prevNativeTextureScale = OVRManager.instance.nativeTextureScale; prevVirtualTextureScale = OVRManager.instance.virtualTextureScale; prevMonoscopic = OVRManager.instance.monoscopic; prevHdr = OVRManager.instance.hdr; if (display == null) { display = new OVRDisplay(); } if (tracker == null) { tracker = new OVRTracker(); } if (resetTrackerOnLoad) { display.RecenterPose(); } #if !UNITY_ANDROID || UNITY_EDITOR // Except for D3D9, SDK rendering forces vsync unless you pass ovrHmdCap_NoVSync to Hmd.SetEnabledCaps(). if (timeWarp) { bool useUnityVSync = SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9"); QualitySettings.vSyncCount = useUnityVSync ? 1 : 0; } #endif #if (UNITY_STANDALONE_WIN && (UNITY_4_6 || UNITY_4_5)) bool unity_4_6 = false; bool unity_4_5_2 = false; bool unity_4_5_3 = false; bool unity_4_5_4 = false; bool unity_4_5_5 = false; #if (UNITY_4_6) unity_4_6 = true; #elif (UNITY_4_5_2) unity_4_5_2 = true; #elif (UNITY_4_5_3) unity_4_5_3 = true; #elif (UNITY_4_5_4) unity_4_5_4 = true; #elif (UNITY_4_5_5) unity_4_5_5 = true; #endif // Detect correct Unity releases which contain the fix for D3D11 exclusive mode. string version = Application.unityVersion; int releaseNumber; bool releaseNumberFound = Int32.TryParse(Regex.Match(version, @"\d+$").Value, out releaseNumber); // Exclusive mode was broken for D3D9 in Unity 4.5.2p2 - 4.5.4 and 4.6 builds prior to beta 21 bool unsupportedExclusiveModeD3D9 = (unity_4_6 && version.Last(char.IsLetter) == 'b' && releaseNumberFound && releaseNumber < 21) || (unity_4_5_2 && version.Last(char.IsLetter) == 'p' && releaseNumberFound && releaseNumber >= 2) || (unity_4_5_3) || (unity_4_5_4); // Exclusive mode was broken for D3D11 in Unity 4.5.2p2 - 4.5.5p2 and 4.6 builds prior to f1 bool unsupportedExclusiveModeD3D11 = (unity_4_6 && version.Last(char.IsLetter) == 'b') || (unity_4_5_2 && version.Last(char.IsLetter) == 'p' && releaseNumberFound && releaseNumber >= 2) || (unity_4_5_3) || (unity_4_5_4) || (unity_4_5_5 && version.Last(char.IsLetter) == 'f') || (unity_4_5_5 && version.Last(char.IsLetter) == 'p' && releaseNumberFound && releaseNumber < 3); if (unsupportedExclusiveModeD3D9 && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9")) { MessageBox(0, "Direct3D 9 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } if (unsupportedExclusiveModeD3D11 && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11")) { MessageBox(0, "Direct3D 11 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } #endif }
private void Update() { if (!usingPositionTrackingCached || usingPositionTracking != usePositionTracking) { tracker.isEnabled = usePositionTracking; usingPositionTracking = usePositionTracking; usingPositionTrackingCached = true; } // Dispatch any events. if (HMDLost != null && wasHmdPresent && !display.isPresent) HMDLost(); if (HMDAcquired != null && !wasHmdPresent && display.isPresent) HMDAcquired(); wasHmdPresent = display.isPresent; if (TrackingLost != null && wasPositionTracked && !tracker.isPositionTracked) TrackingLost(); if (TrackingAcquired != null && !wasPositionTracked && tracker.isPositionTracked) TrackingAcquired(); wasPositionTracked = tracker.isPositionTracked; if (NativeTextureScaleModified != null && nativeTextureScale != prevNativeTextureScale) NativeTextureScaleModified(prevNativeTextureScale, nativeTextureScale); prevNativeTextureScale = nativeTextureScale; if (VirtualTextureScaleModified != null && virtualTextureScale != prevVirtualTextureScale) VirtualTextureScaleModified(prevVirtualTextureScale, virtualTextureScale); prevVirtualTextureScale = virtualTextureScale; if (EyeTextureAntiAliasingModified != null && eyeTextureAntiAliasing != prevEyeTextureAntiAliasing) EyeTextureAntiAliasingModified(prevEyeTextureAntiAliasing, eyeTextureAntiAliasing); prevEyeTextureAntiAliasing = eyeTextureAntiAliasing; if (EyeTextureDepthModified != null && eyeTextureDepth != prevEyeTextureDepth) EyeTextureDepthModified(prevEyeTextureDepth, eyeTextureDepth); prevEyeTextureDepth = eyeTextureDepth; if (EyeTextureFormatModified != null && eyeTextureFormat != prevEyeTextureFormat) EyeTextureFormatModified(prevEyeTextureFormat, eyeTextureFormat); prevEyeTextureFormat = eyeTextureFormat; if (MonoscopicModified != null && monoscopic != prevMonoscopic) MonoscopicModified(prevMonoscopic, monoscopic); prevMonoscopic = monoscopic; if (HdrModified != null && hdr != prevHdr) HdrModified(prevHdr, hdr); prevHdr = hdr; if (isHSWDisplayed && Input.anyKeyDown) { DismissHSWDisplay(); if (HSWDismissed != null) HSWDismissed(); } display.timeWarp = timeWarp; display.Update(); #if UNITY_ANDROID && !UNITY_EDITOR if (volumeController != null) { if (volumeControllerTransform == null) { volumeControllerTransform = gameObject.GetComponent<OVRCameraRig>().centerEyeAnchor; } volumeController.UpdatePosition(volumeControllerTransform); } #endif }
private void Awake() { // Only allow one instance at runtime. if (instance != null) { enabled = false; DestroyImmediate(this); return; } instance = this; System.Version netVersion = OVRPlugin.wrapperVersion; System.Version ovrVersion = OVRPlugin.version; Debug.Log("Unity v" + Application.unityVersion + ", " + "Oculus Integration v" + netVersion + ", " + "OVRPlugin v" + ovrVersion + "."); // Detect whether this platform is a supported platform RuntimePlatform currPlatform = Application.platform; isSupportedPlatform |= currPlatform == RuntimePlatform.Android; isSupportedPlatform |= currPlatform == RuntimePlatform.LinuxPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsPlayer; if (!isSupportedPlatform) { Debug.LogWarning("This platform is unsupported"); return; } #if !UNITY_ANDROID || UNITY_EDITOR if (OVRUnityVersionChecker.hasBuiltInVR) { Debug.LogWarning("The Oculus Unity Legacy Integration is only supported in Unity 4.x releases. For Unity 5.x, please migrate to the Oculus Utilities for Unity package and use Unity's built-in VR support (available in Unity 5.1 and later)."); isVRPresent = false; } else if (!ovrIsInitialized) { //HACK: For some reason, Unity doesn't call UnitySetGraphicsDevice until we make the first P/Invoke call. OVRPluginEvent.eventBase = OVRPluginEvent.eventBase; #if !UNITY_ANDROID || UNITY_EDITOR //Handle all log messages OVR_FlushLog(OnLogMessage); #endif // If unable to load the Oculus Runtime. if (!OVRPlugin.initialized) { bool isBadWinRenderer = ((Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) && !SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11")); if (isBadWinRenderer) Debug.LogWarning("Only D3D11 is supported on Windows."); else Debug.LogWarning("Runtime is not present or no Rift attached. Running without VR."); // Runtime is not installed if ovr_Initialize() fails. isVRPresent = false; // Go monoscopic in response. monoscopic = true; } else { OVRPluginEvent.Issue(RenderEventType.InitRenderThread); isVRPresent = true; #if UNITY_EDITOR if (!OVRUnityVersionChecker.hasEditorVRSupport) { // Only allow VR in standalones. isVRPresent = false; Debug.LogWarning("VR rendering is not supported in the editor. Please update to 4.6.7p4 or build a stand-alone player."); } #endif if (netVersion.Major > ovrVersion.Major || netVersion.Major == ovrVersion.Major && netVersion.Minor > ovrVersion.Minor) { isVRPresent = false; Debug.LogWarning("Version check failed. Please make sure you are using OVRPlugin " + Ovr.Hmd.OVR_VERSION_STRING + " or newer."); } OVRPlugin.queueAheadFraction = 0f; ovrIsInitialized = true; } } SetEditorPlay(Application.isEditor); #else // UNITY_ANDROID && !UNITY_EDITOR: Start of Android init. // Android integration does not dynamically load its runtime. isVRPresent = true; // log the unity version Debug.Log( "Unity Version: " + Application.unityVersion ); // don't allow the application to run if orientation is not landscape left. if (Screen.orientation != ScreenOrientation.LandscapeLeft) { Debug.LogError("********************************************************************************\n"); Debug.LogError("***** Default screen orientation must be set to landscape left for VR.\n" + "***** Stopping application.\n"); Debug.LogError("********************************************************************************\n"); Debug.Break(); Application.Quit(); } // don't enable gyro, it is not used and triggers expensive display calls if (Input.gyro.enabled) { Debug.LogError("*** Auto-disabling Gyroscope ***"); Input.gyro.enabled = false; } // NOTE: On Adreno Lollipop, it is an error to have antiAliasing set on the // main window surface with front buffer rendering enabled. The view will // render black. // On Adreno KitKat, some tiling control modes will cause the view to render // black. if (QualitySettings.antiAliasing > 1) { Debug.LogError("*** Antialiasing must be disabled for Gear VR ***"); } // we sync in the TimeWarp, so we don't want unity // syncing elsewhere QualitySettings.vSyncCount = 0; // try to render at 60fps Application.targetFrameRate = 60; // don't allow the app to run in the background Application.runInBackground = false; // Disable screen dimming Screen.sleepTimeout = SleepTimeout.NeverSleep; if (!androidJavaInit) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); // Prepare for the RenderThreadInit() SetInitVariables(activity.GetRawObject(), System.IntPtr.Zero); #if USE_ENTITLEMENT_CHECK AndroidJavaObject entitlementChecker = new AndroidJavaObject("com.oculus.svclib.OVREntitlementChecker"); entitlementChecker.CallStatic("doAutomatedCheck", activity); #else Debug.Log( "Inhibiting Entitlement Check!" ); #endif androidJavaInit = true; } // We want to set up our touchpad messaging system OVRTouchpad.Create(); InitVolumeController(); // set an event delegate like this if you wish to handle events like "reorient". //SetVrApiEventDelegate( VrApiEventDefaultDelegate ); #endif // End of android init. prevEyeTextureAntiAliasing = OVRManager.instance.eyeTextureAntiAliasing; prevEyeTextureDepth = OVRManager.instance.eyeTextureDepth; prevEyeTextureFormat = OVRManager.instance.eyeTextureFormat; prevNativeTextureScale = OVRManager.instance.nativeTextureScale; prevVirtualTextureScale = OVRManager.instance.virtualTextureScale; prevMonoscopic = OVRManager.instance.monoscopic; prevHdr = OVRManager.instance.hdr; if (tracker == null) tracker = new OVRTracker(); if (display == null) display = new OVRDisplay(); else wasRecreated = true; if (input == null) input = new OVRInput(); if (resetTrackerOnLoad) display.RecenterPose(); #if !UNITY_ANDROID || UNITY_EDITOR // Except for D3D9, SDK rendering forces vsync unless you pass ovrHmdCap_NoVSync to Hmd.SetEnabledCaps(). if (timeWarp) { bool useUnityVSync = SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9"); QualitySettings.vSyncCount = useUnityVSync ? 1 : 0; QualitySettings.maxQueuedFrames = 0; } #endif #if UNITY_STANDALONE_WIN if (!OVRUnityVersionChecker.hasD3D9ExclusiveModeSupport && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9")) { MessageBox(0, "Direct3D 9 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } if (!OVRUnityVersionChecker.hasD3D11ExclusiveModeSupport && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11")) { MessageBox(0, "Direct3D 11 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } #endif }
private void Awake() { // Only allow one instance at runtime. if (instance != null) { enabled = false; DestroyImmediate(this); return; } instance = this; #if !UNITY_ANDROID || UNITY_EDITOR if (!ovrIsInitialized) { OVR_Initialize(); OVRPluginEvent.Issue(RenderEventType.Initialize); ovrIsInitialized = true; } var netVersion = new System.Version(Ovr.Hmd.OVR_VERSION_STRING); System.Version ovrVersion = new System.Version("0.0.0"); var versionString = Ovr.Hmd.GetVersionString(); var success = false; try { ovrVersion = new System.Version(versionString); success = true; } catch (Exception e) { Debug.Log("Failed to parse Oculus version string \"" + versionString + "\" with message \"" + e.Message + "\"."); } if (!success || netVersion > ovrVersion) Debug.LogWarning("Version check failed. Please make sure you are using Oculus runtime " + Ovr.Hmd.OVR_VERSION_STRING + " or newer."); #endif // Detect whether this platform is a supported platform RuntimePlatform currPlatform = Application.platform; isSupportedPlatform |= currPlatform == RuntimePlatform.Android; isSupportedPlatform |= currPlatform == RuntimePlatform.LinuxPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsPlayer; if (!isSupportedPlatform) { Debug.LogWarning("This platform is unsupported"); return; } #if UNITY_ANDROID && !UNITY_EDITOR // log the unity version Debug.Log( "Unity Version: " + Application.unityVersion ); // don't allow the application to run if orientation is not landscape left. if (Screen.orientation != ScreenOrientation.LandscapeLeft) { Debug.LogError("********************************************************************************\n"); Debug.LogError("***** Default screen orientation must be set to landscape left for VR.\n" + "***** Stopping application.\n"); Debug.LogError("********************************************************************************\n"); Debug.Break(); Application.Quit(); } // don't enable gyro, it is not used and triggers expensive display calls if (Input.gyro.enabled) { Debug.LogError("*** Auto-disabling Gyroscope ***"); Input.gyro.enabled = false; } // NOTE: On Adreno Lollipop, it is an error to have antiAliasing set on the // main window surface with front buffer rendering enabled. The view will // render black. // On Adreno KitKat, some tiling control modes will cause the view to render // black. if (QualitySettings.antiAliasing > 1) { Debug.LogError("*** Antialiasing must be disabled for Gear VR ***"); } // we sync in the TimeWarp, so we don't want unity // syncing elsewhere QualitySettings.vSyncCount = 0; // try to render at 60fps Application.targetFrameRate = 60; // don't allow the app to run in the background Application.runInBackground = false; // Disable screen dimming Screen.sleepTimeout = SleepTimeout.NeverSleep; if (!androidJavaInit) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); javaVrActivityClass = new AndroidJavaClass("com.oculusvr.vrlib.VrActivity"); // Prepare for the RenderThreadInit() SetInitVariables(activity.GetRawObject(), javaVrActivityClass.GetRawClass()); #if USE_ENTITLEMENT_CHECK AndroidJavaObject entitlementChecker = new AndroidJavaObject("com.oculus.svclib.OVREntitlementChecker"); entitlementChecker.CallStatic("doAutomatedCheck", activity); #else Debug.Log( "Inhibiting Entitlement Check!" ); #endif androidJavaInit = true; } // We want to set up our touchpad messaging system OVRTouchpad.Create(); InitVolumeController(); #else SetEditorPlay(Application.isEditor); #endif prevEyeTextureAntiAliasing = OVRManager.instance.eyeTextureAntiAliasing; prevEyeTextureDepth = OVRManager.instance.eyeTextureDepth; prevEyeTextureFormat = OVRManager.instance.eyeTextureFormat; prevNativeTextureScale = OVRManager.instance.nativeTextureScale; prevVirtualTextureScale = OVRManager.instance.virtualTextureScale; prevMonoscopic = OVRManager.instance.monoscopic; prevHdr = OVRManager.instance.hdr; if (display == null) display = new OVRDisplay(); if (tracker == null) tracker = new OVRTracker(); if (resetTrackerOnLoad) display.RecenterPose(); #if !UNITY_ANDROID || UNITY_EDITOR // Except for D3D9, SDK rendering forces vsync unless you pass ovrHmdCap_NoVSync to Hmd.SetEnabledCaps(). if (timeWarp) { bool useUnityVSync = SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9"); QualitySettings.vSyncCount = useUnityVSync ? 1 : 0; } #endif #if UNITY_STANDALONE_WIN if (!OVRUnityVersionChecker.hasD3D9ExclusiveModeSupport && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9")) { MessageBox(0, "Direct3D 9 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } if (!OVRUnityVersionChecker.hasD3D11ExclusiveModeSupport && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11")) { MessageBox(0, "Direct3D 11 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } #endif }
private void Awake() { // Only allow one instance at runtime. if (instance != null) { enabled = false; DestroyImmediate(this); return; } instance = this; #if !UNITY_ANDROID || UNITY_EDITOR if (!ovrIsInitialized) { OVR_Initialize(); OVRPluginEvent.Issue(RenderEventType.Initialize); ovrIsInitialized = true; } var netVersion = new System.Version(Ovr.Hmd.OVR_VERSION_STRING); var ovrVersion = new System.Version(Ovr.Hmd.GetVersionString()); if (netVersion > ovrVersion) Debug.LogWarning("Using an older version of LibOVR."); #endif // Detect whether this platform is a supported platform RuntimePlatform currPlatform = Application.platform; isSupportedPlatform |= currPlatform == RuntimePlatform.Android; isSupportedPlatform |= currPlatform == RuntimePlatform.LinuxPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsPlayer; if (!isSupportedPlatform) { Debug.LogWarning("This platform is unsupported"); return; } #if UNITY_ANDROID && !UNITY_EDITOR // don't allow the application to run if orientation is not landscape left. if (Screen.orientation != ScreenOrientation.LandscapeLeft) { Debug.LogError("********************************************************************************\n"); Debug.LogError("***** Default screen orientation must be set to landscape left for VR.\n" + "***** Stopping application.\n"); Debug.LogError("********************************************************************************\n"); Debug.Break(); Application.Quit(); } // don't enable gyro, it is not used and triggers expensive display calls if (Input.gyro.enabled) { Debug.LogError("*** Auto-disabling Gyroscope ***"); Input.gyro.enabled = false; } // NOTE: On Adreno Lollipop, it is an error to have antiAliasing set on the // main window surface with front buffer rendering enabled. The view will // render black. // On Adreno KitKat, some tiling control modes will cause the view to render // black. if (QualitySettings.antiAliasing > 1) { Debug.LogError("*** Antialiasing must be disabled for Gear VR ***"); } // we sync in the TimeWarp, so we don't want unity // syncing elsewhere QualitySettings.vSyncCount = 0; // try to render at 60fps Application.targetFrameRate = 60; // don't allow the app to run in the background Application.runInBackground = false; // Disable screen dimming Screen.sleepTimeout = SleepTimeout.NeverSleep; if (!androidJavaInit) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); javaVrActivityClass = new AndroidJavaClass("com.oculusvr.vrlib.VrActivity"); // Prepare for the RenderThreadInit() SetInitVariables(activity.GetRawObject(), javaVrActivityClass.GetRawClass()); #if !INHIBIT_ENTITLEMENT_CHECK AndroidJavaObject entitlementChecker = new AndroidJavaObject("com.oculus.svclib.OVREntitlementChecker"); entitlementChecker.CallStatic("doAutomatedCheck", activity); #else Debug.Log( "Inhibiting Entitlement Check!" ); #endif androidJavaInit = true; } // We want to set up our touchpad messaging system OVRTouchpad.Create(); InitVolumeController(); #else SetEditorPlay(Application.isEditor); #endif prevEyeTextureAntiAliasing = OVRManager.instance.eyeTextureAntiAliasing; prevEyeTextureDepth = OVRManager.instance.eyeTextureDepth; prevEyeTextureFormat = OVRManager.instance.eyeTextureFormat; prevNativeTextureScale = OVRManager.instance.nativeTextureScale; prevVirtualTextureScale = OVRManager.instance.virtualTextureScale; prevMonoscopic = OVRManager.instance.monoscopic; prevHdr = OVRManager.instance.hdr; if (display == null) display = new OVRDisplay(); if (tracker == null) tracker = new OVRTracker(); if (resetTrackerOnLoad) display.RecenterPose(); #if !UNITY_ANDROID || UNITY_EDITOR // Except for D3D9, SDK rendering forces vsync unless you pass ovrHmdCap_NoVSync to Hmd.SetEnabledCaps(). if (timeWarp) { bool useUnityVSync = SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9"); QualitySettings.vSyncCount = useUnityVSync ? 1 : 0; } #endif #if (UNITY_STANDALONE_WIN && (UNITY_4_6 || UNITY_4_5)) bool unity_4_6 = false; bool unity_4_5_2 = false; bool unity_4_5_3 = false; bool unity_4_5_4 = false; bool unity_4_5_5 = false; #if (UNITY_4_6) unity_4_6 = true; #elif (UNITY_4_5_2) unity_4_5_2 = true; #elif (UNITY_4_5_3) unity_4_5_3 = true; #elif (UNITY_4_5_4) unity_4_5_4 = true; #elif (UNITY_4_5_5) unity_4_5_5 = true; #endif // Detect correct Unity releases which contain the fix for D3D11 exclusive mode. string version = Application.unityVersion; int releaseNumber; bool releaseNumberFound = Int32.TryParse(Regex.Match(version, @"\d+$").Value, out releaseNumber); // Exclusive mode was broken for D3D9 in Unity 4.5.2p2 - 4.5.4 and 4.6 builds prior to beta 21 bool unsupportedExclusiveModeD3D9 = (unity_4_6 && version.Last(char.IsLetter) == 'b' && releaseNumberFound && releaseNumber < 21) || (unity_4_5_2 && version.Last(char.IsLetter) == 'p' && releaseNumberFound && releaseNumber >= 2) || (unity_4_5_3) || (unity_4_5_4); // Exclusive mode was broken for D3D11 in Unity 4.5.2p2 - 4.5.5p2 and 4.6 builds prior to f1 bool unsupportedExclusiveModeD3D11 = (unity_4_6 && version.Last(char.IsLetter) == 'b') || (unity_4_5_2 && version.Last(char.IsLetter) == 'p' && releaseNumberFound && releaseNumber >= 2) || (unity_4_5_3) || (unity_4_5_4) || (unity_4_5_5 && version.Last(char.IsLetter) == 'f') || (unity_4_5_5 && version.Last(char.IsLetter) == 'p' && releaseNumberFound && releaseNumber < 3); if (unsupportedExclusiveModeD3D9 && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9")) { MessageBox(0, "Direct3D 9 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } if (unsupportedExclusiveModeD3D11 && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11")) { MessageBox(0, "Direct3D 11 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } #endif }
private void Awake() { // Only allow one instance at runtime. if (instance != null) { enabled = false; DestroyImmediate(this); return; } instance = this; System.Version netVersion = OVRPlugin.wrapperVersion; System.Version ovrVersion = OVRPlugin.version; Debug.Log("Unity v" + Application.unityVersion + ", " + "Oculus Integration v" + netVersion + ", " + "OVRPlugin v" + ovrVersion + "."); // Detect whether this platform is a supported platform RuntimePlatform currPlatform = Application.platform; isSupportedPlatform |= currPlatform == RuntimePlatform.Android; isSupportedPlatform |= currPlatform == RuntimePlatform.LinuxPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsPlayer; if (!isSupportedPlatform) { Debug.LogWarning("This platform is unsupported"); return; } #if !UNITY_ANDROID || UNITY_EDITOR if (OVRUnityVersionChecker.hasBuiltInVR) { Debug.LogWarning("The Oculus Unity Legacy Integration is only supported in Unity 4.x releases. For Unity 5.x, please migrate to the Oculus Utilities for Unity package and use Unity's built-in VR support (available in Unity 5.1 and later)."); isVRPresent = false; } else if (!ovrIsInitialized) { //HACK: For some reason, Unity doesn't call UnitySetGraphicsDevice until we make the first P/Invoke call. OVRPluginEvent.eventBase = OVRPluginEvent.eventBase; #if !UNITY_ANDROID || UNITY_EDITOR //Handle all log messages OVR_FlushLog(OnLogMessage); #endif // If unable to load the Oculus Runtime. if (!OVRPlugin.initialized) { bool isBadWinRenderer = ((Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) && !SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11")); if (isBadWinRenderer) { Debug.LogWarning("Only D3D11 is supported on Windows."); } else { Debug.LogWarning("Runtime is not present or no Rift attached. Running without VR."); } // Runtime is not installed if ovr_Initialize() fails. isVRPresent = false; // Go monoscopic in response. monoscopic = true; } else { OVRPluginEvent.Issue(RenderEventType.InitRenderThread); isVRPresent = true; #if UNITY_EDITOR if (!OVRUnityVersionChecker.hasEditorVRSupport) { // Only allow VR in standalones. isVRPresent = false; Debug.LogWarning("VR rendering is not supported in the editor. Please update to 4.6.7p4 or build a stand-alone player."); } #endif if (netVersion.Major > ovrVersion.Major || netVersion.Major == ovrVersion.Major && netVersion.Minor > ovrVersion.Minor) { isVRPresent = false; Debug.LogWarning("Version check failed. Please make sure you are using OVRPlugin " + Ovr.Hmd.OVR_VERSION_STRING + " or newer."); } OVRPlugin.queueAheadFraction = 0f; ovrIsInitialized = true; } } SetEditorPlay(Application.isEditor); #else // UNITY_ANDROID && !UNITY_EDITOR: Start of Android init. // Android integration does not dynamically load its runtime. isVRPresent = true; // log the unity version Debug.Log("Unity Version: " + Application.unityVersion); // don't allow the application to run if orientation is not landscape left. if (Screen.orientation != ScreenOrientation.LandscapeLeft) { Debug.LogError("********************************************************************************\n"); Debug.LogError("***** Default screen orientation must be set to landscape left for VR.\n" + "***** Stopping application.\n"); Debug.LogError("********************************************************************************\n"); Debug.Break(); Application.Quit(); } // don't enable gyro, it is not used and triggers expensive display calls if (Input.gyro.enabled) { Debug.LogError("*** Auto-disabling Gyroscope ***"); Input.gyro.enabled = false; } // NOTE: On Adreno Lollipop, it is an error to have antiAliasing set on the // main window surface with front buffer rendering enabled. The view will // render black. // On Adreno KitKat, some tiling control modes will cause the view to render // black. if (QualitySettings.antiAliasing > 1) { Debug.LogError("*** Antialiasing must be disabled for Gear VR ***"); } // we sync in the TimeWarp, so we don't want unity // syncing elsewhere QualitySettings.vSyncCount = 0; // try to render at 60fps Application.targetFrameRate = 60; // don't allow the app to run in the background Application.runInBackground = false; // Disable screen dimming Screen.sleepTimeout = SleepTimeout.NeverSleep; if (!androidJavaInit) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = unityPlayer.GetStatic <AndroidJavaObject>("currentActivity"); // Prepare for the RenderThreadInit() SetInitVariables(activity.GetRawObject(), System.IntPtr.Zero); #if USE_ENTITLEMENT_CHECK AndroidJavaObject entitlementChecker = new AndroidJavaObject("com.oculus.svclib.OVREntitlementChecker"); entitlementChecker.CallStatic("doAutomatedCheck", activity); #else Debug.Log("Inhibiting Entitlement Check!"); #endif androidJavaInit = true; } // We want to set up our touchpad messaging system OVRTouchpad.Create(); InitVolumeController(); // set an event delegate like this if you wish to handle events like "reorient". //SetVrApiEventDelegate( VrApiEventDefaultDelegate ); #endif // End of android init. prevEyeTextureAntiAliasing = OVRManager.instance.eyeTextureAntiAliasing; prevEyeTextureDepth = OVRManager.instance.eyeTextureDepth; prevEyeTextureFormat = OVRManager.instance.eyeTextureFormat; prevNativeTextureScale = OVRManager.instance.nativeTextureScale; prevVirtualTextureScale = OVRManager.instance.virtualTextureScale; prevMonoscopic = OVRManager.instance.monoscopic; prevHdr = OVRManager.instance.hdr; if (tracker == null) { tracker = new OVRTracker(); } if (display == null) { display = new OVRDisplay(); } else { wasRecreated = true; } if (input == null) { input = new OVRInput(); } if (resetTrackerOnLoad) { display.RecenterPose(); } #if !UNITY_ANDROID || UNITY_EDITOR // Except for D3D9, SDK rendering forces vsync unless you pass ovrHmdCap_NoVSync to Hmd.SetEnabledCaps(). if (timeWarp) { bool useUnityVSync = SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9"); QualitySettings.vSyncCount = useUnityVSync ? 1 : 0; QualitySettings.maxQueuedFrames = 0; } #endif #if UNITY_STANDALONE_WIN if (!OVRUnityVersionChecker.hasD3D9ExclusiveModeSupport && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9")) { MessageBox(0, "Direct3D 9 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } if (!OVRUnityVersionChecker.hasD3D11ExclusiveModeSupport && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11")) { MessageBox(0, "Direct3D 11 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } #endif }
private void Update() { if (!isVRPresent) { return; } if (!usingPositionTrackingCached || usingPositionTracking != usePositionTracking) { tracker.isEnabled = usePositionTracking; usingPositionTracking = usePositionTracking; usingPositionTrackingCached = true; } // Dispatch any events. if (HMDLost != null && wasHmdPresent && !display.isPresent) { HMDLost(); } if (HMDAcquired != null && !wasHmdPresent && display.isPresent) { HMDAcquired(); } wasHmdPresent = display.isPresent; if (Created != null && wasRecreated) { Created(); } wasRecreated = false; if (TrackingLost != null && wasPositionTracked && !tracker.isPositionTracked) { TrackingLost(); } if (TrackingAcquired != null && !wasPositionTracked && tracker.isPositionTracked) { TrackingAcquired(); } wasPositionTracked = tracker.isPositionTracked; #if (!UNITY_ANDROID || UNITY_EDITOR) OVRPlugin.nativeTextureScale = nativeTextureScale; OVRPlugin.virtualTextureScale = virtualTextureScale; #endif if (NativeTextureScaleModified != null && nativeTextureScale != prevNativeTextureScale) { NativeTextureScaleModified(prevNativeTextureScale, nativeTextureScale); } prevNativeTextureScale = nativeTextureScale; if (VirtualTextureScaleModified != null && virtualTextureScale != prevVirtualTextureScale) { VirtualTextureScaleModified(prevVirtualTextureScale, virtualTextureScale); } prevVirtualTextureScale = virtualTextureScale; if (EyeTextureAntiAliasingModified != null && eyeTextureAntiAliasing != prevEyeTextureAntiAliasing) { EyeTextureAntiAliasingModified(prevEyeTextureAntiAliasing, eyeTextureAntiAliasing); } prevEyeTextureAntiAliasing = eyeTextureAntiAliasing; if (EyeTextureDepthModified != null && eyeTextureDepth != prevEyeTextureDepth) { EyeTextureDepthModified(prevEyeTextureDepth, eyeTextureDepth); } prevEyeTextureDepth = eyeTextureDepth; if (EyeTextureFormatModified != null && eyeTextureFormat != prevEyeTextureFormat) { EyeTextureFormatModified(prevEyeTextureFormat, eyeTextureFormat); } prevEyeTextureFormat = eyeTextureFormat; if (MonoscopicModified != null && monoscopic != prevMonoscopic) { MonoscopicModified(prevMonoscopic, monoscopic); } prevMonoscopic = monoscopic; if (HdrModified != null && hdr != prevHdr) { HdrModified(prevHdr, hdr); } prevHdr = hdr; if (isHSWDisplayed && Input.anyKeyDown) { DismissHSWDisplay(); if (HSWDismissed != null) { HSWDismissed(); } } display.timeWarp = timeWarp; display.Update(); input.Update(); #if UNITY_ANDROID && !UNITY_EDITOR if (volumeController != null) { if (volumeControllerTransform == null) { if (gameObject.GetComponent <OVRCameraRig>() != null) { volumeControllerTransform = gameObject.GetComponent <OVRCameraRig>().centerEyeAnchor; } } volumeController.UpdatePosition(volumeControllerTransform); } // Service VrApi events // If this code is not called, internal VrApi events will never be pushed to the internal event queue. VrApiEventStatus pendingResult = (VrApiEventStatus)OVR_GetNextPendingEvent(EventData, (uint)MaxDataSize); while (pendingResult == VrApiEventStatus.PENDING) { if (OnVrApiEvent != null) { OnVrApiEvent(EventData.ToString()); } else { Debug.Log("No OnVrApiEvent delegate set!"); } EventData.Length = 0; pendingResult = (VrApiEventStatus)OVR_GetNextPendingEvent(EventData, (uint)MaxDataSize); } #endif }
private void Awake() { // Only allow one instance at runtime. if (instance != null) { enabled = false; DestroyImmediate(this); return; } instance = this; #if !UNITY_ANDROID || UNITY_EDITOR if (!ovrIsInitialized) { OVR_Initialize(); OVRPluginEvent.Issue(RenderEventType.Initialize); ovrIsInitialized = true; } var netVersion = new System.Version(Ovr.Hmd.OVR_VERSION_STRING); System.Version ovrVersion = new System.Version("0.0.0"); var versionString = Ovr.Hmd.GetVersionString(); var success = false; try { ovrVersion = new System.Version(versionString); success = true; } catch (Exception e) { Debug.Log("Failed to parse Oculus version string \"" + versionString + "\" with message \"" + e.Message + "\"."); } if (!success || netVersion > ovrVersion) { Debug.LogWarning("Version check failed. Please make sure you are using Oculus runtime " + Ovr.Hmd.OVR_VERSION_STRING + " or newer."); } #endif // Detect whether this platform is a supported platform RuntimePlatform currPlatform = Application.platform; isSupportedPlatform |= currPlatform == RuntimePlatform.Android; isSupportedPlatform |= currPlatform == RuntimePlatform.LinuxPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.OSXPlayer; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsEditor; isSupportedPlatform |= currPlatform == RuntimePlatform.WindowsPlayer; if (!isSupportedPlatform) { Debug.LogWarning("This platform is unsupported"); return; } #if UNITY_ANDROID && !UNITY_EDITOR // log the unity version Debug.Log("Unity Version: " + Application.unityVersion); // don't allow the application to run if orientation is not landscape left. if (Screen.orientation != ScreenOrientation.LandscapeLeft) { Debug.LogError("********************************************************************************\n"); Debug.LogError("***** Default screen orientation must be set to landscape left for VR.\n" + "***** Stopping application.\n"); Debug.LogError("********************************************************************************\n"); Debug.Break(); Application.Quit(); } // don't enable gyro, it is not used and triggers expensive display calls if (Input.gyro.enabled) { Debug.LogError("*** Auto-disabling Gyroscope ***"); Input.gyro.enabled = false; } // NOTE: On Adreno Lollipop, it is an error to have antiAliasing set on the // main window surface with front buffer rendering enabled. The view will // render black. // On Adreno KitKat, some tiling control modes will cause the view to render // black. if (QualitySettings.antiAliasing > 1) { Debug.LogError("*** Antialiasing must be disabled for Gear VR ***"); } // we sync in the TimeWarp, so we don't want unity // syncing elsewhere QualitySettings.vSyncCount = 0; // try to render at 60fps Application.targetFrameRate = 60; // don't allow the app to run in the background Application.runInBackground = false; // Disable screen dimming Screen.sleepTimeout = SleepTimeout.NeverSleep; if (!androidJavaInit) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = unityPlayer.GetStatic <AndroidJavaObject>("currentActivity"); javaVrActivityClass = new AndroidJavaClass("com.oculusvr.vrlib.VrActivity"); // Prepare for the RenderThreadInit() SetInitVariables(activity.GetRawObject(), javaVrActivityClass.GetRawClass()); #if USE_ENTITLEMENT_CHECK AndroidJavaObject entitlementChecker = new AndroidJavaObject("com.oculus.svclib.OVREntitlementChecker"); entitlementChecker.CallStatic("doAutomatedCheck", activity); #else Debug.Log("Inhibiting Entitlement Check!"); #endif androidJavaInit = true; } // We want to set up our touchpad messaging system OVRTouchpad.Create(); InitVolumeController(); // set an event delegate like this if you wish to handle events like "reorient". //SetVrApiEventDelegate( VrApiEventDefaultDelegate ); #else SetEditorPlay(Application.isEditor); #endif prevEyeTextureAntiAliasing = OVRManager.instance.eyeTextureAntiAliasing; prevEyeTextureDepth = OVRManager.instance.eyeTextureDepth; prevEyeTextureFormat = OVRManager.instance.eyeTextureFormat; prevNativeTextureScale = OVRManager.instance.nativeTextureScale; prevVirtualTextureScale = OVRManager.instance.virtualTextureScale; prevMonoscopic = OVRManager.instance.monoscopic; prevHdr = OVRManager.instance.hdr; if (display == null) { display = new OVRDisplay(); } if (tracker == null) { tracker = new OVRTracker(); } if (resetTrackerOnLoad) { display.RecenterPose(); } #if !UNITY_ANDROID || UNITY_EDITOR // Except for D3D9, SDK rendering forces vsync unless you pass ovrHmdCap_NoVSync to Hmd.SetEnabledCaps(). if (timeWarp) { bool useUnityVSync = SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9"); QualitySettings.vSyncCount = useUnityVSync ? 1 : 0; } #endif #if UNITY_STANDALONE_WIN if (!OVRUnityVersionChecker.hasD3D9ExclusiveModeSupport && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 9")) { MessageBox(0, "Direct3D 9 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } if (!OVRUnityVersionChecker.hasD3D11ExclusiveModeSupport && !display.isDirectMode && SystemInfo.graphicsDeviceVersion.Contains("Direct3D 11")) { MessageBox(0, "Direct3D 11 extended mode is not supported in this configuration. " + "Please use direct display mode, a different graphics API, or rebuild the application with a newer Unity version." , "VR Configuration Warning", 0); } #endif }
/// <summary> /// Updates this instance. /// </summary> private void Update() { #if UNITY_ANDROID && !UNITY_EDITOR if (this.isGoingHome) { if (this.goingHomeFrameCount == 1) { this.goingHomeFrameCount++; GoHome(); return; } else if (this.goingHomeFrameCount < 1) { this.goingHomeFrameCount++; } else { return; } } if (this.HmdLost != null && this.isHmdPresent && !this.Hmd.IsPresent) { this.HmdLost.Invoke(); } if (this.HmdGained != null && !this.isHmdPresent && this.Hmd.IsPresent) { this.HmdGained.Invoke(); } this.isHmdPresent = this.Hmd.IsPresent; if (this.EyeTextureAntiAliasingModified != null && this.EyeTextureAntiAliasing != this.prevEyeTextureAntiAliasing) { this.EyeTextureAntiAliasingModified(this.prevEyeTextureAntiAliasing, this.EyeTextureAntiAliasing); } this.prevEyeTextureAntiAliasing = this.EyeTextureAntiAliasing; if (this.EyeTextureDepthModified != null && this.EyeTextureDepth != this.prevEyeTextureDepth) { this.EyeTextureDepthModified(this.prevEyeTextureDepth, this.EyeTextureDepth); } this.prevEyeTextureDepth = this.EyeTextureDepth; if (this.EyeTextureFormatModified != null && this.EyeTextureFormat != this.prevEyeTextureFormat) { this.EyeTextureFormatModified(this.prevEyeTextureFormat, this.EyeTextureFormat); } this.prevEyeTextureFormat = this.EyeTextureFormat; if (this.HdrModified != null && this.IsHdrEnabled != this.prevHdr) { this.HdrModified(this.prevHdr, this.IsHdrEnabled); } this.prevHdr = this.IsHdrEnabled; this.Hmd.Update(); #endif }
/// <summary> /// Awakes this instance. /// </summary> private void Awake() { if (Instance != null) { this.enabled = false; MonoBehaviour.DestroyImmediate(this); return; } Instance = this; #if UNITY_ANDROID && !UNITY_EDITOR if (Screen.orientation != ScreenOrientation.LandscapeLeft) { Debug.LogError("***** Default screen Rotation must be set to landscape left for VR.\n"); Debug.Break(); Application.Quit(); } if (Input.gyro.enabled) { Input.gyro.enabled = false; } // NOTE: On Adreno Lollipop, it is an error to have antiAliasing set on the // main window surface with front buffer rendering enabled. The view will // render black. // On Adreno KitKat, some tiling control modes will cause the view to render // black. if (QualitySettings.antiAliasing > 1) { Debug.LogError("*** Antialiasing must be disabled ***"); } // we sync in the TimeWarpDuration, so we don't want unity // syncing elsewhere QualitySettings.vSyncCount = 0; Application.targetFrameRate = 60; Application.runInBackground = false; Screen.sleepTimeout = SleepTimeout.NeverSleep; if (this.currentActivity == null) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); this.currentActivity = unityPlayer.GetStatic <AndroidJavaObject>("currentActivity"); this.javaVrActivityClass = new AndroidJavaClass("com.mi.dlabs.vr.sdk.plugins.unity.MiVRUnityPlayerActivity"); this.SetInitVariables(this.currentActivity.GetRawObject(), this.javaVrActivityClass.GetRawClass()); } this.prevEyeTextureAntiAliasing = this.EyeTextureAntiAliasing; this.prevEyeTextureDepth = this.EyeTextureDepth; this.prevEyeTextureFormat = this.EyeTextureFormat; this.prevHdr = this.IsHdrEnabled; if (this.Hmd == null) { this.Hmd = new MiHMD(); } if (this.ResetTrackerOnLoad) { this.Hmd.RecenterHeaderPosition(); } #endif }
/// <summary> /// Updates this instance. /// </summary> private void Update() { // Debug.Log("VrManager.Update: " + frameCount); this.frameCount++; #if UNITY_ANDROID && !UNITY_EDITOR if (this.isGoingHome) { if (this.goingHomeFrameCount == 1) { this.goingHomeFrameCount++; GoToHome(); return; } else if (this.goingHomeFrameCount < 1) { this.goingHomeFrameCount++; } else { return; } } if (this.HmdLost != null && this.isHmdPresent && !this.Hmd.IsPresent) { this.HmdLost.Invoke(); } if (this.HmdGained != null && !this.isHmdPresent && this.Hmd.IsPresent) { this.HmdGained.Invoke(); } this.isHmdPresent = this.Hmd.IsPresent; if (this.EyeTextureAntiAliasingModified != null && this.EyeTextureAntiAliasing != this.prevEyeTextureAntiAliasing) { this.EyeTextureAntiAliasingModified(this.prevEyeTextureAntiAliasing, this.EyeTextureAntiAliasing); } this.prevEyeTextureAntiAliasing = this.EyeTextureAntiAliasing; if (this.EyeTextureDepthModified != null && this.EyeTextureDepth != this.prevEyeTextureDepth) { this.EyeTextureDepthModified(this.prevEyeTextureDepth, this.EyeTextureDepth); } this.prevEyeTextureDepth = this.EyeTextureDepth; if (this.EyeTextureFormatModified != null && this.EyeTextureFormat != this.prevEyeTextureFormat) { this.EyeTextureFormatModified(this.prevEyeTextureFormat, this.EyeTextureFormat); } this.prevEyeTextureFormat = this.EyeTextureFormat; if (this.HdrModified != null && this.IsHdrEnabled != this.prevHdr) { this.HdrModified(this.prevHdr, this.IsHdrEnabled); } this.prevHdr = this.IsHdrEnabled; if (this.ChromaticCorrectionModified != null && this.ChromaticCorrection != this.prevChromaticCorrection) { this.ChromaticCorrectionModified(this.prevChromaticCorrection, this.ChromaticCorrection); EnableChromaticAberration(this.ChromaticCorrection); } this.prevChromaticCorrection = this.ChromaticCorrection; this.Hmd.Update(); #endif }
/// <summary> /// Awakes this instance. /// </summary> private void Awake() { #if UNITY_EDITOR this.TimeWarp = false; #endif if (Instance != null) { this.enabled = false; MonoBehaviour.DestroyImmediate(this); return; } Instance = this; #if UNITY_ANDROID && !UNITY_EDITOR if (Screen.orientation != ScreenOrientation.LandscapeLeft) { Debug.LogError("***** Default screen Rotation must be set to landscape left for VR.\n"); Debug.Break(); Application.Quit(); } if (Input.gyro.enabled) { Input.gyro.enabled = false; } // we sync in the TimeWarpDuration, so we don't want unity // syncing elsewhere QualitySettings.vSyncCount = 0; Application.targetFrameRate = 60; Application.runInBackground = false; Screen.sleepTimeout = SleepTimeout.NeverSleep; if (this.currentActivity == null) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); this.currentActivity = unityPlayer.GetStatic <AndroidJavaObject>("currentActivity"); this.javaVrActivityClass = new AndroidJavaClass("com.mi.dlabs.vr.sdk.plugins.unity.MiVRUnityPlayerActivity"); this.SetInitVariables(this.currentActivity.GetRawObject(), this.javaVrActivityClass.GetRawClass()); SetFovMode(FixedFoveatedLevel); SetRefreshRateMode(RefreshRate); SetRecenterHmdWhenRecenterController(RecenterHmdWhenRecenterController); } this.prevEyeTextureAntiAliasing = this.EyeTextureAntiAliasing; this.prevEyeTextureDepth = this.EyeTextureDepth; this.prevEyeTextureFormat = this.EyeTextureFormat; this.prevHdr = this.IsHdrEnabled; this.prevChromaticCorrection = this.ChromaticCorrection; if (this.Hmd == null) { this.Hmd = new MiHMD(); } if (this.ResetTrackerOnLoad) { this.Hmd.RecenterHeaderPosition(); } #endif }