123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- 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;
- }
- }
- }
|