public override void RenderScene() { StartFrame(); frames.delayDuration = context.Data.unplugged == false ? context.Data.bufferTime : 0f; frames.Update(); GameFrame newFrame = PrepareNewFrame(); newFrame.playerDist = gameCamera.transform.TransformVector(Vector3.forward).magnitude *CalculatePlayerDistance(); //Scale distance by camera scale newFrame.cameraToWorld = cleanProxyCamera.cameraToWorldMatrix; newFrame.cameraProjection = cleanProxyCamera.projectionMatrix; cleanProxyCamera.CopyFrom(gameCamera); RenderBackground(newFrame); RenderForeground(newFrame); GameFrame bufferedFrame = frames.OldestFrameData; GL.LoadIdentity(); ClearBuffer(); BlitBackground(bufferedFrame); if (BackgroundRendered != null) { BackgroundRendered(); } //Update shader properties for Feeds to access Shader.SetGlobalFloat("_CamNear", cleanProxyCamera.nearClipPlane); Shader.SetGlobalFloat("_CamFar", cleanProxyCamera.farClipPlane); Shader.SetGlobalMatrix("_WorldToCam", bufferedFrame.cameraToWorld.inverse); Shader.SetGlobalMatrix("_CamToWorld", bufferedFrame.cameraToWorld); Shader.SetGlobalMatrix("_CamProjection", bufferedFrame.cameraProjection); for (int i = 0; i < InputFeedProjection.ActiveProjections.Count; i++) { if (InputFeedProjection.ActiveProjections[i].context.Data == context.Data) { InputFeed feed = InputFeedProjection.ActiveProjections[i].FindFeed(); if (feed != null) { feed.StartRender(); RenderInputProjection(InputFeedProjection.ActiveProjections[i]); feed.StopRender(); } } } if (bufferedFrame.playerDist > 0) { BlitForeground(bufferedFrame); } Graphics.SetRenderTarget(Output as RenderTexture); Graphics.Blit(null, postBlit); RenderFinalPass(); CompleteFrame(); }
void HandleRenderEnded(Camera cam) { if (MeshRenderer.enabled) { InputFeed feed = FindFeed(); if (feed != null && feed.ShouldRender) { feed.StopRender(); } } }
void BlitFeed(InputFeed feed) { if (!feed.enabled) { return; } feed.StartRender(); Graphics.SetRenderTarget(Output as RenderTexture); if (feed.Texture != null) { bool oldSRGB = GL.sRGBWrite; GL.sRGBWrite = true; Graphics.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), feed.Texture, feed.blitMaterial); GL.sRGBWrite = oldSRGB; } feed.StopRender(); }