GraphicsManger.cs 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics.CodeAnalysis;
  4. using System.Drawing;
  5. using System.Linq;
  6. using System.Numerics;
  7. using System.Runtime.CompilerServices;
  8. using System.Text;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. using Veldrid.Common.Tools;
  12. using System.Diagnostics;
  13. namespace Veldrid.Common
  14. {
  15. internal class GraphicsManger:IDisposable
  16. {
  17. private LineRange _Range = new LineRange(0, 10000, -4000, 4000);
  18. internal void SetLineRange(int minX,int maxX,int minY,int maxY)
  19. {
  20. _Range.MinX = minX;
  21. _Range.MinY = minY;
  22. _Range.MaxX = maxX;
  23. _Range.MaxY = maxY;
  24. }
  25. private GraphicsDevice graphicsDevice;
  26. private bool disposedValue;
  27. public Boolean IsDisposed => disposedValue;
  28. public Padding DefaultPadding { get; } = new Padding();
  29. public LineRange DefaultLineRange =>_Range;
  30. internal static Vector2 CursorFixedSize => new Vector2(46,56);
  31. public GraphicsDevice Device => graphicsDevice;
  32. public ResourceFactory ResourceFactory => Device.ResourceFactory;
  33. public GraphicsBackend Backend { get; }
  34. public Vector2 DPIScale { get; }
  35. public ShaderManger ShaderManger { get; private set; }
  36. internal CommandList CommandList { get; private set; }
  37. public Camera Camera { get; private set; }
  38. internal GraphicsManger(GraphicsBackend backend = GraphicsBackend.Direct3D11)
  39. {
  40. Backend = backend;
  41. GraphicsDeviceOptions options = new GraphicsDeviceOptions(false, null, true, ResourceBindingModel.Default, true, true, true);
  42. graphicsDevice = StartupUtilities.VeldridWindow.CreateGraphicsDevice(window, options,Backend);
  43. window.BorderVisible = false;
  44. window.Visible = false;
  45. CommandList = Device.ResourceFactory.CreateCommandList();
  46. GLSLManger.Default.Init();
  47. ShaderManger = new ShaderManger(Device);
  48. Camera = new Camera(Device,window);
  49. }
  50. internal void SetWindowSize()
  51. {
  52. Device.ResizeMainWindow((uint)window.Width, (uint)window.Height);
  53. Camera.WindowResized(window.Width, window.Height);
  54. }
  55. internal void Close()
  56. {
  57. Dispose();
  58. }
  59. protected virtual void Dispose(bool disposing)
  60. {
  61. if (!disposedValue)
  62. {
  63. if (disposing)
  64. {
  65. CommandList?.Dispose();
  66. ShaderManger?.Dispose();
  67. Device?.WaitForIdle();
  68. Device?.Dispose();
  69. // TODO: 释放托管状态(托管对象)
  70. }
  71. // TODO: 释放未托管的资源(未托管的对象)并重写终结器
  72. // TODO: 将大型字段设置为 null
  73. disposedValue = true;
  74. }
  75. }
  76. // // TODO: 仅当“Dispose(bool disposing)”拥有用于释放未托管资源的代码时才替代终结器
  77. // ~GraphicsManger()
  78. // {
  79. // // 不要更改此代码。请将清理代码放入“Dispose(bool disposing)”方法中
  80. // Dispose(disposing: false);
  81. // }
  82. public void Dispose()
  83. {
  84. // 不要更改此代码。请将清理代码放入“Dispose(bool disposing)”方法中
  85. Dispose(disposing: true);
  86. GC.SuppressFinalize(this);
  87. }
  88. }
  89. }