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 } }
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(); } } }
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(); } } }
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 } }