using UnityEngine; using UnityEngine.Rendering; namespace LuxWater { [RequireComponent(typeof(Camera))] public class LuxWater_UnderwaterRenderingSlave : MonoBehaviour { private LuxWater_UnderWaterRendering waterrendermanager; private bool readyToGo; private static CommandBuffer cb_MaskSlave; private CameraEvent cameraEvent = CameraEvent.BeforeSkybox; public Camera cam; private void OnEnable() { cam = GetComponent(); cb_MaskSlave = new CommandBuffer(); cb_MaskSlave.name = "Lux Water: Underwater Mask Slave"; cam.AddCommandBuffer(cameraEvent, cb_MaskSlave); Invoke("GetWaterrendermanager", 0f); } private void OnDisable() { if (cb_MaskSlave != null && cam != null) { cam.RemoveCommandBuffer(cameraEvent, cb_MaskSlave); } } private void GetWaterrendermanager() { LuxWater_UnderWaterRendering instance = LuxWater_UnderWaterRendering.instance; if (instance != null) { waterrendermanager = instance; readyToGo = true; } } private void OnPreCull() { if (readyToGo) { waterrendermanager.RenderWaterMask(cam, SecondaryCameraRendering: true, cb_MaskSlave); } } [ImageEffectOpaque] private void OnRenderImage(RenderTexture src, RenderTexture dest) { if (readyToGo) { waterrendermanager.RenderUnderWater(src, dest, cam, SecondaryCameraRendering: true); } else { Graphics.Blit(src, dest); } } } }