68 lines
1.4 KiB
C#
68 lines
1.4 KiB
C#
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<Camera>();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|