-
Notifications
You must be signed in to change notification settings - Fork 3
/
FullScreenRenderFeature.cs
66 lines (51 loc) · 2.31 KB
/
FullScreenRenderFeature.cs
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
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
public class FullScreenRenderFeature : ScriptableRendererFeature
{
public Material material;
class CustomRenderPass : ScriptableRenderPass
{
RTHandle tempTexture, sourceTexture;
private Material material;
public CustomRenderPass(Material material) : base()
{
this.material = material;
}
public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
{
sourceTexture = renderingData.cameraData.renderer.cameraColorTargetHandle;
tempTexture = RTHandles.Alloc(new RenderTargetIdentifier("_TempTexture"), name: "_TempTexture");
}
public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
{
CommandBuffer commandBUffer = CommandBufferPool.Get("Full SCreen Render Feature");
RenderTextureDescriptor targetDescriptor = renderingData.cameraData.cameraTargetDescriptor;
targetDescriptor.depthBufferBits = 0;
commandBUffer.GetTemporaryRT(Shader.PropertyToID(tempTexture.name), targetDescriptor, FilterMode.Bilinear);
Blit(commandBUffer, sourceTexture, tempTexture, material);
Blit(commandBUffer, tempTexture, sourceTexture);
context.ExecuteCommandBuffer(commandBUffer);
CommandBufferPool.Release(commandBUffer);
}
// Cleanup any allocated resources that were created during the execution of this render pass.
public override void OnCameraCleanup(CommandBuffer cmd)
{
tempTexture.Release();
}
}
CustomRenderPass m_ScriptablePass;
/// <inheritdoc/>
public override void Create()
{
m_ScriptablePass = new CustomRenderPass(material);
// Configures where the render pass should be injected.
m_ScriptablePass.renderPassEvent = RenderPassEvent.BeforeRenderingPostProcessing;
}
// Here you can inject one or multiple render passes in the renderer.
// This method is called when setting up the renderer once per-camera.
public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
renderer.EnqueuePass(m_ScriptablePass);
}
}