summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Camera/CustomRenderingPipeline.cs
blob: c11cc785c5592331a923bc78d01bdd70e8eeddac (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
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;

// https://docs.unity3d.com/ScriptReference/Rendering.CameraEvent.html
// 前向渲染的camera events
// * DepthTexture
// * DepthNormalTexture
// * ForwardOpaque
// * ImageEffectsOpaque
// * Skybox
// * ForwardAlpha
// * ImageEffects
// * Everything

[Flags]
public enum ERenderingEvent
{
    None = 0,
    BeforeDepthTexture       = 1,
    BeforeDepthNormalsTexture = 1 << 1,
    BeforeForwardOpaque      = 1 << 2,
    BeforeImageEffectsOpaque = 1 << 3,
    BeforeSkybox             = 1 << 4,
    BeforeForwardAlpha       = 1 << 5,
    BeforeImageEffects       = 1 << 6,
    //BeforeEverything         = 1 << 7,
    AfterDepthTexture        = 1 << 8,
    AfterDepthNormalsTexture = 1 << 9,
    AfterForwardOpaque       = 1 << 10,
    AfterImageEffectsOpaque  = 1 << 11,
    AfterSkybox              = 1 << 12,
    AfterForwardAlpha        = 1 << 13,
    AfterImageEffects        = 1 << 14,
    AfterEverything          = 1 << 15,
}

[RequireComponent(typeof(MainCamera))]
public class CustomRenderingPipeline : MonoBehaviour
{
    public static Dictionary<ERenderingEvent, CameraEvent> RenderingEventToCameraEvent = new Dictionary<ERenderingEvent, CameraEvent> {
        {ERenderingEvent.BeforeDepthTexture, CameraEvent.BeforeDepthTexture },
        {ERenderingEvent.BeforeDepthNormalsTexture, CameraEvent.BeforeDepthNormalsTexture },
        {ERenderingEvent.BeforeForwardOpaque, CameraEvent.BeforeForwardOpaque },
        {ERenderingEvent.BeforeImageEffectsOpaque, CameraEvent.BeforeImageEffectsOpaque },
        {ERenderingEvent.BeforeSkybox, CameraEvent.BeforeSkybox },
        {ERenderingEvent.BeforeForwardAlpha, CameraEvent.BeforeForwardAlpha },
        {ERenderingEvent.BeforeImageEffects, CameraEvent.BeforeImageEffects },
        {ERenderingEvent.AfterDepthTexture, CameraEvent.AfterDepthTexture },
        {ERenderingEvent.AfterDepthNormalsTexture, CameraEvent.AfterDepthNormalsTexture },
        {ERenderingEvent.AfterForwardOpaque, CameraEvent.AfterForwardOpaque },
        {ERenderingEvent.AfterImageEffectsOpaque, CameraEvent.AfterImageEffectsOpaque },
        {ERenderingEvent.AfterSkybox, CameraEvent.AfterSkybox },
        {ERenderingEvent.AfterForwardAlpha, CameraEvent.AfterForwardAlpha },
        {ERenderingEvent.AfterImageEffects, CameraEvent.AfterImageEffects },
        {ERenderingEvent.AfterEverything, CameraEvent.AfterEverything },
    };

    Camera m_Camera;

    public delegate void RenderEventHandler();
    public event RenderEventHandler onPreCull;
    public event RenderEventHandler onPreRender;
    public event RenderEventHandler onPostRender;

    private void OnEable()
    {
        m_Camera = GetComponent<Camera>();
    }

    private void Start()
    {

    }

    private void OnPreCull()
    {
        onPreCull?.Invoke();
    }

    private void OnPreRender()
    {
        onPreRender?.Invoke();
    }

    private void OnPostRender()
    {
        onPostRender?.Invoke();
    }

    #region 贴图

    #endregion 



}