53 lines
1.5 KiB
C#
53 lines
1.5 KiB
C#
|
|
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);
|
|||
|
|
}
|
|||
|
|
}
|