Esempio n. 1
0
 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;
     }
 }
Esempio n. 2
0
        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();
                }
            }
        }