Example #1
0
    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
    }
Example #2
0
	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
	}
Example #3
0
    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
    }
Example #4
0
	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
	}
Example #5
0
	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
	}
Example #6
0
	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
	}
Example #7
0
	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
	}
Example #8
0
    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
    }
Example #9
0
    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
    }
Example #10
0
    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
    }
Example #11
0
    /// <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
    }
Example #12
0
    /// <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
    }
Example #13
0
        /// <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
        }
Example #14
0
        /// <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
        }