103 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using UnityEngine.Rendering.RenderGraphModule; | ||
|  | 
 | ||
|  | namespace UnityEngine.Rendering.Universal | ||
|  | { | ||
|  |     /// <summary> | ||
|  |     /// Base class for URP texture data. | ||
|  |     /// </summary> | ||
|  |     public abstract class UniversalResourceDataBase : ContextItem | ||
|  |     { | ||
|  |         /// <summary> | ||
|  |         /// Options for the active color & depth target texture. | ||
|  |         /// </summary> | ||
|  |         internal enum ActiveID | ||
|  |         { | ||
|  |             /// <summary>The camera buffer.</summary> | ||
|  |             Camera, | ||
|  | 
 | ||
|  |             /// <summary>The backbuffer.</summary> | ||
|  |             BackBuffer | ||
|  |         } | ||
|  | 
 | ||
|  |         internal bool isAccessible { get; set; } | ||
|  | 
 | ||
|  |         internal void InitFrame() | ||
|  |         { | ||
|  |             isAccessible = true; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal void EndFrame() | ||
|  |         { | ||
|  |             isAccessible = false; | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Updates the texture handle if the texture is accessible. | ||
|  |         /// </summary> | ||
|  |         /// <param name="handle">Handle to update.</param> | ||
|  |         /// <param name="newHandle">Handle of the new data.</param> | ||
|  |         protected void CheckAndSetTextureHandle(ref TextureHandle handle, TextureHandle newHandle) | ||
|  |         { | ||
|  |             if (!CheckAndWarnAboutAccessibility()) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             handle = newHandle; | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Fetches the texture handle if the texture is accessible. | ||
|  |         /// </summary> | ||
|  |         /// <param name="handle">Handle to the texture you want to retrieve</param> | ||
|  |         /// <returns>Returns the handle if the texture is accessible and a null handle otherwise.</returns> | ||
|  |         protected TextureHandle CheckAndGetTextureHandle(ref TextureHandle handle) | ||
|  |         { | ||
|  |             if (!CheckAndWarnAboutAccessibility()) | ||
|  |                 return TextureHandle.nullHandle; | ||
|  | 
 | ||
|  |             return handle; | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Updates the texture handles if the texture is accessible. The current and new handles needs to be of the same size. | ||
|  |         /// </summary> | ||
|  |         /// <param name="handle">Handles to update.</param> | ||
|  |         /// <param name="newHandle">Handles of the new data.</param> | ||
|  |         protected void CheckAndSetTextureHandle(ref TextureHandle[] handle, TextureHandle[] newHandle) | ||
|  |         { | ||
|  |             if (!CheckAndWarnAboutAccessibility()) | ||
|  |                 return; | ||
|  | 
 | ||
|  |             if (handle == null || handle.Length != newHandle.Length) | ||
|  |                 handle = new TextureHandle[newHandle.Length]; | ||
|  | 
 | ||
|  |             for (int i = 0; i < newHandle.Length; i++) | ||
|  |                 handle[i] = newHandle[i]; | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Fetches the texture handles if the texture is accessible. | ||
|  |         /// </summary> | ||
|  |         /// <param name="handle">Handles to the texture you want to retrieve</param> | ||
|  |         /// <returns>Returns the handles if the texture is accessible and a null handle otherwise.</returns> | ||
|  |         protected TextureHandle[] CheckAndGetTextureHandle(ref TextureHandle[] handle) | ||
|  |         { | ||
|  |             if (!CheckAndWarnAboutAccessibility()) | ||
|  |                 return new []{TextureHandle.nullHandle}; | ||
|  | 
 | ||
|  |             return handle; | ||
|  |         } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Check if the texture is accessible. | ||
|  |         /// </summary> | ||
|  |         /// <returns>Returns true if the texture is accessible and false otherwise.</returns> | ||
|  |         protected bool CheckAndWarnAboutAccessibility() | ||
|  |         { | ||
|  |             if (!isAccessible) | ||
|  |                 Debug.LogError("Trying to access Universal Resources outside of the current frame setup."); | ||
|  | 
 | ||
|  |             return isAccessible; | ||
|  |         } | ||
|  |     } | ||
|  | } |