NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/AOT/PostProcess/CustomDraw/CustomDrawRPF.cs

65 lines
2.2 KiB
C#
Raw Normal View History

2024-09-26 17:57:22 +08:00
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.RendererUtils;
using UnityEngine.Rendering.Universal;
namespace AOT.PostProcess.CustomDraw
{
public class CustomDrawRPF : ScriptableRendererFeature
{
[System.Serializable]
public class Settings
{
public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRenderingOpaques;
public LayerMask layerMask;
public string lightModeName = "CustomDraw";
}
class CustomRenderPass : ScriptableRenderPass
{
private Settings _settings;
private ShaderTagId _shaderTagId;
public CustomRenderPass(Settings settings)
{
_settings = settings;
_shaderTagId = new ShaderTagId(settings.lightModeName);
}
public override void Execute(ScriptableRenderContext context,
ref RenderingData renderingData)
{
var cmd = CommandBufferPool.Get("CustomDraw");
cmd.Clear();
var renderListDesc = new RendererListDesc(_shaderTagId,
renderingData.cullResults,
renderingData.cameraData.camera);
renderListDesc.renderQueueRange = RenderQueueRange.all;
renderListDesc.layerMask = _settings.layerMask;
var renderList = context.CreateRendererList(renderListDesc);
cmd.DrawRendererList(renderList);
context.ExecuteCommandBuffer(cmd);
CommandBufferPool.Release(cmd);
}
}
public Settings settings = new Settings();
private CustomRenderPass _scriptablePass;
public override void Create()
{
_scriptablePass = new CustomRenderPass(settings);
_scriptablePass.renderPassEvent = settings.renderPassEvent;
}
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
renderer.EnqueuePass(_scriptablePass);
}
}
}