Spelunx Cavern SDK
 
Loading...
Searching...
No Matches
ScreenSpaceCanvasRenderer.cs
Go to the documentation of this file.
1using System.Collections.Generic;
2using UnityEngine;
3using UnityEngine.Rendering;
4using UnityEngine.Rendering.Universal;
5
6namespace Spelunx
7{
8 [ExecuteInEditMode]
9 public class ScreenSpaceCanvasRenderer : MonoBehaviour
10 {
11
12 [SerializeField]
13 private Texture uiDoublerTexture;
14 [SerializeField]
15 private Shader uiDoublerShader;
16 private Material uiDoublerMaterial;
17 [SerializeField]
18 private float uiDoublerEyeOffset = 0f;
19 [SerializeField]
20 private Camera renderCamera;
21 private DirectCanvasRenderPass directCanvasRenderPass;
22
23 private void Awake()
24 {
25 // Initialise material.
26 uiDoublerMaterial = new Material(uiDoublerShader);
27 uiDoublerMaterial.SetTexture("_MainTex", uiDoublerTexture);
28 uiDoublerMaterial.SetFloat("_3d_offset", uiDoublerEyeOffset);
29 directCanvasRenderPass = new DirectCanvasRenderPass(uiDoublerMaterial);
30 }
31
32 private void OnEnable()
33 {
34 RenderPipelineManager.beginCameraRendering += OnBeginCameraRendering;
35 RenderPipelineManager.endCameraRendering += OnEndCameraRendering;
36 }
37
38 private void OnDisable()
39 {
40 RenderPipelineManager.beginCameraRendering -= OnBeginCameraRendering;
41 RenderPipelineManager.endCameraRendering -= OnEndCameraRendering;
42 }
43
44 // Start is called once before the first execution of Update after the MonoBehaviour is created
45 void Update()
46 {
47 uiDoublerMaterial.SetFloat("_3d_offset", uiDoublerEyeOffset);
48 }
49
50 private void OnBeginCameraRendering(ScriptableRenderContext context, Camera camera)
51 {
52 if (camera == renderCamera)
53 {
54 camera.GetUniversalAdditionalCameraData().scriptableRenderer.EnqueuePass(directCanvasRenderPass);
55 }
56 }
57
58 private void OnEndCameraRendering(ScriptableRenderContext context, Camera camera)
59 {
60 }
61 }
62}