360 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			360 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using UnityEngine.Rendering.RenderGraphModule; | ||
|  | 
 | ||
|  | namespace UnityEngine.Rendering.Universal | ||
|  | { | ||
|  |     /// <summary> | ||
|  |     /// Class that holds settings related to texture resources. | ||
|  |     /// </summary> | ||
|  |     public class UniversalResourceData : UniversalResourceDataBase | ||
|  |     { | ||
|  |         /// <summary> | ||
|  |         /// The active color target ID. | ||
|  |         /// </summary> | ||
|  |         internal ActiveID activeColorID { get; set; } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Returns the current active color target texture. To be referenced at RenderGraph pass recording time, not in passes render functions. | ||
|  |         /// </summary> | ||
|  |         /// <value>Returns the active color texture between the front and back buffer.</value> | ||
|  |         public TextureHandle activeColorTexture | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 if (!CheckAndWarnAboutAccessibility()) | ||
|  |                     return TextureHandle.nullHandle; | ||
|  | 
 | ||
|  |                 switch (activeColorID) | ||
|  |                 { | ||
|  |                     case ActiveID.Camera: | ||
|  |                         return cameraColor; | ||
|  |                     case ActiveID.BackBuffer: | ||
|  |                         return backBufferColor; | ||
|  |                     default: | ||
|  |                         throw new ArgumentOutOfRangeException(); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// The active depth target ID. | ||
|  |         /// </summary> | ||
|  |         internal ActiveID activeDepthID { get; set; } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Returns the current active color target texture. To be referenced at RenderGraph pass recording time, not in passes render functions. | ||
|  |         /// </summary> | ||
|  |         /// <value>TextureHandle</value> | ||
|  |         public TextureHandle activeDepthTexture | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 if (!CheckAndWarnAboutAccessibility()) | ||
|  |                     return TextureHandle.nullHandle; | ||
|  | 
 | ||
|  |                 switch (activeDepthID) | ||
|  |                 { | ||
|  |                     case ActiveID.Camera: | ||
|  |                         return cameraDepth; | ||
|  |                     case ActiveID.BackBuffer: | ||
|  |                         return backBufferDepth; | ||
|  |                     default: | ||
|  |                         throw new ArgumentOutOfRangeException(); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// True if the current active target is the backbuffer. To be referenced at RenderGraph pass recording time, not in passes render functions. | ||
|  |         /// </summary> | ||
|  |         /// <value>Returns true if the backbuffer is currently in use and false otherwise.</value> | ||
|  |         public bool isActiveTargetBackBuffer | ||
|  |         { | ||
|  |             get | ||
|  |             { | ||
|  |                 if (!isAccessible) | ||
|  |                 { | ||
|  |                     Debug.LogError("Trying to access frameData outside of the current frame setup."); | ||
|  |                     return false; | ||
|  |                 } | ||
|  | 
 | ||
|  |                 return activeColorID == UniversalResourceData.ActiveID.BackBuffer; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// The backbuffer color used to render directly to screen. All passes can write to it depending on frame setup. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle backBufferColor | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _backBufferColor); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _backBufferColor, value); | ||
|  |         } | ||
|  |         private TextureHandle _backBufferColor; | ||
|  | 
 | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// The backbuffer depth used to render directly to screen. All passes can write to it depending on frame setup. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle backBufferDepth | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _backBufferDepth); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _backBufferDepth, value); | ||
|  |         } | ||
|  |         private TextureHandle _backBufferDepth; | ||
|  | 
 | ||
|  |         // intermediate camera targets | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Main offscreen camera color target. All passes can write to it depending on frame setup. | ||
|  |         /// Can hold multiple samples if MSAA is enabled. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle cameraColor | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _cameraColor); | ||
|  |             set => CheckAndSetTextureHandle(ref _cameraColor, value); | ||
|  |         } | ||
|  |         private TextureHandle _cameraColor; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Main offscreen camera depth target. All passes can write to it depending on frame setup. | ||
|  |         /// Can hold multiple samples if MSAA is enabled. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle cameraDepth | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _cameraDepth); | ||
|  |             set => CheckAndSetTextureHandle(ref _cameraDepth, value); | ||
|  |         } | ||
|  |         private TextureHandle _cameraDepth; | ||
|  | 
 | ||
|  |         // shadows | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Main shadow map. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle mainShadowsTexture | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _mainShadowsTexture); | ||
|  |             set => CheckAndSetTextureHandle(ref _mainShadowsTexture, value); | ||
|  |         } | ||
|  |         private TextureHandle _mainShadowsTexture; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Additional shadow map. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle additionalShadowsTexture | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _additionalShadowsTexture); | ||
|  |             set => CheckAndSetTextureHandle(ref _additionalShadowsTexture, value); | ||
|  |         } | ||
|  |         private TextureHandle _additionalShadowsTexture; | ||
|  | 
 | ||
