Ejemplo n.º 1
0
    private IEnumerator RenderLoop()
    {
        while (true)
        {
            yield return(new WaitForEndOfFrame());

            var vr = SteamVR.instance;

            if (vr.compositor.CanRenderScene())
            {
                vr.compositor.SetTrackingSpace(trackingSpace);
                vr.compositor.WaitGetPoses(poses, gamePoses);
                SteamVR_Utils.Event.Send("new_poses", poses);
            }

            GL.IssuePluginEvent(20150313);                                                                // Fire off render event to perform our compositor sync
            SteamVR_Camera.GetSceneTexture(cameras[0].GetComponent <Camera>().hdr).GetNativeTexturePtr(); // flush render event

            var overlay = SteamVR_Overlay.instance;
            if (overlay != null)
            {
                overlay.UpdateOverlay(vr);
            }

            RenderEye(vr, Hmd_Eye.Eye_Left, leftMask);
            RenderEye(vr, Hmd_Eye.Eye_Right, rightMask);

            if (cameraMask != null)
            {
                cameraMask.Clear();
            }

            GL.IssuePluginEvent(20150213);             // Fire off render event for in-process present hook
        }
    }
Ejemplo n.º 2
0
    private IEnumerator RenderLoop()
    {
        while (Application.isPlaying)
        {
            yield return(waitForEndOfFrame);

            if (pauseRendering)
            {
                continue;
            }

            var compositor = OpenVR.Compositor;
            if (compositor != null)
            {
                if (!compositor.CanRenderScene())
                {
                    continue;
                }

                compositor.SetTrackingSpace(trackingSpace);



                //SteamVR_Utils.QueueEventOnRenderThread(SteamVR.Unity.k_nRenderEventID_WaitGetPoses);
                //This is what the above commented out line does:
                GL.IssuePluginEvent(201510020);

                // Hack to flush render event that was queued in Update (this ensures WaitGetPoses has returned before we grab the new values).
                SteamVR_Camera.GetSceneTexture(cameras[0].GetComponent <Camera>().hdr).GetNativeTexturePtr();

                compositor.GetLastPoses(poses, gamePoses);

                SteamVR_Events.NewPoses.Send(poses);
                SteamVR_Events.NewPosesApplied.Send();
            }

            var overlay = SteamVR_Overlay.instance;
            if (overlay != null)
            {
                overlay.UpdateOverlay();
            }

            var vr = SteamVR.instance;
            RenderEye(vr, EVREye.Eye_Left);
            RenderEye(vr, EVREye.Eye_Right);

            // Move cameras back to head position so they can be tracked reliably
            foreach (var c in cameras)
            {
                c.transform.localPosition = Vector3.zero;
                c.transform.localRotation = Quaternion.identity;
            }

            if (cameraMask != null)
            {
                cameraMask.Clear();
            }
        }
    }
Ejemplo n.º 3
0
    private IEnumerator RenderLoop()
    {
        while (true)
        {
            yield return(new WaitForEndOfFrame());

            if (pauseRendering)
            {
                continue;
            }

            var vr = SteamVR.instance;

            if (!vr.compositor.CanRenderScene())
            {
                continue;
            }

            vr.compositor.SetTrackingSpace(trackingSpace);
            SteamVR_Utils.QueueEventOnRenderThread(Unity.k_nRenderEventID_WaitGetPoses);

            // Hack to flush render event that was queued in Update (this ensures WaitGetPoses has returned before we grab the new values).
            Unity.EventWriteString("[UnityMain] GetNativeTexturePtr - Begin");
            SteamVR_Camera.GetSceneTexture(cameras[0].GetComponent <Camera>().hdr).GetNativeTexturePtr();
            Unity.EventWriteString("[UnityMain] GetNativeTexturePtr - End");

            vr.compositor.GetLastPoses(poses, gamePoses);
            SteamVR_Utils.Event.Send("new_poses", poses);

            var overlay = SteamVR_Overlay.instance;
            if (overlay != null)
            {
                overlay.UpdateOverlay(vr);
            }

            RenderEye(vr, EVREye.Eye_Left);
            RenderEye(vr, EVREye.Eye_Right);

            // Move cameras back to head position so they can be tracked reliably
            foreach (var c in cameras)
            {
                c.transform.localPosition = Vector3.zero;
                c.transform.localRotation = Quaternion.identity;
            }

            if (cameraMask != null)
            {
                cameraMask.Clear();
            }
        }
    }
Ejemplo n.º 4
0
    private IEnumerator RenderLoop()
    {
        while (true)
        {
            yield return(new WaitForEndOfFrame());

            var vr = SteamVR.instance;

            if (vr.compositor.CanRenderScene())
            {
                vr.compositor.SetTrackingSpace(trackingSpace);
                vr.compositor.WaitGetPoses(poses, gamePoses);
                SteamVR_Utils.Event.Send("new_poses", poses);
            }

            GL.IssuePluginEvent(20150313);                                                                // Fire off render event to perform our compositor sync
            SteamVR_Camera.GetSceneTexture(cameras[0].GetComponent <Camera>().hdr).GetNativeTexturePtr(); // flush render event

            var overlay = SteamVR_Overlay.instance;
            if (overlay != null)
            {
                overlay.UpdateOverlay(vr);
            }

            RenderEye(vr, Hmd_Eye.Eye_Left, leftMask);
            RenderEye(vr, Hmd_Eye.Eye_Right, rightMask);

            // Move cameras back to head position so they can be tracked reliably
            foreach (var c in cameras)
            {
                c.transform.localPosition = Vector3.zero;
                c.transform.localRotation = Quaternion.identity;
            }

            if (cameraMask != null)
            {
                cameraMask.Clear();
            }

            GL.IssuePluginEvent(20150213);             // Fire off render event for in-process present hook
        }
    }