Issue() public static method

Immediately issues the given event.
public static Issue ( RenderEventType eventType ) : void
eventType RenderEventType
return void
    void OnApplicationQuit()
    {
        Debug.Log("OnApplicationQuit");

        // This will trigger the shutdown on the render thread
        OVRPluginEvent.Issue(RenderEventType.ShutdownRenderThread);
    }
    /// <summary>
    /// Leaves the application and returns to the launcher/dashboard with confirmation
    /// </summary>
    public void ReturnToLauncher()
    {
#if UNITY_ANDROID && !UNITY_EDITOR
        // show the platform UI quit prompt
        OVRPluginEvent.Issue(RenderEventType.PlatformUIConfirmQuit);
#endif
    }
Beispiel #3
0
 public void QuiteGame()
 {
             #if UNITY_ANDROID && !UNITY_EDITOR
     // show the platform UI
     OVRPluginEvent.Issue(RenderEventType.PlatformUIConfirmQuit);
             #endif
 }
    /// <summary>
    /// Show the platform UI global menu
    /// </summary>
    void ShowGlobalMenu()
    {
        Debug.Log("[PlatformUI-Global] Showing @ " + Time.time);
#if UNITY_ANDROID && !UNITY_EDITOR
        OVRPluginEvent.Issue(RenderEventType.PlatformUI);
        platformUIStarted = true;
#endif
    }
    /// <summary>
    /// Show the confirm quit menu
    /// </summary>
    void ShowConfirmQuitMenu()
    {
        Debug.Log("[PlatformUI-ConfirmQuit] Showing @ " + Time.time);
#if UNITY_ANDROID && !UNITY_EDITOR
        OVRPluginEvent.Issue(RenderEventType.PlatformUIConfirmQuit);
        platformUIStarted = true;
#endif
    }
Beispiel #6
0
    void UpdateVisibility()
    {
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            homeButtonDownTime = Time.realtimeSinceStartup;
        }
        else if (Input.GetKeyUp(KeyCode.Escape))
        {
            homeButtonDownTime = 0f;
        }

        float elapsedTime = homeButtonDownTime != 0f ? Time.realtimeSinceStartup - homeButtonDownTime : 0f;

        if (elapsedTime >= longPressDelay)
        {
            homeButtonDownTime = 0f;
            Debug.Log("Open the platform UI");
                        #if UNITY_ANDROID && !UNITY_EDITOR
            // Show the platform UI
            OVRPluginEvent.Issue(RenderEventType.PlatformUI);
                        #endif
        }

        if (isVisible)
        {
            if (King.visitor.sight.enabled)
            {
                King.visitor.sight.enabled = false;
            }
        }

        if (King.placeManager.currentPlace == null || King.placeManager.currentPlace.placeState != Place.PlaceState.Playable)
        {
            if (isVisible)
            {
                Hide();
            }

            return;
        }

        if (!isVisible)
        {
            if (Input.GetKeyUp(KeyCode.Escape))
            {
                Show();
            }
        }
        else
        {
            if (Input.GetKeyUp(KeyCode.Escape))
            {
                Hide();
            }
        }
    }
Beispiel #7
0
    private void OnApplicationQuit()
    {
                #if !UNITY_ANDROID || UNITY_EDITOR
        isQuitting = true;
                #else
        Debug.Log("OnApplicationQuit");

        // This will trigger the shutdown on the render thread
        OVRPluginEvent.Issue(RenderEventType.ShutdownRenderThread);
                #endif
    }
    /// <summary>
    /// Change default vr mode parms dynamically.
    /// </summary>
    void Update()
    {
        // NOTE: some of the buttons defined in OVRGamepadController.Button are not available on the Android game pad controller
        if (Input.GetButtonDown(OVRGamepadController.ButtonNames[(int)resetButton]))
        {
#if (UNITY_ANDROID && !UNITY_EDITOR)
            OVR_VrModeParms_SetCpuLevel(0);
            OVR_VrModeParms_SetGpuLevel(1);
            OVRPluginEvent.Issue(RenderEventType.ResetVrModeParms);
#endif
        }
    }
Beispiel #9
0
    private void OnDisable()
    {
        if (!isQuitting)
        {
            return;
        }

        if (ovrIsInitialized)
        {
            OVR_Destroy();
            OVRPluginEvent.Issue(RenderEventType.Destroy);
            _capiHmd = null;

            ovrIsInitialized = false;
        }
    }