|  |         // GBuffer targets | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// GBuffer. Written to by the GBuffer pass. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle[] gBuffer | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _gBuffer); | ||
|  |             set => CheckAndSetTextureHandle(ref _gBuffer, value); | ||
|  |         } | ||
|  |         private TextureHandle[] _gBuffer = new TextureHandle[RenderGraphUtils.GBufferSize]; | ||
|  | 
 | ||
|  |         // camera opaque/depth/normal | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Camera opaque texture. Contains a copy of CameraColor if the CopyColor pass is executed. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle cameraOpaqueTexture | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _cameraOpaqueTexture); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _cameraOpaqueTexture, value); | ||
|  |         } | ||
|  |         private TextureHandle _cameraOpaqueTexture; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Camera depth texture. Contains the scene depth if the CopyDepth or Depth Prepass passes are executed. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle cameraDepthTexture | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _cameraDepthTexture); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _cameraDepthTexture, value); | ||
|  |         } | ||
|  |         private TextureHandle _cameraDepthTexture; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Camera normals texture. Contains the scene depth if the DepthNormals Prepass pass is executed. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle cameraNormalsTexture | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _cameraNormalsTexture); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _cameraNormalsTexture, value); | ||
|  |         } | ||
|  |         private TextureHandle _cameraNormalsTexture; | ||
|  | 
 | ||
|  |         // motion vector | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Motion Vector Color. Written to by the Motion Vector passes. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle motionVectorColor | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _motionVectorColor); | ||
|  |             set => CheckAndSetTextureHandle(ref _motionVectorColor, value); | ||
|  |         } | ||
|  |         private TextureHandle _motionVectorColor; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Motion Vector Depth. Written to by the Motion Vector passes. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle motionVectorDepth | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _motionVectorDepth); | ||
|  |             set => CheckAndSetTextureHandle(ref _motionVectorDepth, value); | ||
|  |         } | ||
|  |         private TextureHandle _motionVectorDepth; | ||
|  | 
 | ||
|  |         // postFx | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Internal Color LUT. Written to by the InternalLUT pass. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle internalColorLut | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _internalColorLut); | ||
|  |             set => CheckAndSetTextureHandle(ref _internalColorLut, value); | ||
|  |         } | ||
|  |         private TextureHandle _internalColorLut; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Color output of post-process passes (uberPost and finalPost) when HDR debug views are enabled. It replaces | ||
|  |         /// the backbuffer color as standard output because the later cannot be sampled back (or may not be in HDR format). | ||
|  |         /// If used, DebugHandler will perform the blit from DebugScreenTexture to BackBufferColor. | ||
|  |         /// </summary> | ||
|  |         internal TextureHandle debugScreenColor | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _debugScreenColor); | ||
|  |             set => CheckAndSetTextureHandle(ref _debugScreenColor, value); | ||
|  |         } | ||
|  |         internal TextureHandle _debugScreenColor; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Depth output of post-process passes (uberPost and finalPost) when HDR debug views are enabled. It replaces | ||
|  |         /// the backbuffer depth as standard output because the later cannot be sampled back. | ||
|  |         /// </summary> | ||
|  |         internal TextureHandle debugScreenDepth | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _debugScreenDepth); | ||
|  |             set => CheckAndSetTextureHandle(ref _debugScreenDepth, value); | ||
|  |         } | ||
|  |         internal TextureHandle _debugScreenDepth; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// After Post Process Color. Stores the contents of the main color target after the post processing passes. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle afterPostProcessColor | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _afterPostProcessColor); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _afterPostProcessColor, value); | ||
|  |         } | ||
|  |         private TextureHandle _afterPostProcessColor; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Overlay UI Texture. The DrawScreenSpaceUI pass writes to this texture when rendering off-screen. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle overlayUITexture | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _overlayUITexture); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _overlayUITexture, value); | ||
|  |         } | ||
|  |         private TextureHandle _overlayUITexture; | ||
|  | 
 | ||
