111 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			111 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Collections.Generic; | ||
|  | using System.Reflection; | ||
|  | using UnityEngine; | ||
|  | using NameAndTooltip = UnityEngine.Rendering.DebugUI.Widget.NameAndTooltip; | ||
|  | 
 | ||
|  | namespace UnityEngine.Rendering.Universal | ||
|  | { | ||
|  |     /// <summary> | ||
|  |     /// Lighting-related Rendering Debugger settings. | ||
|  |     /// </summary> | ||
|  |     [URPHelpURL("features/rendering-debugger-reference", "lighting")] | ||
|  |     public class DebugDisplaySettingsLighting : IDebugDisplaySettingsData | ||
|  |     { | ||
|  |         /// <summary> | ||
|  |         /// Current debug lighting mode. | ||
|  |         /// </summary> | ||
|  |         public DebugLightingMode lightingDebugMode { get; set; } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Current debug lighting feature flags mask that allows selective disabling individual lighting components. | ||
|  |         /// </summary> | ||
|  |         public DebugLightingFeatureFlags lightingFeatureFlags { get; set; } | ||
|  | 
 | ||
|  |         /// <summary> | ||
|  |         /// Current HDR debug mode. | ||
|  |         /// </summary> | ||
|  |         public HDRDebugMode hdrDebugMode { get; set; } | ||
|  | 
 | ||
|  |         static internal class Strings | ||
|  |         { | ||
|  |             public static readonly NameAndTooltip LightingDebugMode = new() { name = "Lighting Debug Mode", tooltip = "Use the drop-down to select which lighting and shadow debug information to overlay on the screen." }; | ||
|  |             public static readonly NameAndTooltip LightingFeatures = new() { name = "Lighting Features", tooltip = "Filter and debug selected lighting features in the system." }; | ||
|  |             public static readonly NameAndTooltip HDRDebugMode = new() { name = "HDR Debug Mode", tooltip = "Select which HDR brightness debug information to overlay on the screen." }; | ||
|  |         } | ||
|  | 
 | ||
|  |         internal static class WidgetFactory | ||
|  |         { | ||
|  |             internal static DebugUI.Widget CreateLightingDebugMode(SettingsPanel panel) => new DebugUI.EnumField | ||
|  |             { | ||
|  |                 nameAndTooltip = Strings.LightingDebugMode, | ||
|  |                 autoEnum = typeof(DebugLightingMode), | ||
|  |                 getter = () => (int)panel.data.lightingDebugMode, | ||
|  |                 setter = (value) => panel.data.lightingDebugMode = (DebugLightingMode)value, | ||
|  |                 getIndex = () => (int)panel.data.lightingDebugMode, | ||
|  |                 setIndex = (value) => panel.data.lightingDebugMode = (DebugLightingMode)value | ||
|  |             }; | ||
|  | 
 | ||
|  |             internal static DebugUI.Widget CreateLightingFeatures(SettingsPanel panel) => new DebugUI.BitField | ||
|  |             { | ||
|  |                 nameAndTooltip = Strings.LightingFeatures, | ||
|  |                 getter = () => panel.data.lightingFeatureFlags, | ||
|  |                 setter = (value) => panel.data.lightingFeatureFlags = (DebugLightingFeatureFlags)value, | ||
|  |                 enumType = typeof(DebugLightingFeatureFlags), | ||
|  |             }; | ||
|  | 
 | ||
|  |             internal static DebugUI.Widget CreateHDRDebugMode(SettingsPanel panel) => new DebugUI.EnumField | ||
|  |             { | ||
|  |                 nameAndTooltip = Strings.HDRDebugMode, | ||
|  |                 autoEnum = typeof(HDRDebugMode), | ||
|  |                 getter = () => (int)panel.data.hdrDebugMode, | ||
|  |                 setter = (value) => panel.data.hdrDebugMode = (HDRDebugMode)value, | ||
|  |                 getIndex = () => (int)panel.data.hdrDebugMode, | ||
|  |                 setIndex = (value) => panel.data.hdrDebugMode = (HDRDebugMode)value | ||
|  |             }; | ||
|  |         } | ||
|  | 
 | ||
|  |         [DisplayInfo(name = "Lighting", order = 3)] | ||
|  |         internal class SettingsPanel : DebugDisplaySettingsPanel<DebugDisplaySettingsLighting> | ||
|  |         { | ||
|  |             public SettingsPanel(DebugDisplaySettingsLighting data) | ||
|  |                 : base(data) | ||
|  |             { | ||
|  |                 AddWidget(new DebugUI.RuntimeDebugShadersMessageBox()); | ||
|  | 
 | ||
|  |                 AddWidget(new DebugUI.Foldout | ||
|  |                 { | ||
|  |                     displayName = "Lighting Debug Modes", | ||
|  |                     flags = DebugUI.Flags.FrequentlyUsed, | ||
|  |                     opened = true, | ||
|  |                     children = | ||
|  |                     { | ||
|  |                         WidgetFactory.CreateLightingDebugMode(this), | ||
|  |                         WidgetFactory.CreateHDRDebugMode(this), | ||
|  |                         WidgetFactory.CreateLightingFeatures(this) | ||
|  |                     }, | ||
|  |                     documentationUrl = typeof(DebugDisplaySettingsLighting).GetCustomAttribute<HelpURLAttribute>()?.URL | ||
|  |                 }); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         #region IDebugDisplaySettingsData | ||
|  | 
 | ||
|  |         /// <inheritdoc/> | ||
|  |         public bool AreAnySettingsActive => (lightingDebugMode != DebugLightingMode.None) || (lightingFeatureFlags != DebugLightingFeatureFlags.None) || (hdrDebugMode != HDRDebugMode.None); | ||
|  | 
 | ||
|  |         /// <inheritdoc/> | ||
|  |         public bool IsPostProcessingAllowed => (lightingDebugMode != DebugLightingMode.Reflections && lightingDebugMode != DebugLightingMode.ReflectionsWithSmoothness); | ||
|  | 
 | ||
|  |         /// <inheritdoc/> | ||
|  |         public bool IsLightingActive => true; | ||
|  | 
 | ||
|  |         /// <inheritdoc/> | ||
|  |         IDebugDisplaySettingsPanelDisposable IDebugDisplaySettingsData.CreatePanel() | ||
|  |         { | ||
|  |             return new SettingsPanel(this); | ||
|  |         } | ||
|  | 
 | ||
|  |         #endregion | ||
|  |     } | ||
|  | } |