Beispiel #10
0
    /// <summary>
    /// Change default vr mode parms dynamically.
    /// </summary>
    void Update()
    {
        // NOTE: some of the buttons defined in OVRGamepadController.Button are not available on the Android game pad controller
        if (Input.GetButtonDown(OVRGamepadController.ButtonNames[(int)resetButton]))
        {
            //*************************
            // Dynamically change VrModeParms cpu and gpu level.
            // NOTE: Reset will cause 1 frame of flicker as it leavesI
            // and re-enters Vr mode.
            //*************************
#if (UNITY_ANDROID && !UNITY_EDITOR)
            OVR_VrModeParms_SetCpuLevel(0);
            OVR_VrModeParms_SetGpuLevel(1);
            OVRPluginEvent.Issue(RenderEventType.ResetVrModeParms);
#endif
        }
    }
Beispiel #11
0
    private void OnDisable()
    {
#if !UNITY_ANDROID || UNITY_EDITOR
        if (!isQuitting)
        {
            return;
        }

        if (ovrIsInitialized)
        {
            display.ReleaseEyeTextures();
            OVRPluginEvent.Issue(RenderEventType.ShutdownRenderThread);

            ovrIsInitialized = false;
        }
#endif
        // NOTE: The coroutines will also be stopped when the object is destroyed.
        StopAllCoroutines();
    }
Beispiel #12
0
    private void OnDisable()
    {
#if !UNITY_ANDROID || UNITY_EDITOR
        if (!isQuitting)
        {
            return;
        }

        if (ovrIsInitialized)
        {
            OVR_Destroy();
            OVRPluginEvent.Issue(RenderEventType.Destroy);
            _capiHmd = null;

            ovrIsInitialized = false;
        }
#else
        StopAllCoroutines();
#endif
    }
Beispiel #13
0
    private void OnDisable()
    {
#if !UNITY_ANDROID || UNITY_EDITOR
        if (!isQuitting)
        {
            return;
        }

        if (ovrIsInitialized)
        {
            OVR_Destroy();
            OVRPluginEvent.Issue(RenderEventType.Destroy);
            _capiHmd = null;

            ovrIsInitialized = false;
        }
#endif
        // NOTE: The coroutines will also be stopped when the object is destroyed.
        StopAllCoroutines();
    }
    /// <summary>
    /// Start this instance.
    /// </summary>
    void Start()
    {
        // Get the required Rift information needed to set cameras
        InitCameraControllerVariables();

        // Initialize the cameras
        UpdateCamerasDirtyFlag = true;

#if (!UNITY_ANDROID || UNITY_EDITOR)
        UpdateDistortionDirtyFlag = true;
        SetScaleRenderTarget();
        SetMaximumVisualQuality();

        EnableTimeWarp(timeWarp);
#else
        OVR_SetEyeParms(EyeResolution, EyeResolution);

        // Initialize all the rendertargets we are going to use for async time warp
        for (int i = 0; i < EyeBufferCount * 2; i++)
        {
            if ((CameraTextures[i] == null) || !CameraTextures[i].IsCreated())
            {
                // TODO: honor use24BitDepthBuffer in PlayerSettings if we can get access to that info
                // NOTE: Android appears to ignore the use24BitDepthBuffer flag and we always get a 24
                // bit window depth buffer.
                // As a minor optimization, the depth buffer precision may be set to 16-bits.
                CameraTextures[i] = new RenderTexture(EyeResolution, EyeResolution, 24);
                CameraTextures[i].antiAliasing = 2;
                CameraTextures[i].Create();                 // upload to the GPU so we can get the hardware id
                // Note: calling GetNativeTexturePtr() with mt-rendering will synchronize with the rendering thread,
                // set up texture ids only at initialization time.
                CameraTextureIds[i] = CameraTextures[i].GetNativeTextureID();
            }
        }

        // This will trigger the init on the render thread
        OVRPluginEvent.Issue(RenderEventType.InitRenderThread);

        SetMaximumVisualQuality();
#endif
    }
Beispiel #15
0
 public static void PlatformUIGlobalMenu()
 {
             #if UNITY_ANDROID && !UNITY_EDITOR
     OVRPluginEvent.Issue(RenderEventType.PlatformUI);
             #endif
 }
