summaryrefslogtreecommitdiff
path: root/Other/AstarPathfindingDemo/Packages/com.arongranberg.astar/Drawing/AlineURPRenderPassFeature.cs
blob: 829aa3f85087016f772237efd7b32604bc054b4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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