using UnityEditor.UIElements; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; using UnityEngine.UIElements; namespace UnityEditor.Rendering.Universal { [CustomPropertyDrawer(typeof(RenderGraphSettings))] class RenderGraphPropertyDrawer : PropertyDrawer { VisualElement m_Root; private const string k_EnableRenderCompatibilityPropertyName = "m_EnableRenderCompatibilityMode"; private const string k_EnableRenderCompatibilityModeLabel = "Compatibility Mode (Render Graph Disabled)"; private const string k_EnableRenderCompatibilityModeHelpBoxLabel = "Unity no longer develops or improves the rendering path that does not use Render Graph API. Use the Render Graph API when developing new graphics features."; bool m_EnableCompatibilityModeValue; /// public override VisualElement CreatePropertyGUI(SerializedProperty property) { m_Root = new VisualElement(); var enableCompatilityModeProp = property.FindPropertyRelative(k_EnableRenderCompatibilityPropertyName); var enableCompatibilityMode = new PropertyField(enableCompatilityModeProp, k_EnableRenderCompatibilityModeLabel); // UITK raises ValueChangeCallback at various times, so we need to track the actual value m_EnableCompatibilityModeValue = enableCompatilityModeProp.boolValue; m_Root.Add(enableCompatibilityMode); enableCompatibilityMode.RegisterValueChangeCallback((onchanged) => { m_Root.Q("HelpBoxWarning").style.display = (onchanged.changedProperty.boolValue) ? DisplayStyle.Flex : DisplayStyle.None; bool newValue = onchanged.changedProperty.boolValue; if (m_EnableCompatibilityModeValue != newValue) { m_EnableCompatibilityModeValue = newValue; GraphicsSettings.GetRenderPipelineSettings()?.NotifyValueChanged(onchanged.changedProperty.name); } }); m_Root.Add(new HelpBox(k_EnableRenderCompatibilityModeHelpBoxLabel, HelpBoxMessageType.Warning) { name = "HelpBoxWarning" }); return m_Root; } } }