// using UnityEngine;
// using UnityEngine.Rendering;
// using UnityEngine.Rendering.RenderGraphModule;
// using UnityEngine.Rendering.RenderGraphModule.Util;
// using UnityEngine.Rendering.Universal;

// public class CRTRendererFeature : ScriptableRendererFeature
// {
//     [System.Serializable]
//     public class CRTSettings
//     {
//         public bool EffectEnabled = true;
//         public RenderPassEvent PassEvent = RenderPassEvent.AfterRenderingPostProcessing;
//         public Shader CRTShader;

//         [Range(0f, 1f)] public float Intensity = 0.65f;
//         [Range(0f, 2f)] public float ScanlineDensity = 1.2f;
//         [Range(0f, 1f)] public float ScanlineStrength = 0.18f;
//         [Range(0f, 0.2f)] public float Curvature = 0.04f;
//         [Range(0f, 1f)] public float VignetteStrength = 0.28f;
//         [Range(0f, 0.05f)] public float ChromaticAberration = 0.004f;
//         [Range(0f, 0.2f)] public float NoiseStrength = 0.03f;
//         [Range(0f, 0.1f)] public float FlickerStrength = 0.015f;
//     }

//     class CRTPass : ScriptableRenderPass
//     {
//         private Material m_Material;
//         private CRTSettings m_Settings;

//         public void Setup(Material material, CRTSettings settings)
//         {
//             m_Material = material;
//             m_Settings = settings;
//             renderPassEvent = settings.PassEvent;
//             requiresIntermediateTexture = true;
//         }

//         public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData)
//         {
//             if (m_Material == null || m_Settings == null || !m_Settings.EffectEnabled)
//             {
//                 return;
//             }

//             UniversalResourceData resourceData = frameData.Get<UniversalResourceData>();
//             if (resourceData.isActiveTargetBackBuffer)
//             {
//                 return;
//             }

//             m_Material.SetFloat("_Intensity", m_Settings.Intensity);
//             m_Material.SetFloat("_ScanlineDensity", m_Settings.ScanlineDensity);
//             m_Material.SetFloat("_ScanlineStrength", m_Settings.ScanlineStrength);
//             m_Material.SetFloat("_Curvature", m_Settings.Curvature);
//             m_Material.SetFloat("_VignetteStrength", m_Settings.VignetteStrength);
//             m_Material.SetFloat("_ChromaticAberration", m_Settings.ChromaticAberration);
//             m_Material.SetFloat("_NoiseStrength", m_Settings.NoiseStrength);
//             m_Material.SetFloat("_FlickerStrength", m_Settings.FlickerStrength);

//             TextureHandle source = resourceData.activeColorTexture;
//             TextureDesc destinationDesc = renderGraph.GetTextureDesc(source);
//             destinationDesc.name = "CameraColor-CRT";
//             destinationDesc.clearBuffer = false;

//             TextureHandle destination = renderGraph.CreateTexture(destinationDesc);
//             RenderGraphUtils.BlitMaterialParameters blitParams = new(source, destination, m_Material, 0);
//             renderGraph.AddBlitPass(blitParams, "CRT Effect");

//             resourceData.cameraColor = destination;
//         }

//         public void Dispose()
//         {
//             // RenderGraph path does not allocate persistent RTHandles in this pass.
//         }
//     }

//     public CRTSettings Settings = new();

//     private CRTPass m_Pass;
//     private Material m_Material;

//     public override void Create()
//     {
//         if (Settings.CRTShader == null)
//         {
//             Settings.CRTShader = Shader.Find("Hidden/HeadlessHazard/CRT");
//         }

//         if (Settings.CRTShader != null)
//         {
//             m_Material = CoreUtils.CreateEngineMaterial(Settings.CRTShader);
//         }

//         m_Pass ??= new CRTPass();
//     }

//     public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
//     {
//         if (m_Material == null || !Settings.EffectEnabled)
//         {
//             return;
//         }

//         if (renderingData.cameraData.cameraType != CameraType.Game)
//         {
//             return;
//         }

//         m_Pass.Setup(m_Material, Settings);
//         renderer.EnqueuePass(m_Pass);
//     }

//     protected override void Dispose(bool disposing)
//     {
//         m_Pass?.Dispose();
//         m_Pass = null;

//         CoreUtils.Destroy(m_Material);
//         m_Material = null;
//     }
// }
