diff options
Diffstat (limited to 'Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/AlineURPRenderPassFeature.cs')
-rw-r--r-- | Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/AlineURPRenderPassFeature.cs | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/AlineURPRenderPassFeature.cs b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/AlineURPRenderPassFeature.cs new file mode 100644 index 0000000..829aa3f --- /dev/null +++ b/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/AlineURPRenderPassFeature.cs @@ -0,0 +1,88 @@ +#if MODULE_RENDER_PIPELINES_UNIVERSAL +using UnityEngine; +using UnityEngine.Rendering; +#if MODULE_RENDER_PIPELINES_UNIVERSAL_17_0_0_OR_NEWER +using UnityEngine.Rendering.RenderGraphModule; +#endif +using UnityEngine.Rendering.Universal; + +namespace Pathfinding.Drawing { + /// <summary>Custom Universal Render Pipeline Render Pass for ALINE</summary> + public class AlineURPRenderPassFeature : ScriptableRendererFeature { + /// <summary>Custom Universal Render Pipeline Render Pass for ALINE</summary> + public class AlineURPRenderPass : ScriptableRenderPass { + /// <summary>This method is called before executing the render pass</summary> +#if MODULE_RENDER_PIPELINES_UNIVERSAL_17_0_0_OR_NEWER + [System.Obsolete] +#endif + public override void Configure (CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) { + } + +#if MODULE_RENDER_PIPELINES_UNIVERSAL_17_0_0_OR_NEWER + [System.Obsolete] +#endif + public override void Execute (ScriptableRenderContext context, ref RenderingData renderingData) { + DrawingManager.instance.ExecuteCustomRenderPass(context, renderingData.cameraData.camera); + } + + public AlineURPRenderPass() : base() { + profilingSampler = new ProfilingSampler("ALINE"); + } + +#if MODULE_RENDER_PIPELINES_UNIVERSAL_17_0_0_OR_NEWER + private class PassData { + public Camera camera; + } + + public override void RecordRenderGraph (RenderGraph renderGraph, ContextContainer frameData) { + var cameraData = frameData.Get<UniversalCameraData>(); + var resourceData = frameData.Get<UniversalResourceData>(); + + using (IRasterRenderGraphBuilder builder = renderGraph.AddRasterRenderPass<PassData>("ALINE", out PassData passData, profilingSampler)) { + bool allowDisablingWireframe = false; + + if (Application.isEditor && (cameraData.cameraType & (CameraType.SceneView | CameraType.Preview)) != 0) { + // We need this to be able to disable wireframe rendering in the scene view + builder.AllowGlobalStateModification(true); + allowDisablingWireframe = true; + } + + builder.SetRenderAttachment(resourceData.activeColorTexture, 0); + builder.SetRenderAttachmentDepth(resourceData.activeDepthTexture); + passData.camera = cameraData.camera; + + builder.SetRenderFunc<PassData>( + (PassData data, RasterGraphContext context) => { + DrawingManager.instance.ExecuteCustomRenderGraphPass(new DrawingData.CommandBufferWrapper { cmd2 = context.cmd, allowDisablingWireframe = allowDisablingWireframe }, data.camera); + } + ); + } + } +#endif + + public override void FrameCleanup (CommandBuffer cmd) { + } + } + + AlineURPRenderPass m_ScriptablePass; + + public override void Create () { + m_ScriptablePass = new AlineURPRenderPass(); + + // Configures where the render pass should be injected. + // URP's post processing actually happens in BeforeRenderingPostProcessing, not after BeforeRenderingPostProcessing as one would expect. + // Use BeforeRenderingPostProcessing-1 to ensure this pass gets executed before post processing effects. + m_ScriptablePass.renderPassEvent = RenderPassEvent.BeforeRenderingPostProcessing-1; + } + + /// <summary>This method is called when setting up the renderer once per-camera</summary> + public override void AddRenderPasses (ScriptableRenderer renderer, ref RenderingData renderingData) { + AddRenderPasses(renderer); + } + + public void AddRenderPasses (ScriptableRenderer renderer) { + renderer.EnqueuePass(m_ScriptablePass); + } + } +} +#endif |