|  |         // rendering layers | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Rendering Layers Texture. Can be written to by the DrawOpaques pass or DepthNormals prepass based on settings. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle renderingLayersTexture | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _renderingLayersTexture); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _renderingLayersTexture, value); | ||
|  |         } | ||
|  |         private TextureHandle _renderingLayersTexture; | ||
|  | 
 | ||
|  |         // decals | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// DBuffer. Written to by the Decals pass. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle[] dBuffer | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _dBuffer); | ||
|  |             set => CheckAndSetTextureHandle(ref _dBuffer, value); | ||
|  |         } | ||
|  |         private TextureHandle[] _dBuffer = new TextureHandle[RenderGraphUtils.DBufferSize]; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// DBufferDepth. Written to by the Decals pass. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle dBufferDepth | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _dBufferDepth); | ||
|  |             set => CheckAndSetTextureHandle(ref _dBufferDepth, value); | ||
|  |         } | ||
|  |         private TextureHandle _dBufferDepth; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Screen Space Ambient Occlusion texture. Written to by the SSAO pass. | ||
|  |         /// </summary> | ||
|  |         public TextureHandle ssaoTexture | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _ssaoTexture); | ||
|  |             internal set => CheckAndSetTextureHandle(ref _ssaoTexture, value); | ||
|  |         } | ||
|  |         private TextureHandle _ssaoTexture; | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// STP debug visualization written to by the STP upscaler. | ||
|  |         /// </summary> | ||
|  |         internal TextureHandle stpDebugView | ||
|  |         { | ||
|  |             get => CheckAndGetTextureHandle(ref _stpDebugView); | ||
|  |             set => CheckAndSetTextureHandle(ref _stpDebugView, value); | ||
|  |         } | ||
|  |         private TextureHandle _stpDebugView; | ||
|  | 
 | ||
|  |         /// <inheritdoc /> | ||
|  |         public override void Reset() | ||
|  |         { | ||
|  |             _backBufferColor = TextureHandle.nullHandle; | ||
|  |             _backBufferDepth = TextureHandle.nullHandle; | ||
|  |             _cameraColor = TextureHandle.nullHandle; | ||
|  |             _cameraDepth = TextureHandle.nullHandle; | ||
|  |             _mainShadowsTexture = TextureHandle.nullHandle; | ||
|  |             _additionalShadowsTexture = TextureHandle.nullHandle; | ||
|  |             _cameraOpaqueTexture = TextureHandle.nullHandle; | ||
|  |             _cameraDepthTexture = TextureHandle.nullHandle; | ||
|  |             _cameraNormalsTexture = TextureHandle.nullHandle; | ||
|  |             _motionVectorColor = TextureHandle.nullHandle; | ||
|  |             _motionVectorDepth = TextureHandle.nullHandle; | ||
|  |             _internalColorLut = TextureHandle.nullHandle; | ||
|  |             _debugScreenColor = TextureHandle.nullHandle; | ||
|  |             _debugScreenDepth = TextureHandle.nullHandle; | ||
|  |             _afterPostProcessColor = TextureHandle.nullHandle; | ||
|  |             _overlayUITexture = TextureHandle.nullHandle; | ||
|  |             _renderingLayersTexture = TextureHandle.nullHandle; | ||
|  |             _dBufferDepth = TextureHandle.nullHandle; | ||
|  |             _ssaoTexture = TextureHandle.nullHandle; | ||
|  |             _stpDebugView = TextureHandle.nullHandle; | ||
|  | 
 | ||
|  |             for (int i = 0; i < _gBuffer.Length; i++) | ||
|  |                 _gBuffer[i] = TextureHandle.nullHandle; | ||
|  | 
 | ||
|  |             for (int i = 0; i < _dBuffer.Length; i++) | ||
|  |                 _dBuffer[i] = TextureHandle.nullHandle; | ||
|  |         } | ||
|  |     } | ||
|  | } |