61 lines
2.3 KiB
C#
61 lines
2.3 KiB
C#
using UnityEngine;
|
||
using UnityEngine.Rendering;
|
||
using UnityEngine.Rendering.Universal;
|
||
|
||
//namespace UnityEngine.Experiemntal.Rendering.Universal
|
||
//{
|
||
|
||
public class MP_RenderPass : ScriptableRenderPass
|
||
{
|
||
public Material mMat;
|
||
//使用第几个pass
|
||
public int blitShaderPassIndex = 0;
|
||
public FilterMode filterMode { get; set; }
|
||
private RenderTargetIdentifier source { get; set; }
|
||
private RenderTargetHandle destination { get; set; }
|
||
|
||
RenderTargetHandle m_temporaryColorTexture;
|
||
|
||
string m_ProfilerTag;//专门给profiler看的名字
|
||
public MP_RenderPass(string passname, RenderPassEvent _event, Material _mat)//,float contrast)
|
||
{
|
||
m_ProfilerTag = passname;
|
||
renderPassEvent = _event;
|
||
mMat = _mat;
|
||
//mMat.SetFloat("_Contrast", contrast);
|
||
m_temporaryColorTexture.Init("temporaryColorTexture");
|
||
}
|
||
public void Setup(RenderTargetIdentifier src, RenderTargetHandle dest)
|
||
{
|
||
source = src;
|
||
destination = dest;
|
||
}
|
||
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
|
||
{
|
||
CommandBuffer cmd = CommandBufferPool.Get(m_ProfilerTag);
|
||
|
||
RenderTextureDescriptor opaqueDesc = renderingData.cameraData.cameraTargetDescriptor;
|
||
opaqueDesc.depthBufferBits = 0;
|
||
//不能读写同一个颜色target,创建一个临时的render Target去blit
|
||
if (destination == RenderTargetHandle.CameraTarget)
|
||
{
|
||
cmd.GetTemporaryRT(m_temporaryColorTexture.id, opaqueDesc, filterMode);
|
||
Blit(cmd, source, m_temporaryColorTexture.Identifier(), mMat, blitShaderPassIndex);
|
||
Blit(cmd, m_temporaryColorTexture.Identifier(), source);
|
||
}
|
||
else
|
||
{
|
||
Blit(cmd, source, destination.Identifier(), mMat, blitShaderPassIndex);
|
||
}
|
||
context.ExecuteCommandBuffer(cmd);
|
||
CommandBufferPool.Release(cmd);
|
||
}
|
||
|
||
public override void FrameCleanup(CommandBuffer cmd)
|
||
{
|
||
if (destination == RenderTargetHandle.CameraTarget)
|
||
cmd.ReleaseTemporaryRT(m_temporaryColorTexture.id);
|
||
}
|
||
}
|
||
//}
|