Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

DebugDisplaySettingsUI.cs 3.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine.Rendering.RenderGraphModule;
  4. namespace UnityEngine.Rendering
  5. {
  6. /// <summary>
  7. /// The UI implementation for a debug settings panel
  8. /// </summary>
  9. public class DebugDisplaySettingsUI : IDebugData
  10. {
  11. private IEnumerable<IDebugDisplaySettingsPanelDisposable> m_DisposablePanels;
  12. private IDebugDisplaySettings m_Settings;
  13. private void Reset()
  14. {
  15. if (m_Settings != null)
  16. {
  17. m_Settings.Reset();
  18. // TODO: Tear the UI down and re-create it for now - this is horrible, so reset it instead.
  19. UnregisterDebug();
  20. RegisterDebug(m_Settings);
  21. DebugManager.instance.RefreshEditor();
  22. }
  23. }
  24. /// <summary>
  25. /// Register a display for the UI
  26. /// </summary>
  27. /// <param name="settings"><see cref="IDebugDisplaySettings"/> to be registered</param>
  28. public void RegisterDebug(IDebugDisplaySettings settings)
  29. {
  30. DebugManager debugManager = DebugManager.instance;
  31. List<IDebugDisplaySettingsPanelDisposable> panels = new List<IDebugDisplaySettingsPanelDisposable>();
  32. debugManager.RegisterData(this);
  33. m_Settings = settings;
  34. m_DisposablePanels = panels;
  35. m_Settings.Add(new DebugDisplaySettingsRenderGraph());
  36. Action<IDebugDisplaySettingsData> onExecute = (data) =>
  37. {
  38. IDebugDisplaySettingsPanelDisposable disposableSettingsPanel = data.CreatePanel();
  39. DebugUI.Widget[] panelWidgets = disposableSettingsPanel.Widgets;
  40. DebugUI.Panel panel = debugManager.GetPanel(
  41. displayName: disposableSettingsPanel.PanelName,
  42. createIfNull: true,
  43. groupIndex: (disposableSettingsPanel is DebugDisplaySettingsPanel debugDisplaySettingsPanel) ? debugDisplaySettingsPanel.Order : 0);
  44. ObservableList<DebugUI.Widget> panelChildren = panel.children;
  45. panel.flags = disposableSettingsPanel.Flags;
  46. panels.Add(disposableSettingsPanel);
  47. panelChildren.Add(panelWidgets);
  48. };
  49. m_Settings.ForEach(onExecute);
  50. }
  51. /// <summary>
  52. /// Unregister the debug panels
  53. /// </summary>
  54. public void UnregisterDebug()
  55. {
  56. DebugManager debugManager = DebugManager.instance;
  57. if (m_DisposablePanels != null)
  58. {
  59. foreach (IDebugDisplaySettingsPanelDisposable disposableSettingsPanel in m_DisposablePanels)
  60. {
  61. DebugUI.Widget[] panelWidgets = disposableSettingsPanel.Widgets;
  62. string panelId = disposableSettingsPanel.PanelName;
  63. DebugUI.Panel panel = debugManager.GetPanel(panelId, true);
  64. ObservableList<DebugUI.Widget> panelChildren = panel.children;
  65. disposableSettingsPanel.Dispose();
  66. panelChildren.Remove(panelWidgets);
  67. }
  68. m_DisposablePanels = null;
  69. }
  70. debugManager.UnregisterData(this);
  71. }
  72. #region IDebugData
  73. /// <summary>
  74. /// The reset action to be executed when a Reset of the rendering debugger is need
  75. /// </summary>
  76. /// <returns>A <see cref="Action"/> with the restet callback</returns>
  77. public Action GetReset()
  78. {
  79. return Reset;
  80. }
  81. #endregion
  82. }
  83. }