private void OnPostRender() { if (NextCamera != mNextCamera || BlitEventNext != mBlitEventNext) { ReleaseBufferNext(); mNextCamera = NextCamera; mBlitEventNext = BlitEventNext; } if (mBlitEventNext != BlitEventTrigger.Off && mNextCamera && mNextCamera.enabled && mNextCamera.gameObject.activeInHierarchy) { if (mCommandBufferNext == null) { mCommandBufferNext = new CommandBuffer(); mCommandBufferNext.name = "Blit To Next Camera"; mCommandBufferNext.SetGlobalTexture(ID_MainTex, mSrcColorBufferRT); mCommandBufferNext.DrawMesh(DySkyUtils.FullscreenQuad, Matrix4x4.identity, DySkyUtils.CopyMaterial, 0, 0); mNextCamera.AddCommandBuffer((CameraEvent)mBlitEventNext, mCommandBufferNext); //mNextCamera.clearFlags = CameraClearFlags.Nothing; } } else { ReleaseBufferNext(); Graphics.Blit(mSrcColorBufferRT, (RenderTexture)null); } }
private void OnEnable() { if (BlitEvent == BlitEventTrigger.Off) { this.enabled = false; return; } mBlitEvent = BlitEvent; mBlitColor = BlitColor; mBlitDepth = BlitDepth; BindBuffer(); sRef.Add(mCamera); }
public static void BindCamera(Camera camera, BlitEventTrigger evt = BlitEventTrigger.AfterForwardOpaque, ColorPrecision color = ColorPrecision.HalfRGB111110Float, DepthPrecision depth = DepthPrecision.HalfRHalf) { if (!camera) { return; } if (evt == BlitEventTrigger.Off) { ReleaseCamera(camera); return; } DySkyPreFrameBuffers pfb; if (IsEnable(camera)) { pfb = camera.GetComponent <DySkyPreFrameBuffers>(); if (pfb.mBlitColor == color && pfb.mBlitDepth == depth && pfb.mBlitEvent == evt) { return; } pfb.enabled = false; } else { pfb = camera.GetComponent <DySkyPreFrameBuffers>(); if (!pfb) { pfb = camera.gameObject.AddComponent <DySkyPreFrameBuffers>(); } } pfb.BlitEvent = evt; pfb.BlitColor = color; pfb.BlitDepth = depth; pfb.enabled = true; }