Aetheria/Assets/Plugins/MrtTest/MrtTest.cs

53 lines
1.5 KiB
C#
Raw Normal View History

using UnityEngine;
[ExecuteInEditMode]
public class MrtTest : MonoBehaviour
{
[SerializeField] Shader _shader;
Material _material;
RenderBuffer[] _mrt;
void OnEnable()
{
var shader = Shader.Find("Hidden/MrtTest");
_material = new Material(shader);
_material.hideFlags = HideFlags.DontSave;
_mrt = new RenderBuffer[2];
}
void OnDisable()
{
DestroyImmediate(_material);
_material = null;
_mrt = null;
}
void OnRenderImage(RenderTexture source, RenderTexture destination)
{
var rt1 = RenderTexture.GetTemporary(source.width, source.height, 0, RenderTextureFormat.Default);
var rt2 = RenderTexture.GetTemporary(source.width, source.height, 0, RenderTextureFormat.DefaultHDR);
_mrt[0] = rt1.colorBuffer;
_mrt[1] = rt2.colorBuffer;
// Blit with a MRT.
Graphics.SetRenderTarget(_mrt, rt1.depthBuffer);
Graphics.Blit(null, _material, 0);
// Combine them and output to the destination.
_material.SetTexture("_SecondTex", rt1);
_material.SetTexture("_ThirdTex", rt2);
Graphics.Blit(source, destination, _material, 1);
RenderTexture.ReleaseTemporary(rt1);
RenderTexture.ReleaseTemporary(rt2);
}
void OnGUI()
{
var text = "Supported MRT count: ";
text += SystemInfo.supportedRenderTargetCount;
GUI.Label(new Rect(0, 0, 200, 200), text);
}
}