private void RenderEye(SteamVR vr, EVREye eye) { SteamVR_Render.eye = eye; if (this.cameraMask != null) { this.cameraMask.Set(vr, eye); } foreach (SteamVR_Camera steamVR_Camera in this.cameras) { steamVR_Camera.transform.localPosition = vr.eyes[(int)eye].pos; steamVR_Camera.transform.localRotation = vr.eyes[(int)eye].rot; this.cameraMask.transform.position = steamVR_Camera.transform.position; Camera camera = steamVR_Camera.camera; camera.targetTexture = SteamVR_Camera.GetSceneTexture(false); int cullingMask = camera.cullingMask; if (eye == EVREye.Eye_Left) { camera.cullingMask &= ~this.rightMask; camera.cullingMask |= this.leftMask; } else { camera.cullingMask &= ~this.leftMask; camera.cullingMask |= this.rightMask; } camera.Render(); camera.cullingMask = cullingMask; } }
private IEnumerator RenderLoop() { while (Application.isPlaying) { yield return(this.waitForEndOfFrame); if (!SteamVR_Render.pauseRendering) { CVRCompositor compositor = OpenVR.Compositor; if (compositor != null) { if (!compositor.CanRenderScene() || cameras.Length < 1) { continue; } compositor.SetTrackingSpace(SteamVR.settings.trackingSpace); SteamVR_Utils.QueueEventOnRenderThread(201510020); SteamVR.Unity.EventWriteString("[UnityMain] GetNativeTexturePtr - Begin"); SteamVR_Camera.GetSceneTexture(this.cameras[0].GetComponent <Camera>()).GetNativeTexturePtr(); SteamVR.Unity.EventWriteString("[UnityMain] GetNativeTexturePtr - End"); compositor.GetLastPoses(this.poses, this.gamePoses); SteamVR_Events.NewPoses.Send(this.poses); SteamVR_Events.NewPosesApplied.Send(); } SteamVR_Overlay instance = SteamVR_Overlay.instance; if (instance != null) { instance.UpdateOverlay(); } if (this.CheckExternalCamera()) { this.RenderExternalCamera(); } SteamVR instance2 = SteamVR.instance; this.RenderEye(instance2, EVREye.Eye_Left); this.RenderEye(instance2, EVREye.Eye_Right); foreach (SteamVR_Camera steamVR_Camera in this.cameras) { steamVR_Camera.transform.localPosition = Vector3.zero; steamVR_Camera.transform.localRotation = Quaternion.identity; } if (this.cameraMask != null) { this.cameraMask.Clear(); } } } yield break; }
void RenderEye(SteamVR vr, EVREye eye) { eyePreRenderCallback?.Invoke(eye); int i = (int)eye; SteamVR_Render.eye = eye; if (cameraMask != null) { cameraMask.Set(vr, eye); } foreach (var c in cameras) { c.transform.localPosition = vr.eyes[i].pos; c.transform.localRotation = vr.eyes[i].rot; // Update position to keep from getting culled cameraMask.transform.position = c.transform.position; var camera = c.camera; camera.targetTexture = SteamVR_Camera.GetSceneTexture(camera.allowHDR); int cullingMask = camera.cullingMask; if (eye == EVREye.Eye_Left) { camera.cullingMask &= ~rightMask; camera.cullingMask |= leftMask; } else { camera.cullingMask &= ~leftMask; camera.cullingMask |= rightMask; } camera.Render(); if (SteamVR_Camera.doomp) { Debug.Log(Time.frameCount.ToString() + $"/Render{eye}_OnRenderImage_src.png"); SteamVR_Camera.DumpRenderTexture(camera.targetTexture, Application.streamingAssetsPath + $"/Render{eye}_OnRenderImage_src.png"); } camera.cullingMask = cullingMask; } eyePostRenderCallback?.Invoke(eye); }
private IEnumerator RenderLoop() { while (Application.isPlaying) { yield return(waitForEndOfFrame); if (cameras.Length == 0) { continue; } if (pauseRendering) { continue; } var compositor = OpenVR.Compositor; if (compositor != null) { if (!compositor.CanRenderScene()) { continue; } compositor.SetTrackingSpace(SteamVR.settings.trackingSpace); SteamVR_Utils.QueueEventOnRenderThread(SteamVR.OpenVRMagic.k_nRenderEventID_WaitGetPoses); // Hack to flush render event that was queued in Update (this ensures WaitGetPoses has returned before we grab the new values). SteamVR.OpenVRMagic.EventWriteString("[UnityMain] GetNativeTexturePtr - Begin"); SteamVR_Camera.GetSceneTexture(cameras[0].GetComponent <Camera>().allowHDR).GetNativeTexturePtr(); SteamVR.OpenVRMagic.EventWriteString("[UnityMain] GetNativeTexturePtr - End"); compositor.GetLastPoses(poses, gamePoses); SteamVR_Events.NewPoses.Send(poses); SteamVR_Events.NewPosesApplied.Send(); } var overlay = SteamVR_Overlay.instance; if (overlay != null) { overlay.UpdateOverlay(); } RenderExternalCamera(); 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(); } } }