열차 목업의 내부 확인용 프로젝트
smchoi
2024-07-24 ff74c0073046f0e086eb7d355950bda39937c92c
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//////////////////////////////////////////////////////
// MK Glow RenderContext                                //
//                                                    //
// Created by Michael Kremmel                       //
// www.michaelkremmel.de                            //
// Copyright © 2020 All rights reserved.            //
//////////////////////////////////////////////////////
using UnityEngine;
 
namespace MK.Glow
{
    #if UNITY_2018_3_OR_NEWER
    #if ENABLE_VR
    using XRSettings = UnityEngine.XR.XRSettings;
    #endif
    #endif
 
    internal sealed class RenderContext : IDimension
    {
        #if UNITY_2017_1_OR_NEWER
        private RenderTextureDescriptor _descriptor;
        public RenderTextureDescriptor descriptor { get{ return _descriptor; } }
        public RenderDimension renderDimension { get{ return new RenderDimension(_descriptor.width, _descriptor.height); } }
        #else
        private RenderDimension _descriptor;
        public RenderDimension descriptor { get{ return _descriptor; } }
        public RenderDimension renderDimension { get{ return _descriptor; } }
        #endif
 
        public int width { get{ return _descriptor.width; } }
        public int height { get{ return _descriptor.height; } }
 
        /// <summary>
        /// Create the rendercontext based on XR settings
        /// </summary>
        internal RenderContext()
        {
            #if UNITY_2018_3_OR_NEWER
            #if ENABLE_VR
            _descriptor = XRSettings.enabled ? XRSettings.eyeTextureDesc : new RenderTextureDescriptor();
            #else
            _descriptor = new RenderTextureDescriptor();
            #endif
            _descriptor.msaaSamples = 1;
            _descriptor.useMipMap = false;
            _descriptor.autoGenerateMips = false;
            _descriptor.shadowSamplingMode = UnityEngine.Rendering.ShadowSamplingMode.None;
            #elif UNITY_2017_1_OR_NEWER
            _descriptor = new RenderTextureDescriptor();
            _descriptor.msaaSamples = 1;
            _descriptor.useMipMap = false;
            _descriptor.autoGenerateMips = false;
            #else
            _descriptor = new RenderDimension(0, 0);
            #endif
 
            #if UNITY_2019_2_OR_NEWER
                _descriptor.mipCount = 1;
            #endif
        }
 
        /// <summary>
        /// Doublewide the dimension if single pass stereo is enabled
        /// </summary>
        /// <param name="stereoEnabled"></param>
        internal void SinglePassStereoAdjustWidth(bool stereoEnabled)
        {
            _descriptor.width = stereoEnabled && PipelineProperties.singlePassStereoDoubleWideEnabled ? _descriptor.width * 2 : _descriptor.width;
        }
 
        /// <summary>
        /// Update a render context based on rendering settings including xr
        /// </summary>
        /// <param name="camera"></param>
        /// <param name="format"></param>
        /// <param name="depthBufferBits"></param>
        /// <param name="dimension"></param>
        internal void UpdateRenderContext(MK.Glow.ICameraData cameraData, RenderTextureFormat format, int depthBufferBits, RenderDimension dimension)
        {
            if(cameraData.GetOverwriteDescriptor())
            {
                _descriptor.dimension = cameraData.GetOverwriteDimension();
                #if ENABLE_VR
                _descriptor.vrUsage = cameraData.GetStereoEnabled() ? XRSettings.eyeTextureDesc.vrUsage : VRTextureUsage.None;
                #else
                _descriptor.vrUsage = VRTextureUsage.None;
                #endif
                _descriptor.volumeDepth = cameraData.GetOverwriteVolumeDepth();
            }
            else
            {
                #if UNITY_2018_3_OR_NEWER
                #if ENABLE_VR
                _descriptor.dimension = cameraData.GetStereoEnabled() && !cameraData.GetTargetTexture() ? UnityEngine.XR.XRSettings.eyeTextureDesc.dimension : UnityEngine.Rendering.TextureDimension.Tex2D;
                _descriptor.vrUsage = cameraData.GetStereoEnabled() && !cameraData.GetTargetTexture() ? UnityEngine.XR.XRSettings.eyeTextureDesc.vrUsage : VRTextureUsage.None;
                _descriptor.volumeDepth = cameraData.GetStereoEnabled() && !cameraData.GetTargetTexture() ? UnityEngine.XR.XRSettings.eyeTextureDesc.volumeDepth : 1;
                #else
                _descriptor.dimension = UnityEngine.Rendering.TextureDimension.Tex2D;
                _descriptor.vrUsage = VRTextureUsage.None;
                _descriptor.volumeDepth = 1;
                #endif
                #elif UNITY_2017_1_OR_NEWER
                _descriptor.dimension = UnityEngine.Rendering.TextureDimension.Tex2D;
                _descriptor.vrUsage = VRTextureUsage.None;
                _descriptor.volumeDepth = 1;
                #endif
            }
 
            #if UNITY_2017_1_OR_NEWER
            _descriptor.colorFormat = format;
            _descriptor.depthBufferBits = depthBufferBits;
            _descriptor.width = dimension.width;
            _descriptor.height = dimension.height;
            _descriptor.memoryless = RenderTextureMemoryless.None;
            _descriptor.sRGB = RenderTextureReadWrite.Default != RenderTextureReadWrite.Linear;
            #else
            _descriptor.width = dimension.width;
            _descriptor.height = dimension.height;
            #endif
            _descriptor.depthBufferBits = 16;
        }
    }
}