summaryrefslogtreecommitdiff
path: root/Thronefall_1_57/Decompile/FlatKit/BlitTexturePass.cs
blob: 5b9e754da4e9fd54636a2fb69ef85d8e802adee2 (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
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;

namespace FlatKit;

internal class BlitTexturePass : ScriptableRenderPass
{
	public static readonly string CopyEffectShaderName = "Hidden/FlatKit/CopyTexture";

	private ProfilingSampler _profilingSampler;

	private Material _effectMaterial;

	private Material _copyMaterial;

	private RenderTargetHandle _temporaryColorTexture;

	public void Setup(Material effectMaterial, bool useDepth, bool useNormals, bool useColor)
	{
		_effectMaterial = effectMaterial;
		string text = effectMaterial.name.Substring(effectMaterial.name.LastIndexOf('/') + 1);
		_profilingSampler = new ProfilingSampler("Blit " + text);
		_copyMaterial = CoreUtils.CreateEngineMaterial(CopyEffectShaderName);
		ConfigureInput((useColor ? ScriptableRenderPassInput.Color : ScriptableRenderPassInput.None) | (useDepth ? ScriptableRenderPassInput.Depth : ScriptableRenderPassInput.None) | (useNormals ? ScriptableRenderPassInput.Normal : ScriptableRenderPassInput.None));
	}

	public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData)
	{
		ConfigureTarget(new RenderTargetIdentifier(renderingData.cameraData.renderer.cameraColorTarget, 0, CubemapFace.Unknown, -1));
	}

	public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData)
	{
		if (_effectMaterial == null || renderingData.cameraData.camera.cameraType != CameraType.Game)
		{
			return;
		}
		_temporaryColorTexture = default(RenderTargetHandle);
		CommandBuffer commandBuffer = CommandBufferPool.Get();
		using (new ProfilingScope(commandBuffer, _profilingSampler))
		{
			RenderTextureDescriptor cameraTargetDescriptor = renderingData.cameraData.cameraTargetDescriptor;
			cameraTargetDescriptor.depthBufferBits = 0;
			SetSourceSize(commandBuffer, cameraTargetDescriptor);
			RTHandle cameraColorTargetHandle = renderingData.cameraData.renderer.cameraColorTargetHandle;
			commandBuffer.GetTemporaryRT(_temporaryColorTexture.id, cameraTargetDescriptor);
			if (renderingData.cameraData.xrRendering)
			{
				_effectMaterial.EnableKeyword("_USE_DRAW_PROCEDURAL");
				commandBuffer.SetRenderTarget(_temporaryColorTexture.Identifier());
				commandBuffer.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _effectMaterial, 0, 0);
				commandBuffer.SetGlobalTexture("_EffectTexture", _temporaryColorTexture.Identifier());
				commandBuffer.SetRenderTarget(new RenderTargetIdentifier(cameraColorTargetHandle, 0, CubemapFace.Unknown, -1));
				commandBuffer.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, _copyMaterial, 0, 0);
			}
			else
			{
				_effectMaterial.DisableKeyword("_USE_DRAW_PROCEDURAL");
				commandBuffer.Blit(cameraColorTargetHandle, _temporaryColorTexture.Identifier(), _effectMaterial, 0);
				commandBuffer.Blit(_temporaryColorTexture.Identifier(), cameraColorTargetHandle);
			}
		}
		context.ExecuteCommandBuffer(commandBuffer);
		commandBuffer.Clear();
		CommandBufferPool.Release(commandBuffer);
	}

	private static void SetSourceSize(CommandBuffer cmd, RenderTextureDescriptor desc)
	{
		float num = desc.width;
		float num2 = desc.height;
		if (desc.useDynamicScale)
		{
			num *= ScalableBufferManager.widthScaleFactor;
			num2 *= ScalableBufferManager.heightScaleFactor;
		}
		cmd.SetGlobalVector("_SourceSize", new Vector4(num, num2, 1f / num, 1f / num2));
	}
}