void AddBlitCommand() { if (cam is ImmediateMixCastCamera) { insertFeedCommands = new CommandBuffer(); if (cam.gameCamera.actualRenderingPath == RenderingPath.Forward) { insertFeedCommands.Blit(Texture, BuiltinRenderTextureType.CurrentActive, blitMaterial); //Insert real world cam.gameCamera.AddCommandBuffer(CameraEvent.AfterForwardOpaque, insertFeedCommands); } else { //insertFeedCommands.SetRenderTarget(BuiltinRenderTextureType.GBuffer0); insertFeedCommands.Blit(Texture, BuiltinRenderTextureType.CurrentActive, blitMaterial); //Insert real world cam.gameCamera.AddCommandBuffer(CameraEvent.BeforeImageEffectsOpaque, insertFeedCommands); } renderPath = cam.gameCamera.actualRenderingPath; } else if (cam is BufferedMixCastCamera) { BufferedMixCastCamera buffCam = cam as BufferedMixCastCamera; buffCam.inputMaterial = blitMaterial; } }
private void OnGUI() { if (drawAlphaMat == null) { drawAlphaMat = new Material(Shader.Find("Hidden/BPR/AlphaOut")); } Rect fullRect = new Rect(Vector2.zero, position.size); if (Application.isPlaying && MixCast.Active) { string[] cameraNames = new string[MixCast.Settings.cameras.Count]; for (int i = 0; i < cameraNames.Length; i++) { cameraNames[i] = "Camera " + i; } cameraIndex = Mathf.Clamp(cameraIndex, 0, cameraNames.Length - 1); cameraIndex = EditorGUILayout.Popup(cameraIndex, cameraNames); for (int i = 0; i < MixCastCamera.ActiveCameras.Count; i++) { if (MixCastCamera.ActiveCameras[i].context.Data == MixCast.Settings.cameras[cameraIndex]) { if (MixCastCamera.ActiveCameras[i] is BufferedMixCastCamera) { BufferedMixCastCamera buffCam = MixCastCamera.ActiveCameras[i] as BufferedMixCastCamera; Texture foregroundTex = buffCam.LastFrameAlpha; if (foregroundTex != null) { Graphics.DrawTexture(fullRect, foregroundTex, drawAlphaMat, 0); } } else { EditorGUILayout.HelpBox("Debugging can only occur with a camera with video latency compensation above 0 (buffered mode)", MessageType.Error); } break; } } } else { EditorGUILayout.HelpBox("Debugging can only occur while the application is running and MixCast is active", MessageType.Warning); } }
private void RemoveBlitCommand() { if (cam is ImmediateMixCastCamera) { if (renderPath == RenderingPath.Forward) { cam.gameCamera.RemoveCommandBuffer(CameraEvent.AfterForwardOpaque, insertFeedCommands); } else { cam.gameCamera.RemoveCommandBuffer(CameraEvent.BeforeImageEffectsOpaque, insertFeedCommands); } insertFeedCommands.Dispose(); insertFeedCommands = null; } else if (cam is BufferedMixCastCamera) { BufferedMixCastCamera buffCam = cam as BufferedMixCastCamera; buffCam.inputTexture = null; buffCam.inputMaterial = null; } }