Beispiel #16
0
 public static void PlatformUIConfirmQuit()
 {
             #if UNITY_ANDROID && !UNITY_EDITOR
     OVRPluginEvent.Issue(RenderEventType.PlatformUIConfirmQuit);
             #endif
 }
    /// <summary>
    /// Processes input and handles menu interaction
    /// as per the Unity integration doc, the back button responds to "mouse 1" button down/up/etc
    /// </summary>
    void Update()
    {
        if (!isVisible)
        {
            if (Input.GetKeyDown(KeyCode.Escape))
            {
                CancelInvoke("DelayedShowMenu");
                if (Time.realtimeSinceStartup < (homeButtonDownTime + doubleTapDelay))
                {
                    // reset so the menu doesn't pop up after resetting orientation
                    homeButtonDownTime = 0f;
                    // reset the HMT orientation
                    //OVRManager.display.RecenterPose();
                }
                else
                {
                    homeButtonDownTime = Time.realtimeSinceStartup;
                }
            }
            else if (Input.GetKey(KeyCode.Escape) && ((Time.realtimeSinceStartup - homeButtonDownTime) >= longPressDelay))
            {
                Debug.Log("[PlatformUI] Showing @ " + Time.time);
                // reset so something else doesn't trigger afterwards
                Input.ResetInputAxes();
                homeButtonDownTime = 0.0f;
                CancelInvoke("DelayedShowMenu");
#if UNITY_ANDROID && !UNITY_EDITOR
                // show the platform UI
                OVRPluginEvent.Issue(RenderEventType.PlatformUI);
#endif
            }
            else if (Input.GetKeyUp(KeyCode.Escape))
            {
                float elapsedTime = (Time.realtimeSinceStartup - homeButtonDownTime);
                if (elapsedTime < longPressDelay)
                {
                    if (elapsedTime >= doubleTapDelay)
                    {
                        Show(true);
                    }
                    else
                    {
                        Invoke("DelayedShowMenu", (doubleTapDelay - elapsedTime));
                    }
                }
            }
        }
        else if (!isShowingOrHiding)
        {
            // menu is visible, check input
            if (Input.GetKeyDown(KeyCode.Escape))
            {
                // back out of the menu
                Show(false);
            }
            else
            {
                // handle user gaze
                Ray ray = new Ray(cameraController.centerEyeAnchor.position, cameraController.centerEyeAnchor.forward);

                // find the active button
                HomeButton lastActiveButton = activeButton;
                activeButton = null;
                RaycastHit hit = new RaycastHit();
                for (int i = 0; i < buttons.Length; i++)
                {
                    if (buttons[i].GetComponent <Collider>().Raycast(ray, out hit, 100.0f))
                    {
                        activeButton = buttons[i];
                        if (activeButton != lastActiveButton)
                        {
                            // play highlight sound and anim
                            PlaySound(menuHighlightSound);
                            PlayAnim(buttons[i].name + highLightPrefix, true);
                        }
                        break;
                    }
                }
                if ((activeButton == null) && (lastActiveButton != null))
                {
                    // return to idle anim (in our case the default anim clip)
                    PlayAnim(menuIdleAnim, true);
                }
                if (activeButton != null)
                {
                    // check user tap on a button
                    if (Input.GetButtonDown(selectButtonName))
                    {
                        PlaySound(menuClickSound);
                        float delaySecs = PlayAnim(activeButton.name + selectPrefix) + 0.05f;
                        selectedCommand = activeButton.commandId;
                        // activate the menu item after the anim is done playing
                        Invoke("OnMenuItemPressed", delaySecs);
                    }
                }
            }
        }
    }
Beispiel #18
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
    }
Beispiel #19
0
 public static void LeaveVRMode()
 {
     OVRPluginEvent.Issue(RenderEventType.Pause);
 }
Beispiel #20
0
 public static void EnterVRMode()
 {
     OVRPluginEvent.Issue(RenderEventType.Resume);
 }
    public static void LeaveVRMode()
    {
#if (UNITY_ANDROID && !UNITY_EDITOR)
        OVRPluginEvent.Issue(RenderEventType.Pause);
#endif
    }
    public static void EnterVRMode()
    {
#if (UNITY_ANDROID && !UNITY_EDITOR)
        OVRPluginEvent.Issue(RenderEventType.Resume);
#endif
    }
Beispiel #23
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
    }
Beispiel #24
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
        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());

            androidJavaInit = true;
        }

        // We want to set up our touchpad messaging system
//		OVRTouchpad.Create();
        // This will trigger the init on the render thread
        InitRenderThread();
#else
        SetEditorPlay(Application.isEditor);
#endif

        if (display == null)
        {
            display = new OVRDisplay();
        }
        if (tracker == null)
        {
            tracker = new OVRTracker();
        }

        if (resetTrackerOnLoad)
        {
            display.RecenterPose();
        }

        // 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;
        }

#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
    }
Beispiel #25
0
 public static void InitRenderThread()
 {
             #if UNITY_ANDROID && !UNITY_EDITOR
     OVRPluginEvent.Issue(RenderEventType.InitRenderThread);
             #endif
 }
 /// <summary>
 /// Marks the end of all rendering.
 /// </summary>
 public void EndFrame()
 {
     OVRPluginEvent.Issue(RenderEventType.EndFrame);
 }
Beispiel #27
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
    }